筆者非科班出身,從事無人機飛控設(shè)計四余年,主要參與飛控系統(tǒng)總體設(shè)計,仿真試驗及外場試飛,對飛行控制與管理系統(tǒng)方面,限于沒有做全面系統(tǒng)性梳理總結(jié),知識屬于囫圇又雜散的狀態(tài)。前段時間組織做過一個界面程序,意圖完成總結(jié)性工作,目前尚在完善過程中。筆者一直認為飛控系統(tǒng)軟件和控制律(算法)是想成為飛控系統(tǒng)設(shè)計大神,手里應(yīng)該掌握的鐮刀和榔頭!本文為筆者學(xué)習(xí)飛控軟件架構(gòu)后整理的學(xué)習(xí)筆記,如有內(nèi)容錯誤,歡迎指正。文中對引用他人內(nèi)容會明確說明,如有疏漏未標明,歡迎指出,筆者將積極回應(yīng)。
一、飛控系統(tǒng)組成模塊
早期無人機沒有軟件架構(gòu),是通過無線電(RC)控制技術(shù)發(fā)展起來的,筆者在大學(xué)本科上的第一門課叫“自動化導(dǎo)論”,記憶深刻,上課開始教授就給出一張圖,一個典型的閉環(huán)控制系統(tǒng)(包含控制目標,控制器,反饋信息,執(zhí)行機構(gòu)),這個也很準備地概括出了早期無人機飛控系統(tǒng)。得益于衛(wèi)星能力的增強和計算機處理能力、算法發(fā)展、實時系統(tǒng)應(yīng)用、機電飛控系統(tǒng)、導(dǎo)航系統(tǒng)方面的技術(shù)進步,目前的飛控系統(tǒng)隨著軟件架構(gòu)變化而發(fā)展。但無人機飛控系統(tǒng)的基本功能是不變的:主要依靠傳感器系統(tǒng)獲取位姿信息,反饋到微處理器進行控制系統(tǒng)的運算,輸出控制指令給相關(guān)子系統(tǒng)(伺服作動/機電系統(tǒng))。所以飛控軟件設(shè)計主要負責(zé)搭建合理軟件流程,使各功能模塊協(xié)調(diào)有效的工作。
當(dāng)然,設(shè)計一個現(xiàn)代無人機飛控系統(tǒng)軟件時,就不僅僅是讓飛機飛起來那么簡單了,也就是說軟件模塊除了基本要素外,還需有其他擴展功能,一個完整的飛控軟件組成模塊包括:
- 1、傳感器模塊(包括預(yù)處理/校準模塊)
- 2、通信模塊
- 3、控制輸入模塊(來自地面或自動控制模塊)
- 4、導(dǎo)航/制導(dǎo)模塊
- 5、飛行模式管理模塊
- 6、參數(shù)管理模塊(控制可調(diào)參數(shù)、性能查值等)
- 7、飛行控制模塊
- 8、起飛/著陸檢測模塊
- 9、應(yīng)急處置/健康管理模塊
- 10、數(shù)據(jù)記錄模塊
- 11、固件升級模塊
…
飛控軟件組成模塊
二、軟件設(shè)計方法
筆者在大學(xué)期間參加大學(xué)生創(chuàng)新大賽時,當(dāng)時團隊三人查資料合計后做的是一款球形機器人(最終結(jié)果它只是完成了直線運動,未能實現(xiàn)設(shè)計之初設(shè)想的萬向運動,定點止停),同實驗室有同學(xué)就做的是涵道無人機,那個時候也就初步接觸了一點飛控知識。
跟我們的機器人軟件一樣,為了方便快捷,軟件系統(tǒng)的編寫采用前后臺操作的方式。前臺應(yīng)用程序是放在mian主函數(shù)里面無限循環(huán),調(diào)用相應(yīng)的處理子函數(shù);后臺中斷程序處理異步觸發(fā)事件。為保證時間的精確性,有些固定周期執(zhí)行的任務(wù)都要靠中斷服務(wù)程序來完成,但是在中斷處理程序中只標記事件的發(fā)生,不做任何處理,轉(zhuǎn)而由后臺系統(tǒng)調(diào)度處理,這是為了避免在中斷程序執(zhí)行時間過長影響后續(xù)和其他中斷事件。
目前,很多開源飛控是帶OS(片上系統(tǒng))的飛控設(shè)計。across在一篇總結(jié)文章中這樣描述:這種設(shè)計方法是在某一操作系統(tǒng)上進行二次開發(fā),OS通過一個內(nèi)核的調(diào)度來管理CPU,使得所有的模塊也就是任務(wù)都能正常運行,達到相對意義的“并行”。同時采用基于優(yōu)先級的可剝奪性調(diào)度算法來保證實時性。RTOS 將應(yīng)用層軟件分成多個任務(wù),簡化了應(yīng)用軟件的設(shè)計,同時使得飛行控制的實時性得到保證。
直觀地說,帶OS的飛控,其固件同時附帶了一系列工具集、系統(tǒng)驅(qū)動/模塊與外圍軟件接口層,所有這些軟件(包括用戶自定義的飛控軟件)隨OS內(nèi)核一起,統(tǒng)一編譯為固件形式,然后上傳到飛控板中,從而實現(xiàn)對飛控板的軟件配置。
帶OS的飛控系統(tǒng)軟件架構(gòu)中,最有意思的一點在于整個架構(gòu)的抽象性(多態(tài)性),即:為了最大限度保障飛控算法代碼的重用性,其將飛控邏輯與具體的底層控制器指令實現(xiàn)進行了解耦合。
博主NeoRAGEx2002在他的一篇博文中對上述兩種設(shè)計方法有一段總結(jié),我比較認同,摘錄如下:有很多搞自動化出身、沒太多軟件經(jīng)驗的朋友傾向于直接使用底層控制協(xié)議來控制飛控板,但實際上PX4架構(gòu)(筆者注:帶OS的飛控設(shè)計實例)已經(jīng)在更高的抽象層面上提供了更好的選擇,無論是代碼維護成本、開發(fā)效率、硬件兼容性都能顯著高于前者。很多支持前者方式的開發(fā)者的理由主要在于高層封裝機制效率較低,而飛控板性能不夠,容易給飛控板造成較大的處理負載,但實際從個人感覺上來看,遵循PX4的軟件架構(gòu)模式反倒更容易實現(xiàn)較高處理性能,不容易產(chǎn)生控制擁塞,提升無人機側(cè)系統(tǒng)的并發(fā)處理效率。
PX4/Pixhawk飛控軟件架構(gòu)
三、架構(gòu)進化
Wyle Aerospace Group的Fred Briggs發(fā)表過一篇論文《UAV Software Architecture》(無人機軟件架構(gòu))對相關(guān)軟件架構(gòu)進化過程做了綜述性梳理,筆者對這部分內(nèi)容進行簡化后分享如下:
- A. 開放控制平臺
開放控制平臺(Open Control Platform,OCP)是一種面向?qū)ο蟮能浖A(chǔ)構(gòu)件,“提供一條將控制設(shè)計快速轉(zhuǎn)換為桌面或嵌入式目標代碼的路徑,它使得控制設(shè)計師可以專注于控制設(shè)計而非集成、通信、發(fā)布、移植、執(zhí)行、調(diào)度、系統(tǒng)配置和資源管理等軟件設(shè)計問題?!?/p>
- B. WITAS分布式UAV架構(gòu)
此分布式架構(gòu)使用COBRA作為基礎(chǔ)構(gòu)建用于即插即用的軟硬件環(huán)境,并且基于一種以反應(yīng)為中心(reactive concentric)的軟件控制方法。最大的設(shè)計挑戰(zhàn)是控制系統(tǒng)有多個控制模式,可由架構(gòu)激活以動態(tài)調(diào)用。此設(shè)計的軟件架構(gòu)包括一個慎思、反應(yīng)和控制部分,因此不再是一個分層遞階 結(jié)構(gòu)而是一個“以反應(yīng)為中心”的架構(gòu)。此反應(yīng)中心的架構(gòu)是一個高度分布、松散耦合、并發(fā)的架構(gòu),具有很多反應(yīng)控制和并發(fā)運行的服務(wù)進程。
分布式UAV WITAS架構(gòu)的軟件組件(2004)
- C. ARL/PSU智能控制器
此IC(智能)架構(gòu)是一種基于行為(相對于基于模型)的架構(gòu),設(shè)計采用層級控制,由于從下至上的模式增加了功能復(fù)雜性。它經(jīng)過改進,以滿足協(xié)作能力的要求。圖4所示IC架構(gòu)包含感知和響應(yīng)模塊。感知模塊通過接收傳感器的輸入數(shù)據(jù)建立一個外部真實世界的表示。響應(yīng)模塊使用感知模塊建立的真實世界的認知生成一個規(guī)劃,來執(zhí)行特定任務(wù)。
ARL/PSU 智能控制器高層架構(gòu)(2008)
- D. SheLion UAV系統(tǒng)
Cai, G、Chen, B.和Lee, T.在《無人旋翼系統(tǒng)》介紹了一種行為式的架構(gòu),他們指出此架構(gòu)可以普遍應(yīng)用到無人機,包括機載軟件系統(tǒng)和地面控制站的軟件系統(tǒng)。飛行控制模塊使用多線程框架,用于操作導(dǎo)航傳感器和伺服作動器、日志記錄飛行數(shù)據(jù)、與地面站通信以及實施自動控制算法。自動控制采用基于行為的體系結(jié)構(gòu)。SheLion飛行控制系統(tǒng)的框架如圖所示。
SheLion飛行控制軟件系統(tǒng)框架(2011)
四、示例分析
下面簡單介紹一款開源的飛控代碼,都是網(wǎng)上找的代碼,主要看下軟件架構(gòu)。 基于MDK的開發(fā)環(huán)境,使用C語言,基于STM32的官方庫。
代碼結(jié)構(gòu):
- STARTUPCODE:stm32的啟動文件;
- StdPeriph_Driver:基于3.5版本的庫函數(shù)的驅(qū)動文件;
- USB-FS-Device_Driver:USB設(shè)備驅(qū)動文件;
- usb_virture_com:USB的板級支持驅(qū)動;
- Driver:板級驅(qū)動層,包含一些總線和外設(shè)的驅(qū)動程序;
- Modules:傳感器模塊的驅(qū)動程序;
- Algorithm:算法程序,包含濾波、數(shù)學(xué)庫等;
- Function:飛行應(yīng)用層,關(guān)鍵模塊,比如姿態(tài)估計、姿態(tài)控制等;
- User:主程序和中斷應(yīng)用程序;
- ANO_DT:支持匿名地面站協(xié)議;
- Heigh:高度控制程序;
整個代碼的模塊化非常細致,比較清晰。 代碼設(shè)計就是前面所講的裸機代碼的一般實現(xiàn)方法。
先看main文件:
非常簡單,上電進行各種初始化,然后大循環(huán),循環(huán)執(zhí)行任務(wù)調(diào)度。
下面看下loop的函數(shù)內(nèi)容:
將整個飛控代碼分成了幾個周期分別為5ms,10ms,25ms、50ms和100ms的任務(wù)。而每個任務(wù)的時間標志flag是由一個時間片函數(shù)進行管理的。設(shè)了一個tick節(jié)拍,2.5ms一次,所以比如計數(shù)達到2次,則5ms的定時任務(wù)即可執(zhí)行。
而這個時間片函數(shù)是一個定時中斷,每隔2.5ms執(zhí)行一次。
這種程序設(shè)計方法如下圖所示。定時中斷的影響只在任務(wù)調(diào)度模塊里起作用,依次讓不同的任務(wù)按不同的周期進行執(zhí)行。要注意的是所設(shè)計的每個任務(wù)運行時間不能超過設(shè)定的周期。
本期素材部分來自網(wǎng)絡(luò):across的《飛控軟件設(shè)計系統(tǒng)性總結(jié)》、Fred Briggs的論文《UAV Software Architecture》、博主NeoRAGEx2002的《PX4/Pixhawk飛控軟件結(jié)構(gòu)簡介》
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至2161241530@qq.com 舉報,一經(jīng)查實,本站將立刻刪除。如若轉(zhuǎn)載,請注明出處:http://m.sdanke.com/wurenjibaike/djiwurenzhishi/8168/