控系統軟體和控制律(演算法)是核心。
早期無人機沒有軟體架構,是通過無線電(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發表過一篇**《u** software architecture》(無人機軟體架構)對相關軟體架構進化過程做了綜述性梳理,筆者對這部分內容進行簡化後分享如下:
開放控制平台(open control platform,ocp)是一種物件導向的軟體基礎構件,「提供一條將控制設計快速轉換為桌面或嵌入式目標**的路徑,它使得控制設計師可以專注於控制設計而非整合、通訊、發布、移植、執行、排程、系統配置和資源管理等軟體設計問題。」
此分布式架構使用cobra作為基礎構建用於即插即用的軟硬體環境,並且基於一種以反應為中心(reactive concentric)的軟體控制方法。最大的設計挑戰是控制系統有多個控制模式,可由架構啟用以動態呼叫。此設計的軟體架構包括乙個慎思、反應和控制部分,因此不再是乙個分層遞階 結構而是乙個「以反應為中心」的架構。此反應中心的架構是乙個高度分布、鬆散耦合、併發的架構,具有很多反應控制和併發執行的服務程序。
分布式u** witas架構的軟體元件(2004)
此ic(智慧型)架構是一種基於行為(相對於基於模型)的架構,設計採用層級控制,由於從下至上的模式增加了功能複雜性。它經過改進,以滿足協作能力的要求。圖4所示ic架構包含感知和響應模組。感知模組通過接收感測器的輸入資料建立乙個外部真實世界的表示。響應模組使用感知模組建立的真實世界的認知生成乙個規劃,來執行特定任務。
arl/psu 智慧型控制器高層架構(2008)
cai, g、chen, b.和lee, t.在《無人旋翼系統》介紹了一種行為式的架構,他們指出此架構可以普遍應用到無人機,包括機載軟體系統和地面控制站的軟體系統。飛行控制模組使用多執行緒框架,用於操作導航感測器和伺服作動器、日誌記錄飛行資料、與地面站通訊以及實施自動控制演算法。自動控制採用基於行為的體系結構。shelion飛行控制系統的框架如圖所示。
shelion飛行控制軟體系統框架(2011)
下面簡單介紹一款開源的飛控**,都是網上找的**,主要看下軟體架構。基於mdk的開發環境,使用c語言,基於stm32的官方庫。
**結構:
整個**的模組化非常細緻,比較清晰。**設計就是前面所講的裸機**的一般實現方法。
先看main檔案:
非常簡單,上電進行各種初始化,然後大迴圈,迴圈執行任務排程。
下面看下loop的函式內容:
將整個飛控**分成了幾個週期分別為5ms,10ms,25ms、50ms和100ms的任務。而每個任務的時間標誌flag是由乙個時間片函式進行管理的。設了乙個tick節拍,2.5ms一次,所以比如計數達到2次,則5ms的定時任務即可執行。
而這個時間片函式是乙個定時中斷,每隔2.5ms執行一次。
這種程式設計方法如下圖所示。定時中斷的影響只在任務排程模組裡起作用,依次讓不同的任務按不同的週期進行執行。要注意的是所設計的每個任務執行時間不能超過設定的週期。
pixhawk飛控架構
pixhawk 學習總結2 pixhawk編譯環境搭建好,接下來就是要看 apm原始碼了。介紹給大家一款非常好用的 程式編輯器軟體source insight 在windows 下看原始碼是最好不過了。飛控系統是一套龐大的系統,要理解一整套的流程的話,是要經過一番折騰才行。我的角度是用linux 的...
四軸飛控軟體開發計畫
學習stm32f3discovery有一段時間了,感覺可以嘗試一下飛控的開發,制定以下簡要計畫開展,即便不成功也能學到不少東西 1 usart驅動開發,使用者和上位機通訊等 2 pwm輸入開發,用於接收遙控訊號 3 感測器資料讀入和姿態結算 4 pid和平衡控制演算法 程序 2014年2月13日,除...
開源飛控 匿名飛控TI版解析(2)
因為電賽,買來匿名飛控研究一下,感覺相比其他的一下開源飛控,易開發性和穩定性都是比較好的,但就是比較貴 匿名ti版飛控是從32版改過來的,硬體上就換了個晶元,程式裡也有些東西都沒刪乾淨。整體上來說開源程度很高了,自己想改啥就改啥,不過就是光流內部是不開源的。這裡整理裡一下飛控框架,也是學習一下乙個飛...