您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何理解PX4/Pixhawk飛控軟件架構,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
PX4是目前最流行的開源飛控板之一。PX4的軟件系統實際上就是一個firmware,其核心OS為NuttX(http://www.nuttx.org/)實時ARM系統。其固件同時附帶了一系列工具集、系統驅動/模塊與外圍軟件接口層,所有這些軟件(包括用戶自定義的飛控軟件)隨OS內核一起,統一編譯為固件形式,然后上傳到飛控板中,從而實現對飛控板的軟件配置。
PX4配套的軟件架構主要分為4層。理解其軟件架構是開發用戶自定義飛控應用軟件的基礎。
a) API層:這個好理解。
b) 框架層:包含了操作基礎飛行控制的默認程序集(節點)
c) 系統庫:包含了所有的系統庫和基本交通控制的函數
d) OS內核:提供硬件驅動程序、網絡、UAVCAN和故障安全系統
上述是個面向PX4系統實現者的相對具體的軟件架構。實際上還有另外一種面向PX4自定義飛控應用開發者的高層軟件架構描述,相對抽象,但更簡單,就是整個PX4的軟件從整體上分為2層:
a) PX4 flight stack:一系列自治無人機自動控制算法的集合
b) PX4 Middleware:一系列針對無人機控制器、傳感器等物理設備的驅動及底層通信、調度等機制的集合
PX4軟件架構中,最有意思的一點在于整個架構的抽象性(多態性)。即,為了最大限度保障飛控算法代碼的重用性,其將飛控邏輯與具體的底層控制器指令實現進行了解耦合。一套高層飛控算法(如autopilot、GeoFence等)在不做顯著修改的情況下,能夠適用于固定翼、直升機、多旋翼等多種機型的控制場合,這時候就體現出PX4飛控的威力來了:在用戶程序寫好之后,如果需要替換無人機機架的話,僅需簡單的修改一下機架配置參數即可,高層的用戶自定義飛控應用幾乎無需修改。
理解上述初衷至關重要。有很多搞自動化出身、沒太多軟件經驗的朋友傾向于直接使用底層控制協議來控制飛控板,但實際上PX4架構已經在更高的抽象層面上提供了更好的選擇,無論是代碼維護成本、開發效率、硬件兼容性都能顯著高于前者。很多支持前者方式的開發者的理由主要在于高層封裝機制效率較低,而飛控板性能不夠,容易給飛控板造成較大的處理負載,但實際從個人感覺上來看,遵循PX4的軟件架構模式反倒更容易實現較高處理性能,不容易產生控制擁塞,提升無人機側系統的并發處理效率。
Mavlink是目前最常見的無人機飛控協議之一。PX4對Mavlink協議提供了良好的原生支持。該協議既可以用于地面站(GCS)對無人機(UAV)的控制,也可用于UAV對GCS的信息反饋。其飛控場景一般是這樣的:
a) 手工飛控:GCS -> (MavLink) -> UAV
b) 信息采集:GCS <- (Mavlink) <- UAV
c) 自治飛控:User App -> (MavLink) -> UAV
也就是說,如果你想實現地面站控制飛行,那么由你的地面站使用Mavlink協議,通過射頻信道(或 wifi etc.)給無人機發送控制指令就可以了。如果你想實現無人機自主飛行,那么就由你自己寫的應用(運行在無人機系統上)使用Mavlink協議給無人機發送本地的控制指令就可以了。
然而,為實現飛控架構的靈活性,避免對底層實現細節的依賴,在PX4中,并不鼓勵開發者在自定義飛控程序中直接使用Mavlink,而是鼓勵開發者使用一種名為uORB((Micro Object Request Broker,微對象請求代理)的消息機制。其實uORB在概念上等同于posix里面的命名管道(named pipe),它本質上是一種進程間通信機制。由于PX4實際使用的是NuttX實時ARM系統,因此uORB實際上相當于是多個進程(驅動級模塊)打開同一個設備文件,多個進程(驅動級模塊)通過此文件節點進行數據交互和共享。
在uORB機制中,交換的消息被稱之為topic,一個topic僅包含一種message類型(即數據結構)。每個進程(或驅動模塊)均可“訂閱”或“發布”多個topic,一個topic可以存在多個發布者,而且一個訂閱者可也訂閱多個topic。而正因為有了uORB機制的存在,上述飛控場景變成了:
a) 手工飛控:GCS -> (MavLink) -> (uORB topic) -> UAV
b) 信息采集:GCS <- (Mavlink) <- (uORB topic) <- UAV
c) 自治飛控:User App -> (uORB topic) -> (MavLink) -> UAV
有了以上背景基礎,便可以自寫飛控邏輯了,僅需在PX4源碼中,添加一個自定義module,然后使用uORB訂閱相關信息(如傳感器消息等),并發布相關控制信息(如飛行模式控制消息等)即可。具體的uORB API、uORB消息定義可參考PX4文檔與源碼,所有控制命令都在firmware代碼的msg里面,不再敷述。
最后值得一提的是,在PX4系統中,還提供了一個名為mavlink的專用module,源碼在firmware的src/modules/mavlink中,這貨與linux的控制臺命令工具集相當相似,其既可以作為ntt控制臺下的命令使用,又可作為系統模塊加載后臺運行。
實現的功能包括:
1)uORB消息解析,將uORB消息實際翻譯為具體的Mavlink底層指令,或反之。
2)通過serial/射頻通信接口獲取或發送Mavlink消息,既考慮到了用戶自寫程序的開發模式,也適用于類似linux的腳本工具鏈開發模式,使用起來很靈活。
看完上述內容,你們對如何理解PX4/Pixhawk飛控軟件架構有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。