文獻標識碼: A
文章編號: 0258-7998(2015)03-0041-03
0 引言
相對于大型無人駕駛飛機(Unmanned Aerial Vehicle,UAV),多旋翼飛行器擁有體積小、成本低、行動敏捷、可懸停等優(yōu)勢,成為許多國家或機構(gòu)的研究熱點,是UAV發(fā)展的主要方向之一。歸功于UAV技術(shù)近幾年的迅速發(fā)展,多旋翼飛行器也從一開始的軍事用途逐漸向商用和民用方向延伸,如今已經(jīng)廣泛用于高空拍攝、軍事偵察、交通監(jiān)測、植物保護、地形勘測等領(lǐng)域[1]。隨著應(yīng)用領(lǐng)域的擴展和深入,工程中對多旋翼飛行器的要求也越來越高,多任務(wù)處理能力和安全性能成為突出的問題。擁有一個簡潔高效、安全穩(wěn)定的開發(fā)平臺顯得至關(guān)重要。針對上述情況,本文提出一種基于NuttX實時操作系統(tǒng)的多旋翼控制系統(tǒng)設(shè)計,并對硬件布局和軟件結(jié)構(gòu)進行詳細的論述。
1 控制系統(tǒng)總體設(shè)計
1.1 需求分析
為了達到安全、穩(wěn)定、高效的目的,以下針對多旋翼飛行器的特點,對控制系統(tǒng)提出需求:
(1)系統(tǒng)在發(fā)生故障導(dǎo)致主處理器復(fù)位時,飛行器應(yīng)保持在空中飛行等待系統(tǒng)復(fù)位,避免墜機造成人身安全和財產(chǎn)損失。
(2)處理器有較高的運算性能,以滿足多任務(wù)和后續(xù)算法開發(fā)的需求。
(3)能高速且精確采集各個傳感器的數(shù)據(jù),并提供模擬信號采集接口,以便擴展模擬量傳感器。
(4)具備與遙控接收機和地面站通信的能力,能識別聯(lián)系中斷的情況,并采取相應(yīng)安全措施。
(5)擁有8路與主處理器硬件上獨立的PWM輸出,用于兼容旋翼數(shù)量不等的飛行器系統(tǒng)。
(6)可記錄飛行中的所有姿態(tài)、位置數(shù)據(jù)和遙控操作數(shù)據(jù),存于SD卡中,方便對系統(tǒng)進行調(diào)試。
(7)為方便開發(fā),系統(tǒng)可通過更改SD卡中文件達到配置系統(tǒng)的目的。
(8)采用模塊化軟件結(jié)構(gòu),功能可簡單地通過配置文件進行修改,避免頻繁的更新程序。程序可通過USB接口用Bootloader更新[2]。
(9)預(yù)留外置UART、CAN、SPI、I2C等通信接口,給GPS、數(shù)傳等其他擴展模塊提供數(shù)據(jù)通道,方便后續(xù)應(yīng)用開發(fā)。
1.2 總體設(shè)計
多旋翼旋翼飛行器的輸出控制有6個自由度,分別為沿x、y、z坐標軸做旋轉(zhuǎn)和平移動作,其控制都是通過調(diào)整跟旋翼相連的電機轉(zhuǎn)速實現(xiàn)[3],故在實際飛行中,為了達到穩(wěn)定的飛行,電機轉(zhuǎn)速始終是在變化當中。由于電流的變化將引起強烈的電磁干擾,對模擬量傳感器數(shù)據(jù)的采集非常不利。為了提高傳感器數(shù)據(jù)采集的精度,同時兼顧采集速度,本文采用全數(shù)字量SPI接口傳感器。另一方面,為了達到失效保護作用,同時減輕主處理器的負荷,系統(tǒng)額外采用一個協(xié)處理器。
控制系統(tǒng)對實時性要求較高,同時進行的處理內(nèi)容也比較復(fù)雜,包括各個傳感器數(shù)據(jù)的采集、姿態(tài)估計、姿態(tài)控制、遙控或地面站的命令分析、電機控制、日志記錄等。對于這種任務(wù)比較多的程序結(jié)構(gòu),如果采用普通的前后臺系統(tǒng)結(jié)構(gòu),勢必造成開發(fā)難度大、程序?qū)崟r性弱、系統(tǒng)可維護性差等結(jié)果。因此,本文率先引入功能強大的NuttX實時操作系統(tǒng)。NuttX注重標準兼容和小型封裝,主要遵循ANSI和Posix標準,采用模塊化設(shè)計,完全可搶占式內(nèi)核,并且支持類Unix的Script控制和類Bash的NuttShell控制臺,能為多旋翼飛行器控制系統(tǒng)的開發(fā)提供極大的方便。
2 控制系統(tǒng)硬件設(shè)計
2.1 硬件選型
(1)處理器:由于主處理器要負責采集各個傳感器的數(shù)據(jù)進行搬運,并進行姿態(tài)估算和控制,所以至少需具備DMA功能和硬件浮點運算,才能保證控制系統(tǒng)的實時性和預(yù)留充足的資源給后續(xù)開發(fā)。經(jīng)過篩選,本文采用ST公司的32位Cortex-M4內(nèi)核處理器STM32F429VIT6,其最高主頻能達到168 MHz,硬件接口豐富,并且支持FPU,處理能力能滿足控制系統(tǒng)需求。相對主處理器,協(xié)處理器需要處理的內(nèi)容比較簡單,為了方便開發(fā),選用和主處理器同一系列、功能稍弱一些的STM32F103C8T6芯片。
(2)傳感器:主處理器上,角速度計采用ST公司的16位精度傳感器L3GD20,三軸加速度計和三軸電子羅盤采用LGA-16超小封裝的LSM303D,氣壓計采用由瑞士MEAS公司推出的MS5611,該模塊包含一個高線性度壓力傳感器和一個超低功耗的24位Σ型AD轉(zhuǎn)換器,分辨率可達到10 cm。為了在主處理器發(fā)生故障時保持最基本的自穩(wěn)模式,協(xié)處理器上采用陀螺儀和加速度計一體的MPU6000傳感器。上述所有傳感器都具備高速SPI數(shù)字輸出的特性,與主處理器連接的傳感器可串接在同一SPI總線上,降低了PCB設(shè)計難度。
(3)無線模塊:無線模塊包括遙控接收模塊和與地面站通信數(shù)傳模塊。為了方便布線、節(jié)省IO口資源,遙控接收模塊采用脈沖位置調(diào)制(Pulse Position Modulation,PPM)形式輸出,只需一根信號線即可傳輸8通道PWM。無線數(shù)傳采用433 MHz超遠距離無線通信模塊,通信距離可達2 km,保證了高空飛行時數(shù)據(jù)連接的穩(wěn)定。
2.2 硬件設(shè)計
圖1為系統(tǒng)的硬件結(jié)構(gòu)。由于系統(tǒng)中含有兩個處理器,為了方便更新程序,將協(xié)處理器的UART1連接至主處理器串口,這樣可以通過主處理器更新程序,減少開發(fā)過程中的冗余步驟。連接兩個處理器之間的串口在系統(tǒng)正常運行時,還可以用于數(shù)據(jù)交換。使用高速串口交換數(shù)據(jù)相對于使用SPI交換數(shù)據(jù),其優(yōu)點是不用像SPI那樣時刻去查詢從設(shè)備是否有數(shù)據(jù)要發(fā)送,而是只要有數(shù)據(jù)即可立即發(fā)送,無需額外耗費資源輪詢等待,提高了系統(tǒng)效率。
為了防止電機在運行時產(chǎn)生強電流燒毀處理器,在PWM輸出與電調(diào)輸入之間采用TI公司的TXS0108電平電壓轉(zhuǎn)換芯片,達到信號隔離和增強驅(qū)動的作用,電路如圖2所示。
3 控制系統(tǒng)軟件設(shè)計
3.1 主處理器軟件設(shè)計
主處理器運行NuttX實時操作系統(tǒng),所有功能都通過任務(wù)進程實現(xiàn)[4]。主要的進程有傳感器數(shù)據(jù)采集、姿態(tài)估算、姿態(tài)控制、飛行器狀態(tài)識別與切換、協(xié)處理器控制、日志記錄。進程間進行通信是程序結(jié)構(gòu)的重要部分。為了建立一個快速簡潔的進程間通信機制,本文引入一種微型對象請求代理(micro Object Request Broker,uORB)機制[5],通過推送和訂閱主題的方式進行通信,進程不用關(guān)注信息交換的對象,并且同時可以推送和訂閱多個主題,只需簡單的代碼即可實現(xiàn)進程間數(shù)據(jù)的共享,提高了開發(fā)效率。
如圖3所示,傳感器數(shù)據(jù)采集進程采集的所有傳感器數(shù)據(jù),姿態(tài)估計進程利用傳感器數(shù)據(jù)估算出飛行器當前姿態(tài)[6],協(xié)處理器通信進程獲取遙控數(shù)據(jù),狀態(tài)識別進程結(jié)合傳感器數(shù)據(jù)、飛行器姿態(tài)和遙控數(shù)據(jù)識別出飛行器當前模式,最后姿態(tài)控制進程通過飛行器姿態(tài)、遙控數(shù)據(jù)、飛行器模式計算出當前所需的PID控制量[7]并推送至uORB,協(xié)處理器通信進程再將訂閱的PID控制量通過高速串口發(fā)送至協(xié)處理器。
3.2 協(xié)處理器軟件設(shè)計
如圖4所示,為了保證系統(tǒng)的實時性,協(xié)處理器的PPM脈沖輸入部分采用中斷方式進行捕獲,與主處理器通信部分采用DMA方式直接填充至PWM匹配輸出寄存器,最大程度地減小CPU的干預(yù)。失聯(lián)識別在定時器20 ms中斷中實現(xiàn),每次進中斷會讀取DMA傳輸計數(shù)器的值并記錄,再與上次的記錄值進行比較,如果兩個值不相等,則說明數(shù)據(jù)連接正常;相反,如果連接斷開,兩個值將會相等,據(jù)此實時地判斷出連接的通斷狀態(tài)。主循環(huán)中只需要判斷通斷標志位,如果檢測到連接斷開,協(xié)處理器則會啟用失效保護功能:通過SPI總線讀取MPU6000芯片的加速度和角速度數(shù)據(jù),利用四元數(shù)姿態(tài)融合算法[8]得到姿態(tài)信息,轉(zhuǎn)換成歐拉角之后,再用PID控制器保持飛行器的水平姿態(tài),直到與主處理器的連接恢復(fù)正常,再將電機控制權(quán)交還給主處理器。用歐拉角表示剛體姿態(tài)方便幾何推導(dǎo),但是存在萬向節(jié)死鎖,即當剛體的3個萬向節(jié)中兩個的軸發(fā)生重合時,會出現(xiàn)失去一個自由度的情況。四元數(shù)法則不存在這個問題,并且運算步驟也相對簡單,適合在本文控制系統(tǒng)的協(xié)處理器中運用。
4 實驗結(jié)果及分析
如圖5所示,利用四旋翼飛行器作為實驗平臺,在室外進行飛行試驗后,得到橫滾、俯仰和偏航角的響應(yīng)曲線。將日志導(dǎo)出到MATALB并繪制曲線,從圖6可以看出飛行器的實測值能夠快速、精確地追蹤設(shè)定值。在人為軟件復(fù)位主處理器后,飛行器能在空中保持機身大致水平,直至主處理器恢復(fù)工作,保證了系統(tǒng)的安全性。此外,在NuttShell中輸入”top”指令,可得到主處理器的資源占用情況。如圖7所示,主處理器的cpu空閑資源達到了51.73%。
實驗結(jié)果表現(xiàn)出系統(tǒng)良好的控制性能,能夠穩(wěn)定地控制飛行器進行基本飛行,在主處理器發(fā)生故障時能夠降低墜機的風險,減少了因開發(fā)過程中程序不穩(wěn)定帶來的損失和危險,縮短了開發(fā)周期,增強了安全性能,并且能滿足各種運算及后續(xù)開發(fā)的需求,為多旋翼飛行器控制系統(tǒng)更深入的開發(fā)奠定了基礎(chǔ)。
參考文獻
[1] 岳基隆,張慶杰,朱華勇.微小型四旋翼無人機研究進展及關(guān)鍵技術(shù)淺析[J].電光與控制,2010,17(10):46-52.
[2] 王黨利,寧生科,馬保吉.基于STM32F10X引導(dǎo)程序?qū)崿F(xiàn)USB在應(yīng)用中編程[J].國外電子測量技術(shù),2010,29(11):68-70.
[3] 劉曉杰,趙曉暉,顧海軍,等.微小型四旋翼無人機實時嵌入式控制系統(tǒng)設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2009,35(5):35-38.
[4] Gregory Nutt.NuttX operating system user′s manual[EB/OL].(2014-10-4)[2014-11-09].http://www.nuttx.org/ doku.phpid=documentation.
[5] 高嘉陽.嵌入式CORBA的精簡ORB實現(xiàn)[J].計算機工程,2004,30(4):73-75.
[6] 薛亮,苑偉政,常洪龍,等.用于微小型飛行器姿態(tài)估計的四元數(shù)擴展卡爾曼濾波算法[J].納米技術(shù)與精密工程,2009,7(2):163-167.
[7] 馮慶端,裴海龍.串級PID控制在無人機姿態(tài)控制的應(yīng)用[J].微計算機信息,2009,22:9-10.
[8] 張榮輝,賈宏光,陳濤,等.基于四元數(shù)法的捷聯(lián)式慣性導(dǎo)航系統(tǒng)的姿態(tài)解算[J].光學精密工程,2008,16(10):1963-1970.