1. 程式人生 > >PX4飛控學習(五)

PX4飛控學習(五)

這裡寫圖片描述

PX4的應用

  1. 程式入口為 程式名_main(int argc, char *argv[])這裡實現應用引數。
  2. 主迴圈函式在
    task_main(int argc, char *argv[])
    thread_main(int argc, char *argv[])
    等函式中。
  3. 主迴圈函式通過
    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 ()
    啟動 commander_thread_main()
    “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 有關的函式