歡迎交流~ 個人 Gitter 交流平臺,點擊直達:
commaner.cpp包含了PX4中狀態機的邏輯,特此對此段代碼中的部分關鍵函數進行解析。
說明:根據遙控器開關設置主狀態。
參數:
? status_local: 飛行器應該進入的導航狀態
返回值:
? res = main_state_transition(…);
功能:使能剎車的使用,根據用戶輸入的目標狀態,運用降級控制策略:為用戶提供所需的最接近的飛行模式。分為四個部分MANUAL、ASSIST、AUTO、OFFBOARD,依次進行評估。
說明:飛行模式切換的條件判斷函數
參數:
? status:導航狀態,飛行器應該進入的狀態;
? new_main_state: 期望切換到的新狀態
? &main_state_prev: 之前的狀態
? status_flags: commander內部的狀態標志;
? internal_state: 主狀態,用戶想要的狀態。由遙控器設置,也可以由地面站通過數傳控制
返回值:
? ret = TRANSITION_DENIED; // 表示不滿足切換條件,拒絕狀態切換
? ret = TRANSITION_CHANGED; // 切換到某個狀態,不一定是用戶想要的目標狀態,會根據降級策略,切換至一個最接近的狀態。
? ret = TRANSITION_NOT_CHANGED;
if (ret == TRANSITION_CHANGED) { if (internal_state->main_state != new_main_state) { main_state_prev = internal_state->main_state; internal_state->main_state = new_main_state; // 更新狀態 internal_state->timestamp = hrt_absolute_time(); } else { ret = TRANSITION_NOT_CHANGED; } }功能:對用戶輸入的new_main_state進行條件判斷,切換到一個滿足飛行器實際狀況的最接近的飛行模式。
說明:檢查失效保護和主狀態,然后根據具體情況為navigator設置導航狀態
參數:
? status:導航狀態,飛行器應該進入的狀態;
? internal_state: 主狀態,用戶想要的狀態;
? data_link_loss_enabled:與地面站的數據鏈丟失;
? mission_finished: 任務完成;
? stay_in_failsafe:故障保護;
? status_flags:commander內部的狀態標志;
? landed: 著陸;
? rc_loss_enabled:遙控信號丟失;
? offb_loss_act:
? offb_loss_rc_act:
返回值:
? 1; // 導航狀態改變
? 0; // 未改變
功能:根據commander內部的internal_state主狀態,在飛機出現故障時進行失效保護狀態切換,評估飛行器應該進入何種飛行模式。
一般情況為:
①global位置有效 && 起飛點(home)有效 && GPS有效
進入NAVIGATION_STATE_AUTO_**RCRECOVER**模式
②local位置有效 && GPS有效
進入NAVIGATION_STATE_AUTO_**LAND**模式(自動降落)
③local高度有效
進入NAVIGATION_STATE_**DESCEND**模式(無位置控制的下降模式)
④終止飛行
進入NAVIGATION_STATE_**TERMINATION**模式
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? By Fantasy
新聞熱點
疑難解答