飛控軟件架構技術


飛控系統軟件和控制律(算法)是核心。

一、飛控系統組成模塊

早期無人機沒有軟件架構,是通過無線電(RC)控制技術發展起來的,筆者在大學本科上的第一門課叫“自動化導論”,記憶深刻,上課開始教授就給出一張圖,一個典型的閉環控制系統(包含控制目標,控制器,反饋信息,執行機構),這個也很准備地概括出了早期無人機飛控系統。得益於衛星能力的增強和計算機處理能力、算法發展、實時系統應用、機電飛控系統、導航系統方面的技術進步,目前的飛控系統隨着軟件架構變化而發展。但無人機飛控系統的基本功能是不變的:主要依靠傳感器系統獲取位姿信息,反饋到微處理器進行控制系統的運算,輸出控制指令給相關子系統(伺服作動/機電系統)。所以飛控軟件設計主要負責搭建合理軟件流程,使各功能模塊協調有效的工作。

當然,設計一個現代無人機飛控系統軟件時,就不僅僅是讓飛機飛起來那么簡單了,也就是說軟件模塊除了基本要素外,還需有其他擴展功能,一個完整的飛控軟件組成模塊包括:

1、傳感器模塊(包括預處理/校准模塊)

2、通信模塊

3、控制輸入模塊(來自地面或自動控制模塊)

4、導航/制導模塊

5、飛行模式管理模塊

6、參數管理模塊(控制可調參數、性能查值等)

7、飛行控制模塊

8、起飛/着陸檢測模塊

9、應急處置/健康管理模塊

10、數據記錄模塊

11、固件升級模塊

飛控軟件組成模塊

二、軟件設計方法

筆者在大學期間參加大學生創新大賽時,當時團隊三人查資料合計后做的是一款球形機器人(最終結果它只是完成了直線運動,未能實現設計之初設想的萬向運動,定點止停),同實驗室有同學就做的是涵道無人機,那個時候也就初步接觸了一點飛控知識。

跟我們的機器人軟件一樣,為了方便快捷,軟件系統的編寫采用前后台操作的方式。前台應用程序是放在main主函數里面無限循環,調用相應的處理子函數;后台中斷程序處理異步觸發事件。為保證時間的精確性,有些固定周期執行的任務都要靠中斷服務程序來完成,但是在中斷處理程序中只標記事件的發生,不做任何處理,轉而由后台系統調度處理,這是為了避免在中斷程序執行時間過長影響后續和其他中斷事件。

目前,很多開源飛控是帶OS(片上系統)的飛控設計。across在一篇總結文章中這樣描述:這種設計方法是在某一操作系統上進行二次開發,OS通過一個內核的調度來管理CPU,使得所有的模塊也就是任務都能正常運行,達到相對意義的“並行”。同時采用基於優先級的可剝奪性調度算法來保證實時性。RTOS 將應用層軟件分成多個任務,簡化了應用軟件的設計,同時使得飛行控制的實時性得到保證。

直觀地說,帶OS的飛控,其固件同時附帶了一系列工具集、系統驅動/模塊與外圍軟件接口層,所有這些軟件(包括用戶自定義的飛控軟件)隨OS內核一起,統一編譯為固件形式,然后上傳到飛控板中,從而實現對飛控板的軟件配置。

帶OS的飛控系統軟件架構中,最有意思的一點在於整個架構的抽象性(多態性),即:為了最大限度保障飛控算法代碼的重用性,其將飛控邏輯與具體的底層控制器指令實現進行了解耦合。

博主NeoRAGEx2002在他的一篇博文中對上述兩種設計方法有一段總結,我比較認同,摘錄如下:有很多搞自動化出身、沒太多軟件經驗的朋友傾向於直接使用底層控制協議來控制飛控板,但實際上PX4架構(筆者注:帶OS的飛控設計實例)已經在更高的抽象層面上提供了更好的選擇,無論是代碼維護成本、開發效率、硬件兼容性都能顯著高於前者。很多支持前者方式的開發者的理由主要在於高層封裝機制效率較低,而飛控板性能不夠,容易給飛控板造成較大的處理負載,但實際從個人感覺上來看,遵循PX4的軟件架構模式反倒更容易實現較高處理性能,不容易產生控制擁塞,提升無人機側系統的並發處理效率。

PX4/Pixhawk飛控軟件架構

三、架構進化

Wyle Aerospace Group的Fred Briggs發表過一篇論文《UAV Software Architecture》(無人機軟件架構)對相關軟件架構進化過程做了綜述性梳理,筆者對這部分內容進行簡化后分享如下:

  • A. 開放控制平台

開放控制平台(Open Control Platform,OCP)是一種面向對象的軟件基礎構件,“提供一條將控制設計快速轉換為桌面或嵌入式目標代碼的路徑,它使得控制設計師可以專注於控制設計而非集成、通信、發布、移植、執行、調度、系統配置和資源管理等軟件設計問題。”

  • B. WITAS分布式UAV架構

此分布式架構使用COBRA作為基礎構建用於即插即用的軟硬件環境,並且基於一種以反應為中心(reactive concentric)的軟件控制方法。最大的設計挑戰是控制系統有多個控制模式,可由架構激活以動態調用。此設計的軟件架構包括一個慎思、反應和控制部分,因此不再是一個分層遞階 結構而是一個“以反應為中心”的架構。此反應中心的架構是一個高度分布、松散耦合、並發的架構,具有很多反應控制和並發運行的服務進程。

分布式UAV WITAS架構的軟件組件(2004)

  • C. ARL/PSU智能控制器

此IC(智能)架構是一種基於行為(相對於基於模型)的架構,設計采用層級控制,由於從下至上的模式增加了功能復雜性。它經過改進,以滿足協作能力的要求。圖4所示IC架構包含感知和響應模塊。感知模塊通過接收傳感器的輸入數據建立一個外部真實世界的表示。響應模塊使用感知模塊建立的真實世界的認知生成一個規划,來執行特定任務。

ARL/PSU 智能控制器高層架構(2008)

  • D. SheLion UAV系統

Cai, G、Chen, B.和Lee, T.在《無人旋翼系統》介紹了一種行為式的架構,他們指出此架構可以普遍應用到無人機,包括機載軟件系統和地面控制站的軟件系統。飛行控制模塊使用多線程框架,用於操作導航傳感器和伺服作動器、日志記錄飛行數據、與地面站通信以及實施自動控制算法。自動控制采用基於行為的體系結構。SheLion飛行控制系統的框架如圖所示。

SheLion飛行控制軟件系統框架(2011)

四、示例分析

下面簡單介紹一款開源的飛控代碼,都是網上找的代碼,主要看下軟件架構。基於MDK的開發環境,使用C語言,基於STM32的官方庫。

代碼結構:

  • STARTUPCODE:stm32的啟動文件;
  • StdPeriph_Driver:基於3.5版本的庫函數的驅動文件;
  • USB-FS-Device_Driver:USB設備驅動文件;
  • usb_virture_com:USB的板級支持驅動;
  • Driver:板級驅動層,包含一些總線和外設的驅動程序;
  • Modules:傳感器模塊的驅動程序;
  • Algorithm:算法程序,包含濾波、數學庫等;
  • Function:飛行應用層,關鍵模塊,比如姿態估計、姿態控制等;
  • User:主程序和中斷應用程序;
  • ANO_DT:支持匿名地面站協議;
  • Heigh:高度控制程序;

整個代碼的模塊化非常細致,比較清晰。代碼設計就是前面所講的裸機代碼的一般實現方法。

先看main文件:

非常簡單,上電進行各種初始化,然后大循環,循環執行任務調度。

下面看下loop的函數內容:

將整個飛控代碼分成了幾個周期分別為5ms,10ms,25ms、50ms和100ms的任務。而每個任務的時間標志flag是由一個時間片函數進行管理的。設了一個tick節拍,2.5ms一次,所以比如計數達到2次,則5ms的定時任務即可執行。

而這個時間片函數是一個定時中斷,每隔2.5ms執行一次。

這種程序設計方法如下圖所示。定時中斷的影響只在任務調度模塊里起作用,依次讓不同的任務按不同的周期進行執行。要注意的是所設計的每個任務運行時間不能超過設定的周期。

轉載一篇好文章,源自知飛之家,如有侵權,請留言

本期素材部分來自網絡:across的《飛控軟件設計系統性總結》、Fred Briggs的論文《UAV Software Architecture》、博主NeoRAGEx2002的《PX4/Pixhawk飛控軟件結構簡介》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM