楊浩,楊斌
(西南交通大學 信息科學與技術學院,成都610031)
楊浩(碩士研究生),主要研究方向為嵌入式開發與應用;楊斌(教授),主要研究方向為嵌入式系統應用開發、實時與分布式系統。
引 言
目前,市場上大部分四軸飛行器都是基于單片機制作的控制系統。單片機體積小、功耗低,但是由于其性能有限[1],且不能很好地支持TCP/IP協議,導致基于單片機制作的四軸飛行器功能有限。如果想要四軸飛行器實現更多的功能,則需要使用操作系統來制作四軸飛行器控制系統。在Linux操作系統中,普通進程不能做到快速的實時響應,因此如果使用Linux操作系統來制作四軸飛行器控制系統,就需要對進程的優先級和時間片進行修改,使其能夠保證快速響應[2]。
Linux本身并不是一個強實時操作系統,但是其調度策略中提供了對實時進程的支持[3]。總體而言,Linux實時調度算法能夠滿足嚴格的時間要求,實時進程和普通進程的具體對比略——編者注。
因為開發板要安裝到四軸飛行器中,因此有以下考慮因素[4]:
①體積小、功耗低,同時,價格不能太高。
②開發板需要采集傳感器數據,并且在調試的過程中和上位機進行通信,需要開發板至少有兩個串口。
③四軸飛行器需要4 路PWM 信號供給電子調速器,因此至少能支持4路PWM 輸出。
④開發板上面需要外接USB攝像頭和無線網卡,進行視頻采集和網絡通信,因此至少需要1個USB接口。
基于以上因素,選擇了搭載AM3358處理器的BeagleBone Black開發板。
四軸飛行器在飛行的過程中,會有很多任務需要執行,其中包括控制任務、讀取傳感器數據任務、姿態自動調節任務、發送當前飛機情況任務、接收控制信號任務、響應控制信號任務、視頻采集任務、視頻傳輸任務。下面逐步介紹各個任務。
①控制任務:是指在接收到電腦客戶端發送的指令后對四軸飛行器進行控制的任務,這些指令包括起飛、降落、向左邊飛、向右邊飛、前進、后退。四軸飛行器控制系統要及時響應這些指令并根據指令改變4 個旋翼的PWM 值。如果客戶端沒有發送指令,則按照上一次的指令執行飛行任務。
②讀取傳感器數據任務:四軸飛行器在飛行過程中需要不斷地讀取姿態傳感器數據來獲取當前飛行器的飛行姿態,并對獲取的傳感器數據進行處理。
③姿態自動調節任務:在得到數據后和初始值數據進行比較,如果發現四軸飛行器機身傾斜,則要根據目前檢測的數據控制4個旋翼的轉速,對四軸飛行器進行自動調節,使得其回到平穩狀態。
④發送當前飛機情況任務:為了使電腦客戶端能更好地知道當前飛機的情況,四軸飛行器控制系統需要不斷地將當前傳感器發出的3個角度數值和4個旋翼的PWM值發送到客戶端的電腦上,使得控制系統對飛行器的當前狀態更加清楚。
⑤接收控制信號任務:四軸飛行器控制系統需要接收電腦客戶端發送過來的指令,這些指令包括起飛、降落、向左邊飛、向右邊飛、前進、后退。
⑥視頻采集任務:四軸飛行器控制系統需要不斷地采集視頻數據,然后將這些數據存入到一個緩存中。
⑦視頻傳輸任務:將緩存中的數據通過網絡發送出去,然后等下一次數據采集完成后繼續發送。
在四軸飛行器控制系統中,一共有7個任務在運行。控制任務是在接收控制信號任務完成后迅速地根據控制信號來調整飛行姿態,如果這兩個任務反應較慢有可能會導致四軸飛行器遇上危險,因此控制任務和接收控制信號任務需要較快的反應。讀取傳感器數據任務是為了進行姿態自動調節任務,使得四軸飛行器在空中保持平穩,這兩個任務也非常重要,同樣需要較快的反應。此外,地面的控制者要明確目前四軸飛行器所處的狀態,僅僅憑借眼睛去觀察是遠遠不夠的,因此發送當前飛機情況任務對于地面的控制者來說很重要。相較于前5個任務,視頻采集任務和視頻傳輸任務對于實時性的要求不是太高,只要控制者能看到四軸飛行器目前所返回的視頻即可,因此視頻采集任務和視頻傳輸任務沒有前5個任務的優先級別高。
BeagleBone Black 上 面 包 含 了 一 個Cortex-A8 處 理器,其性能較高,但是只有一個內核,因此相比多核處理器,BeagleBone Black運行多線程任務并沒有優勢。此外,控制任務、讀取傳感器數據任務、姿態自動調節任務、發送當前飛機情況任務和接收控制信號任務對實時性要求都很高,而且這5個任務之間相互關聯,因此將這5個任務放到一個進程中,通過設置一些變量來對任務發生的順序進行控制,這個進程稱為四軸飛行器控制進程。而視頻采集任務和視頻傳輸任務跟前5個任務沒有關系,因此將這兩個任務合并為一個進程,該進程稱為四軸飛行器視頻傳輸進程。
在將兩個進程設置為實時進程后,為了進一步提高實時性,需要修改這兩個進程的時間片。進程的時間片如果太低,進程之間互相切換會造成切換時間的浪費,而進程的時間片如果太高,實時性能會有所下降,因此選擇合適的時間片至關重要。根據經驗,每個進程的時間片為5ms時,效果是比較好的。兩個進程的優先級和時間片如表1所列。

表1 四軸飛行器進程的優先級和時間片
BeagleBone Black開發板的性能比單片機好很多,在運行實時進程后,其性能和效果都要優于單片機制作的飛行控制系統。
在程序中改變進程的優先級是通過改變結構體sched_param 中間的成員變量sched_priority來實現。而改變時間片是通過在程序中修改進程的nice值來改變,當nice值為+19時,該進程對應的時間片為5ms。修改進程優先級是通過函數sched_setscheduler()來完成的,在參數中可以選擇輪流調度。
首先單獨運行四軸飛行器控制進程,該進程的名稱為“bbbnew”,四軸飛行器控制進程單獨運行時系統資源分配圖如圖1所示。
由圖1可知,四軸飛行器控制進程“bbbnew”的優先級為-99,nice值為19,此時對應的時間片為5ms。該進程單獨運行時的CPU 占有率為74.2%,該占有率在70%~85%之間徘徊。然后單獨運行四軸飛行器視頻傳輸進程,該進程的名稱為“camera”,視頻傳輸進程單獨運行時系統資源分配圖如圖2所示。
由圖2可知,四軸飛行器視頻傳輸進程“camera”的優先級為-98,nice值為19,此時對應的時間片為5ms。該進程單獨運行時的CPU 占有率為10.6%,該占有率在9%~12.5%之間徘徊。四軸飛行器在飛行過程中兩個進程都要運行,系統根據優先級和時間片來對進程進行調度。

圖1 四軸飛行器控制進程單獨運行時系統資源分配圖

圖2 視頻傳輸進程單獨運行時系統資源分配圖
當四軸飛行器在平穩狀態時,控制進程和視頻傳輸進程同時運行,如圖3所示。

圖3 四軸飛行器平穩運行時
從圖3中可以看出,四軸飛行器4個旋翼的轉速基本一致,此時橫滾角、俯仰角和偏航角與初始值的差別很小,表明四軸飛行器處在平穩運行狀態。此時在攝像頭面前晃動手指,在客戶端電腦上能很快看到手指的晃動,反應速度很快,能滿足系統對實時性的要求。
從圖4中可以看出,在四軸飛行器平穩運行時,控制進程“bbbnew”的CPU 占用率是72.8%,視頻傳輸進程“camera”的CPU 占用率是11.0%,兩個進程并沒有完全占滿CPU 資源。此外,兩者同時運行一段時間后,兩個進程的運行時間總和是不一樣的。Linux操作系統top指令中TIME+的含義是進程使用的CPU 時間總計,單位為1/100s。控制進程“bbbnew”的TIME+數值為2∶01.45,四軸飛行器視頻進程“camera”的數值為1∶37.66,這是因為兩個進程的時間片雖然相同,但是由于控制進程的優先級要大于視頻傳輸進程的優先級,所以控制進程的運行時間總和大于視頻傳輸進程的運行時間總和,這與設計目標一致。

圖4 平穩運行時系統資源分配圖
(1)四軸飛行器向左傾斜時
四軸飛行器在向左傾斜時,歐拉角與初始值的差值和四軸飛行器4個旋翼的轉速如圖5所示。
可以看出,此時橫滾角與初始值的差值超過了臨界值并且為負值,表明此時四軸飛行器正在向左傾斜,控制系統需要根據PID算法來調節4個旋翼的轉速,使四軸飛行器重新回到平衡狀態。系統自動進行調節的同時,在攝像頭上面快速晃動手指,在客戶端電腦上可以實時看到晃動手指的視頻。這表明兩個進程在同時運行時,實時性都可以得到保證。此時的系統資源分配圖如圖6所示。
可以看出,在四軸飛行器向左傾斜時,控制進程“bbbnew”的CPU 占用率是83.1%,視頻傳輸進程“camera”的CPU 占用率是12.0%。兩個進程并沒有完全占滿CPU 資源。同樣,控制進程的運行時間總和大于視頻傳輸進程的運行時間總和。
(2)四軸飛行器向右傾斜時
四軸飛行器在向右傾斜時,歐拉角與初始值的差值和四軸飛行器4個旋翼的轉速略——編者注。
可以看出,此時橫滾角與初始值的差值超過了臨界值并且為正值,表明此時四軸飛行器正在向右傾斜,控制系統需要根據PID算法來調節4個旋翼的轉速,使四軸飛行器重新回到平衡狀態。系統自動進行調節的同時,在攝像頭上面快速晃動手指,在客戶端電腦上可以實時看到晃動手指的視頻。這表明兩個進程在同時運行時,實時性都可以得到保證。此時的系統資源分配圖略——編者注。

圖5 四軸飛行器向左傾斜時

圖6 四軸飛行器向左傾斜時系統資源分配圖
可以看出,在四軸飛行器向右傾斜時,控制進程“bbbnew”的CPU 占用率是70.9%,視頻進程“camera”的CPU 占用率是9.0%。兩個進程并沒有完全占滿CPU 資源。同樣,控制進程的運行時間總和大于視頻傳輸進程的運行時間總和。
經過測試,四軸飛行器其他傾斜情況也能滿足實時響應要求。
第3.1節和3.2節分別介紹了四軸飛行器在平穩狀態下和傾斜狀態下,兩個進程的實時響應情況。在這里作進一步測試。
在四軸飛行器的控制進程中,設置當四軸飛行器控制系統檢測到俯仰角或者橫滾角和初始值的差值大于25°時或者小于-25°時,四軸飛行器4個旋翼會立即停止轉動。那么用手指在攝像頭面前晃動的同時,人為以很快的速度傾斜機身到25°。如圖7所示。
可以看到,在攝像頭面前晃動手指,可以從電腦客戶端上看到實時晃動手指的視頻,此時人為快速傾斜機身,這時橫滾角與初始值的角度差值已經小于-25°,4個旋翼立即停止了轉動。這表明在極端條件下,控制進程和視頻傳輸進程都能夠做到實時響應,達到了預期的設計目標。
通過以上的測試,證明了將四軸飛行器控制進程和視頻傳輸進程都設置為實時進程,將控制進程優先級設置為-99,視頻傳輸進程設置為-98,并且將兩個進程的時間片都設置為5 ms后,無論四軸飛行器處在何種條件下,這兩個進程都可以做到快速的實時響應,從而達到了設計目標。
結 語
本文利用Linux操作系統支持的實時進程策略對四軸飛行器的控制進程和視頻傳輸進程進行了優先級和時間片的修改,使得這兩個進程都可以達到實時響應。
編者注:本文為期刊縮略版,全文見本刊網站www.mesnet.com.cn。

圖7 視頻實時傳輸同時四軸飛行器自動檢測并停止旋轉
[1]胡劍華.基于ARM-Linux實時嵌入式飛行控制系統設計與實現[D].南京:南京航空航天大學,2010.
[2]張桂蘭,王飛超.Linux內核完全公平調度器的分析及模擬[J].中國科技信息,2009(4).
[3]鄒勇,王青,李明樹.Linux 內核的實時支持的研究與實現[J].計算機研究與發展,2002(4).
[4]龐慶霈.四旋翼飛行器設計與穩定控制研究[D].合肥:中國科學技術大學,2011.
[5]TI.德州儀器的BeagleBone Black介紹[EB/OL].[2015-05].http://news.cecb2b.com/info/20130718/888742.shtml.