ardrone 1.0 提供的win32 sdk_demo 分析

1、程序运行后首先运行ardrone_tool_win32.c,看它的main函数,在里面调用了test_drone_connection()函数 ,用来连接无人机发出的WiFi。随后调用ardrone_tool_setup_com()函数配置AT命令,视频传输的基本配置。然后调用ardrone_tool_init函数,在这个函数里面主要进行的是调用custom_code.c中的ardrone_tool_init_custom函数,在这里面注册键盘为无人机控制,开启directx_renderer_thread线程用来监控键盘输入,video_stage函数用来播放传回的视频
2、详细说一下ardrone sdk 中关于线程的配置
vp_api_get_thread_idx_tab_by_name函数得到线程名在线程表格中对应的索引,而后调用vp_api_start_thread_tab函数开启线程。在vp_api_thread_helper.h定义 宏 #define start_thread(idx, param) vp_api_start_thread_tab(threadTable, idx, param) #define START_THREAD(name,param) start_thread(get_thread_idx(#name), param)。所有线程定义在custom_code.c中BEGIN_THREAD_TABLE中。
3、在main函数中随后不断调用ardrone_tool_update函数,在这里面调用ardrone_tool_input_updata()函数检测键盘输入,这个函数调用gamepad.cpp中的update_dx_keyboard函数,检测键盘输入,同时,控制无人机。ardrone_at_set_flat_trim(); //向无人机发送确定无人机是水平躺着,每次无人机启动都要发送,不可在无人机飞行时调用此函数
pitch = (TESTKB(DIK_NUMPAD2))? (+1.0f) : (TESTKB(DIK_NUMPAD8))? (-1.0f) :
(TESTKB(DIK_K))? (+1.0f) : (TESTKB(DIK_I))? (-1.0f) :(0.0f) ;//若按键是2,则pitch加一,是8则-1,是K则加一,是I则减一,否则不变。控制前后
roll = (TESTKB(DIK_NUMPAD4))? (-1.0f) : (TESTKB(DIK_NUMPAD6))? (+1.0f) :
(TESTKB(DIK_J))? (-1.0f) : (TESTKB(DIK_L))? (+1.0f) : (0.0f) ;//控制左右
yaw = (TESTKB(DIK_NUMPAD7))? (-1.0f) : (TESTKB(DIK_NUMPAD9))? (+1.0f) :
(TESTKB(DIK_NUMPAD3))? (-1.0f) : (TESTKB(DIK_NUMPAD1))? (+1.0f) :
(TESTKB(DIK_U))? (-1.0f) : (TESTKB(DIK_O))? (+1.0f) : (0.0f) ;//控制旋转
gaz = (TESTKB(DIK_A))? (-1.0f) : (TESTKB(DIK_Q))? (1.0f) : (0.0f) ;//控制上升下降
hovering = (TESTKB(DIK_G))? (1):(0) ;//控制悬停
ardrone_tool_set_ui_pad_start(1)起飞,0是降落
ardrone_at_set_progress_cmd((hovering)?0:1,roll, pitch, gaz, yaw);具体控制无人机的飞行

你可能感兴趣的:(ardrone 1.0 提供的win32 sdk_demo 分析)