楊浩,楊斌
(西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,成都610031)
楊浩(碩士研究生),主要研究方向為嵌入式開發(fā)與應(yīng)用;楊斌(教授),主要研究方向為嵌入式系統(tǒng)應(yīng)用開發(fā)、實時與分布式系統(tǒng)。
引 言
目前,市場上大部分四軸飛行器都是基于單片機制作的控制系統(tǒng)。單片機體積小、功耗低,但是由于其性能有限[1],且不能很好地支持TCP/IP協(xié)議,導(dǎo)致基于單片機制作的四軸飛行器功能有限。如果想要四軸飛行器實現(xiàn)更多的功能,則需要使用操作系統(tǒng)來制作四軸飛行器控制系統(tǒng)。在Linux操作系統(tǒng)中,普通進(jìn)程不能做到快速的實時響應(yīng),因此如果使用Linux操作系統(tǒng)來制作四軸飛行器控制系統(tǒng),就需要對進(jìn)程的優(yōu)先級和時間片進(jìn)行修改,使其能夠保證快速響應(yīng)[2]。
Linux本身并不是一個強實時操作系統(tǒng),但是其調(diào)度策略中提供了對實時進(jìn)程的支持[3]??傮w而言,Linux實時調(diào)度算法能夠滿足嚴(yán)格的時間要求,實時進(jìn)程和普通進(jìn)程的具體對比略——編者注。
因為開發(fā)板要安裝到四軸飛行器中,因此有以下考慮因素[4]:
①體積小、功耗低,同時,價格不能太高。
②開發(fā)板需要采集傳感器數(shù)據(jù),并且在調(diào)試的過程中和上位機進(jìn)行通信,需要開發(fā)板至少有兩個串口。
③四軸飛行器需要4 路PWM 信號供給電子調(diào)速器,因此至少能支持4路PWM 輸出。
④開發(fā)板上面需要外接USB攝像頭和無線網(wǎng)卡,進(jìn)行視頻采集和網(wǎng)絡(luò)通信,因此至少需要1個USB接口。
基于以上因素,選擇了搭載AM3358處理器的BeagleBone Black開發(fā)板。
四軸飛行器在飛行的過程中,會有很多任務(wù)需要執(zhí)行,其中包括控制任務(wù)、讀取傳感器數(shù)據(jù)任務(wù)、姿態(tài)自動調(diào)節(jié)任務(wù)、發(fā)送當(dāng)前飛機情況任務(wù)、接收控制信號任務(wù)、響應(yīng)控制信號任務(wù)、視頻采集任務(wù)、視頻傳輸任務(wù)。下面逐步介紹各個任務(wù)。
①控制任務(wù):是指在接收到電腦客戶端發(fā)送的指令后對四軸飛行器進(jìn)行控制的任務(wù),這些指令包括起飛、降落、向左邊飛、向右邊飛、前進(jìn)、后退。四軸飛行器控制系統(tǒng)要及時響應(yīng)這些指令并根據(jù)指令改變4 個旋翼的PWM 值。如果客戶端沒有發(fā)送指令,則按照上一次的指令執(zhí)行飛行任務(wù)。
②讀取傳感器數(shù)據(jù)任務(wù):四軸飛行器在飛行過程中需要不斷地讀取姿態(tài)傳感器數(shù)據(jù)來獲取當(dāng)前飛行器的飛行姿態(tài),并對獲取的傳感器數(shù)據(jù)進(jìn)行處理。
③姿態(tài)自動調(diào)節(jié)任務(wù):在得到數(shù)據(jù)后和初始值數(shù)據(jù)進(jìn)行比較,如果發(fā)現(xiàn)四軸飛行器機身傾斜,則要根據(jù)目前檢測的數(shù)據(jù)控制4個旋翼的轉(zhuǎn)速,對四軸飛行器進(jìn)行自動調(diào)節(jié),使得其回到平穩(wěn)狀態(tài)。
④發(fā)送當(dāng)前飛機情況任務(wù):為了使電腦客戶端能更好地知道當(dāng)前飛機的情況,四軸飛行器控制系統(tǒng)需要不斷地將當(dāng)前傳感器發(fā)出的3個角度數(shù)值和4個旋翼的PWM值發(fā)送到客戶端的電腦上,使得控制系統(tǒng)對飛行器的當(dāng)前狀態(tài)更加清楚。
⑤接收控制信號任務(wù):四軸飛行器控制系統(tǒng)需要接收電腦客戶端發(fā)送過來的指令,這些指令包括起飛、降落、向左邊飛、向右邊飛、前進(jìn)、后退。
⑥視頻采集任務(wù):四軸飛行器控制系統(tǒng)需要不斷地采集視頻數(shù)據(jù),然后將這些數(shù)據(jù)存入到一個緩存中。
⑦視頻傳輸任務(wù):將緩存中的數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送出去,然后等下一次數(shù)據(jù)采集完成后繼續(xù)發(fā)送。
在四軸飛行器控制系統(tǒng)中,一共有7個任務(wù)在運行。控制任務(wù)是在接收控制信號任務(wù)完成后迅速地根據(jù)控制信號來調(diào)整飛行姿態(tài),如果這兩個任務(wù)反應(yīng)較慢有可能會導(dǎo)致四軸飛行器遇上危險,因此控制任務(wù)和接收控制信號任務(wù)需要較快的反應(yīng)。讀取傳感器數(shù)據(jù)任務(wù)是為了進(jìn)行姿態(tài)自動調(diào)節(jié)任務(wù),使得四軸飛行器在空中保持平穩(wěn),這兩個任務(wù)也非常重要,同樣需要較快的反應(yīng)。此外,地面的控制者要明確目前四軸飛行器所處的狀態(tài),僅僅憑借眼睛去觀察是遠(yuǎn)遠(yuǎn)不夠的,因此發(fā)送當(dāng)前飛機情況任務(wù)對于地面的控制者來說很重要。相較于前5個任務(wù),視頻采集任務(wù)和視頻傳輸任務(wù)對于實時性的要求不是太高,只要控制者能看到四軸飛行器目前所返回的視頻即可,因此視頻采集任務(wù)和視頻傳輸任務(wù)沒有前5個任務(wù)的優(yōu)先級別高。
BeagleBone Black 上 面 包 含 了 一 個Cortex-A8 處 理器,其性能較高,但是只有一個內(nèi)核,因此相比多核處理器,BeagleBone Black運行多線程任務(wù)并沒有優(yōu)勢。此外,控制任務(wù)、讀取傳感器數(shù)據(jù)任務(wù)、姿態(tài)自動調(diào)節(jié)任務(wù)、發(fā)送當(dāng)前飛機情況任務(wù)和接收控制信號任務(wù)對實時性要求都很高,而且這5個任務(wù)之間相互關(guān)聯(lián),因此將這5個任務(wù)放到一個進(jìn)程中,通過設(shè)置一些變量來對任務(wù)發(fā)生的順序進(jìn)行控制,這個進(jìn)程稱為四軸飛行器控制進(jìn)程。而視頻采集任務(wù)和視頻傳輸任務(wù)跟前5個任務(wù)沒有關(guān)系,因此將這兩個任務(wù)合并為一個進(jìn)程,該進(jìn)程稱為四軸飛行器視頻傳輸進(jìn)程。
在將兩個進(jìn)程設(shè)置為實時進(jìn)程后,為了進(jìn)一步提高實時性,需要修改這兩個進(jìn)程的時間片。進(jìn)程的時間片如果太低,進(jìn)程之間互相切換會造成切換時間的浪費,而進(jìn)程的時間片如果太高,實時性能會有所下降,因此選擇合適的時間片至關(guān)重要。根據(jù)經(jīng)驗,每個進(jìn)程的時間片為5ms時,效果是比較好的。兩個進(jìn)程的優(yōu)先級和時間片如表1所列。
表1 四軸飛行器進(jìn)程的優(yōu)先級和時間片
BeagleBone Black開發(fā)板的性能比單片機好很多,在運行實時進(jìn)程后,其性能和效果都要優(yōu)于單片機制作的飛行控制系統(tǒng)。
在程序中改變進(jìn)程的優(yōu)先級是通過改變結(jié)構(gòu)體sched_param 中間的成員變量sched_priority來實現(xiàn)。而改變時間片是通過在程序中修改進(jìn)程的nice值來改變,當(dāng)nice值為+19時,該進(jìn)程對應(yīng)的時間片為5ms。修改進(jìn)程優(yōu)先級是通過函數(shù)sched_setscheduler()來完成的,在參數(shù)中可以選擇輪流調(diào)度。
首先單獨運行四軸飛行器控制進(jìn)程,該進(jìn)程的名稱為“bbbnew”,四軸飛行器控制進(jìn)程單獨運行時系統(tǒng)資源分配圖如圖1所示。
由圖1可知,四軸飛行器控制進(jìn)程“bbbnew”的優(yōu)先級為-99,nice值為19,此時對應(yīng)的時間片為5ms。該進(jìn)程單獨運行時的CPU 占有率為74.2%,該占有率在70%~85%之間徘徊。然后單獨運行四軸飛行器視頻傳輸進(jìn)程,該進(jìn)程的名稱為“camera”,視頻傳輸進(jìn)程單獨運行時系統(tǒng)資源分配圖如圖2所示。
由圖2可知,四軸飛行器視頻傳輸進(jìn)程“camera”的優(yōu)先級為-98,nice值為19,此時對應(yīng)的時間片為5ms。該進(jìn)程單獨運行時的CPU 占有率為10.6%,該占有率在9%~12.5%之間徘徊。四軸飛行器在飛行過程中兩個進(jìn)程都要運行,系統(tǒng)根據(jù)優(yōu)先級和時間片來對進(jìn)程進(jìn)行調(diào)度。
圖1 四軸飛行器控制進(jìn)程單獨運行時系統(tǒng)資源分配圖
圖2 視頻傳輸進(jìn)程單獨運行時系統(tǒng)資源分配圖
當(dāng)四軸飛行器在平穩(wěn)狀態(tài)時,控制進(jìn)程和視頻傳輸進(jìn)程同時運行,如圖3所示。
圖3 四軸飛行器平穩(wěn)運行時
從圖3中可以看出,四軸飛行器4個旋翼的轉(zhuǎn)速基本一致,此時橫滾角、俯仰角和偏航角與初始值的差別很小,表明四軸飛行器處在平穩(wěn)運行狀態(tài)。此時在攝像頭面前晃動手指,在客戶端電腦上能很快看到手指的晃動,反應(yīng)速度很快,能滿足系統(tǒng)對實時性的要求。
從圖4中可以看出,在四軸飛行器平穩(wěn)運行時,控制進(jìn)程“bbbnew”的CPU 占用率是72.8%,視頻傳輸進(jìn)程“camera”的CPU 占用率是11.0%,兩個進(jìn)程并沒有完全占滿CPU 資源。此外,兩者同時運行一段時間后,兩個進(jìn)程的運行時間總和是不一樣的。Linux操作系統(tǒng)top指令中TIME+的含義是進(jìn)程使用的CPU 時間總計,單位為1/100s??刂七M(jìn)程“bbbnew”的TIME+數(shù)值為2∶01.45,四軸飛行器視頻進(jìn)程“camera”的數(shù)值為1∶37.66,這是因為兩個進(jìn)程的時間片雖然相同,但是由于控制進(jìn)程的優(yōu)先級要大于視頻傳輸進(jìn)程的優(yōu)先級,所以控制進(jìn)程的運行時間總和大于視頻傳輸進(jìn)程的運行時間總和,這與設(shè)計目標(biāo)一致。
圖4 平穩(wěn)運行時系統(tǒng)資源分配圖
(1)四軸飛行器向左傾斜時
四軸飛行器在向左傾斜時,歐拉角與初始值的差值和四軸飛行器4個旋翼的轉(zhuǎn)速如圖5所示。
可以看出,此時橫滾角與初始值的差值超過了臨界值并且為負(fù)值,表明此時四軸飛行器正在向左傾斜,控制系統(tǒng)需要根據(jù)PID算法來調(diào)節(jié)4個旋翼的轉(zhuǎn)速,使四軸飛行器重新回到平衡狀態(tài)。系統(tǒng)自動進(jìn)行調(diào)節(jié)的同時,在攝像頭上面快速晃動手指,在客戶端電腦上可以實時看到晃動手指的視頻。這表明兩個進(jìn)程在同時運行時,實時性都可以得到保證。此時的系統(tǒng)資源分配圖如圖6所示。
可以看出,在四軸飛行器向左傾斜時,控制進(jìn)程“bbbnew”的CPU 占用率是83.1%,視頻傳輸進(jìn)程“camera”的CPU 占用率是12.0%。兩個進(jìn)程并沒有完全占滿CPU 資源。同樣,控制進(jìn)程的運行時間總和大于視頻傳輸進(jìn)程的運行時間總和。
(2)四軸飛行器向右傾斜時
四軸飛行器在向右傾斜時,歐拉角與初始值的差值和四軸飛行器4個旋翼的轉(zhuǎn)速略——編者注。
可以看出,此時橫滾角與初始值的差值超過了臨界值并且為正值,表明此時四軸飛行器正在向右傾斜,控制系統(tǒng)需要根據(jù)PID算法來調(diào)節(jié)4個旋翼的轉(zhuǎn)速,使四軸飛行器重新回到平衡狀態(tài)。系統(tǒng)自動進(jìn)行調(diào)節(jié)的同時,在攝像頭上面快速晃動手指,在客戶端電腦上可以實時看到晃動手指的視頻。這表明兩個進(jìn)程在同時運行時,實時性都可以得到保證。此時的系統(tǒng)資源分配圖略——編者注。
圖5 四軸飛行器向左傾斜時
圖6 四軸飛行器向左傾斜時系統(tǒng)資源分配圖
可以看出,在四軸飛行器向右傾斜時,控制進(jìn)程“bbbnew”的CPU 占用率是70.9%,視頻進(jìn)程“camera”的CPU 占用率是9.0%。兩個進(jìn)程并沒有完全占滿CPU 資源。同樣,控制進(jìn)程的運行時間總和大于視頻傳輸進(jìn)程的運行時間總和。
經(jīng)過測試,四軸飛行器其他傾斜情況也能滿足實時響應(yīng)要求。
第3.1節(jié)和3.2節(jié)分別介紹了四軸飛行器在平穩(wěn)狀態(tài)下和傾斜狀態(tài)下,兩個進(jìn)程的實時響應(yīng)情況。在這里作進(jìn)一步測試。
在四軸飛行器的控制進(jìn)程中,設(shè)置當(dāng)四軸飛行器控制系統(tǒng)檢測到俯仰角或者橫滾角和初始值的差值大于25°時或者小于-25°時,四軸飛行器4個旋翼會立即停止轉(zhuǎn)動。那么用手指在攝像頭面前晃動的同時,人為以很快的速度傾斜機身到25°。如圖7所示。
可以看到,在攝像頭面前晃動手指,可以從電腦客戶端上看到實時晃動手指的視頻,此時人為快速傾斜機身,這時橫滾角與初始值的角度差值已經(jīng)小于-25°,4個旋翼立即停止了轉(zhuǎn)動。這表明在極端條件下,控制進(jìn)程和視頻傳輸進(jìn)程都能夠做到實時響應(yīng),達(dá)到了預(yù)期的設(shè)計目標(biāo)。
通過以上的測試,證明了將四軸飛行器控制進(jìn)程和視頻傳輸進(jìn)程都設(shè)置為實時進(jìn)程,將控制進(jìn)程優(yōu)先級設(shè)置為-99,視頻傳輸進(jìn)程設(shè)置為-98,并且將兩個進(jìn)程的時間片都設(shè)置為5 ms后,無論四軸飛行器處在何種條件下,這兩個進(jìn)程都可以做到快速的實時響應(yīng),從而達(dá)到了設(shè)計目標(biāo)。
結(jié) 語
本文利用Linux操作系統(tǒng)支持的實時進(jìn)程策略對四軸飛行器的控制進(jìn)程和視頻傳輸進(jìn)程進(jìn)行了優(yōu)先級和時間片的修改,使得這兩個進(jìn)程都可以達(dá)到實時響應(yīng)。
編者注:本文為期刊縮略版,全文見本刊網(wǎng)站www.mesnet.com.cn。
圖7 視頻實時傳輸同時四軸飛行器自動檢測并停止旋轉(zhuǎn)
[1]胡劍華.基于ARM-Linux實時嵌入式飛行控制系統(tǒng)設(shè)計與實現(xiàn)[D].南京:南京航空航天大學(xué),2010.
[2]張桂蘭,王飛超.Linux內(nèi)核完全公平調(diào)度器的分析及模擬[J].中國科技信息,2009(4).
[3]鄒勇,王青,李明樹.Linux 內(nèi)核的實時支持的研究與實現(xiàn)[J].計算機研究與發(fā)展,2002(4).
[4]龐慶霈.四旋翼飛行器設(shè)計與穩(wěn)定控制研究[D].合肥:中國科學(xué)技術(shù)大學(xué),2011.
[5]TI.德州儀器的BeagleBone Black介紹[EB/OL].[2015-05].http://news.cecb2b.com/info/20130718/888742.shtml.