国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Pixhawk原生固件PX4之commander函數

2019-11-09 14:45:30
字體:
來源:轉載
供稿:網友

歡迎交流~ 個人 Gitter 交流平臺,點擊直達:Gitter

commaner.cpp包含了PX4中狀態機的邏輯,特此對此段代碼中的部分關鍵函數進行解析。

set_main_state_rc

transition_result_tset_main_state_rc(struct vehicle_status_s *status_local)

說明:根據遙控器開關設置主狀態。

參數:

? status_local: 飛行器應該進入的導航狀態

返回值:

? res = main_state_transition(…);

功能:使能剎車的使用,根據用戶輸入的目標狀態,運用降級控制策略:為用戶提供所需的最接近的飛行模式。分為四個部分MANUAL、ASSIST、AUTO、OFFBOARD,依次進行評估。

main_state_transition

transition_result_tmain_state_transition(struct vehicle_status_s *status, main_state_t new_main_state, uint8_t &main_state_PRev, status_flags_s *status_flags, struct commander_state_s *internal_state)

說明:飛行模式切換的條件判斷函數

參數:

? 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進行條件判斷,切換到一個滿足飛行器實際狀況的最接近的飛行模式。

set_nav_state

bool set_nav_state(struct vehicle_status_s *status, struct commander_state_s *internal_state, const bool data_link_loss_enabled, const bool mission_finished, const bool stay_in_failsafe, status_flags_s *status_flags, bool landed, const bool rc_loss_enabled, const int offb_loss_act, const int offb_loss_rc_act){ navigation_state_t nav_state_old = status->nav_state; ... ... return status->nav_state != nav_state_old;}

說明:檢查失效保護和主狀態,然后根據具體情況為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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 祁连县| 台南县| 浙江省| 洪泽县| 莱阳市| 化州市| 沧州市| 洞头县| 涟源市| 郓城县| 天全县| 双桥区| 长治县| 西平县| 江山市| 南京市| 十堰市| 西丰县| 武陟县| 娄底市| 靖江市| 宣化县| 建水县| 衡南县| 泰顺县| 阿瓦提县| 松桃| 全州县| 平遥县| 湖南省| 曲麻莱县| 黔江区| 罗甸县| 青冈县| 陆川县| 鹤山市| 庆云县| 乌海市| 阿勒泰市| 南部县| 绥滨县|