PX4飛控學習(五)
阿新 • • 發佈:2019-01-26
PX4的應用
- 程式入口為 程式名_main(int argc, char *argv[])這裡實現應用引數。
- 主迴圈函式在
task_main(int argc, char *argv[])
thread_main(int argc, char *argv[])等函式中。 - 主迴圈函式通過
orb_subscribe(const struct orb_metadata *meta, const void *data)
orb_check(int handle, bool *updated)
orb_copy(const struct orb_metadata *meta, int handle, void *buffer)
獲取系統中的應用訊息機身的狀態訊息。
orb_advertise(const struct orb_metadata *meta, const void *data)
orb_publish(const struct orb_metadata *meta, orb_advert_t handle, const void *data)
釋出訊息。
控制程式 commander
commander功能:
1. 遙控,地面站(mavlink)對飛機模式的控制。
2. 校準程式啟動
3. 報警器和 rgbled燈的控制
src/modules/commander/commander.cpp
- commander_main(int argc, char *argv[])
“start”:通過px4_task_spawn_cmd ()
“stop” :修改thread_should_exit 跳出 commander_thread_main()
“status” :呼叫print_status()輸出飛控狀態
“calibrate”:校準程式 ,後面加以下引數:
“mag”(地磁)
“accel”(加速度計)
“gyro”(角速度計)
“level”(不清楚這個)
“esc”(電調)
“airspeed”(風速?)
“check”:檢測
“arm”:啟用
“disarm”:待機
“takeoff”:起飛(這裡需滿足一些條件)
“land”:降落(真心不知道這個引數什麼時候用)
“transition” :好像是垂直起飛的飛行器才會用到的東西 具體沒細看。
“mode” :飛機模式,後面加以下引數:
“manual” 手動模式
“altctl” 高度控制模式
“posctl” 位置控制模式(gps模式)
“auto:mission” 自動駕駛任務模式(地面站下發任務座標)
“auto:loiter” 自動懸停模式
“auto:rtl” 自動降落(rtl : return to land)
“acro” 雜技模式?
“offboard” 板外控制(控制權交地面站)
“stabilized” 穩定模式(姿態控制模式)
“rattitude” 不明白這個模式請教高手
“auto:takeoff” 自動起飛
“rattitude” 不明白這個模式請教高手
“auto:takeoff” 自動起飛
“auto:land” 自動降落 (和rtl不一樣的是否回到home點)
“lockdown” : 後加 “on” 或者 “off” 沒試驗過 commander_thread_main(int argc, char *argv[])
while (!thread_should_exit) { .......... }
無限迴圈,流程以後補上。
- set_main_state_rc(struct vehicle_status_s *status_local, ……)
遙控器控制飛行器狀態,流程圖如下:
bool handle_command(struct vehicle_status_s *status_local, ……..)
解碼mavlink命令,呼叫main_state_transition()改變飛機狀態( set_main_state_rc()也呼叫該函式 )void set_control_mode()
兩個控制飛機的重要引數static struct vehicle_status_s status = {}; static struct vehicle_control_mode_s control_mode = {};
通過main_state_transition()改變status引數,通過status引數改變control_mode引數,control_mode傳遞給pos_ctrl ,att_ctrl 改變飛機的控制模式。
不想使用PX4的控制模式, 就需要更改 與control_mode 有關的函式