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