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