在本節我們來學習Commander中的3種狀態切換過程,其中包括無人機的解鎖狀態處理、主狀態處理和導航狀態處理。這3種狀態是無人機中非常重要的狀態,直接影響飛機的控制導航邏輯和控制邏輯,進而影響飛機的實際飛行效果。下面我們就來分別對這3種飛行狀態的處理過程進行分析:

一、arming_state解鎖/鎖定狀態

解鎖狀態在PX4飛控程序中的定義名稱為Arming state表示飛機當前的解鎖和鎖定狀態,它被定義成vehicle_status.msg這個uORB中的uint8 arming_state屬性,實際上arming_state並不僅僅用於表示「鎖定」和「解鎖」這兩個狀態,它一共有6個狀態也定義在vehicle_status.msg這個UORB當中,其內容如下:

實際上,Arming state是為了表示無人機在整個飛行過程中可能出現的基本狀態,其中只有Arming state為ARMING_STATE_ARMED時,才表示飛控解鎖,也就是電機解鎖。用於表示飛控實際對電機「鎖定」和「解鎖」狀態的變數並非Arming state,而是actuator_armed.msg這個uORB的bool armed屬性。注意這個變數是一個布爾型變數,它只表示無人機系統「解鎖」和「鎖定」這兩個狀態。

上述的6個狀態切換圖如下:

在PX4程序中使用了一個二位數組來表示此狀態機的切換關係,如下:

在這個表示Arming state的二位數組中,每一行表示無人機需要切換的新的狀態,每一列表示當前狀態。從當前狀態切換到新狀態時的限制條件就是arming_transitions這個二位數組的值,如果為true表示允許切換,如果為false表示不允許切換。

二、main_state主狀態

主狀態就是我們之前所介紹的無人機的飛行模式。切換主狀態就是切換飛行模式,使無人機進入不同的飛行控制邏輯當中。當然,飛控的主狀態不可以任意切換,切換到不同的主狀態需要不同的前提條件。每一種狀態的條件前提我們可以按下表進行判斷:

用於表示主狀態的變數被定義為commander_state.msg這個uORB中的uint8 main_state屬性。其實際值與所表示的狀態對應關係如下:

在主狀態切換函數main_state_transition()處理了主狀態的切換邏輯,具體代碼如下:

以上代碼中所處理的邏輯與上述表格中的內容一致,不再贅述。

三、導航狀態

導航狀態被定義在vehicle_status.msg這個uORB的uint8 nav_state屬性,其實際值與導航狀態的對應關係如下:

與主狀態切換不同,無人機會根據當前狀態與不同的條件對導航狀態進行降級評估,也就是說如果當前飛行模式的必要條件如果不滿足,則會切入到一個較為安全的導航狀態。在正常情況下,導航狀態值會被保持與主狀態一致。

但是,在實際飛行中,會遇到很多異常情況,飛控程序會根據預先對相關保護參數的設定值修改導航狀態,例如,當數傳信號丟失後的處理方法如下:


推薦閱讀:
相关文章