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