黃水長,栗 盼,孫勝娟,張永健,張智攀
(1.河北工程大學(xué) 信息與電氣工程學(xué)院,河北 邯鄲056038;2.貴州大學(xué) 電氣工程學(xué)院,貴州 貴陽550025)
基于NuttX的多旋翼飛行器控制系統(tǒng)設(shè)計(jì)*
黃水長1,栗 盼2,孫勝娟1,張永健1,張智攀1
(1.河北工程大學(xué) 信息與電氣工程學(xué)院,河北 邯鄲056038;2.貴州大學(xué) 電氣工程學(xué)院,貴州 貴陽550025)
針對執(zhí)行復(fù)雜任務(wù)的多旋翼飛行器對多任務(wù)和安全性的需求,設(shè)計(jì)一種基于NuttX實(shí)時(shí)操作系統(tǒng)的飛行控制系統(tǒng),并增加失效保護(hù)協(xié)處理器,達(dá)到減少開發(fā)過程中墜機(jī)幾率和提高主處理器任務(wù)容量的目的。實(shí)驗(yàn)表明,此平臺在滿足穩(wěn)定控制飛行的同時(shí),能明顯減小開發(fā)難度,縮短開發(fā)周期,并且給后續(xù)算法開發(fā)保留了充足的運(yùn)行資源。
多旋翼飛行器;NuttX;多任務(wù);失效保護(hù)
相對于大型無人駕駛飛機(jī)(Unmanned Aerial Vehicle,UAV),多旋翼飛行器擁有體積小、成本低、行動敏捷、可懸停等優(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ù)處理能力和安全性能成為突出的問題。擁有一個簡潔高效、安全穩(wěn)定的開發(fā)平臺顯得至關(guān)重要。針對上述情況,本文提出一種基于 NuttX實(shí)時(shí)操作系統(tǒng)的多旋翼控制系統(tǒng)設(shè)計(jì),并對硬件布局和軟件結(jié)構(gòu)進(jìn)行詳細(xì)的論述。
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)能高速且精確采集各個傳感器的數(shù)據(jù),并提供模擬信號采集接口,以便擴(kuò)展模擬量傳感器。
(4)具備與遙控接收機(jī)和地面站通信的能力,能識別聯(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個自由度,分別為沿 x、y、z坐標(biāo)軸做旋轉(zhuǎn)和平移動作,其控制都是通過調(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)額外采用一個協(xié)處理器。
控制系統(tǒng)對實(shí)時(shí)性要求較高,同時(shí)進(jìn)行的處理內(nèi)容也比較復(fù)雜,包括各個傳感器數(shù)據(jù)的采集、姿態(tài)估計(jì)、姿態(tài)控制、遙控或地面站的命令分析、電機(jī)控制、日志記錄等。對于這種任務(wù)比較多的程序結(jié)構(gòu),如果采用普通的前后臺系統(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ǒng)的開發(fā)提供極大的方便。
2.1 硬件選型
(1)處理器:由于主處理器要負(fù)責(zé)采集各個傳感器的數(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,該模塊包含一個高線性度壓力傳感器和一個超低功耗的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)形式輸出,只需一根信號線即可傳輸 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)中含有兩個處理器,為了方便更新程序,將協(xié)處理器的 UART1連接至主處理器串口,這樣可以通過主處理器更新程序,減少開發(fā)過程中的冗余步驟。連接兩個處理器之間的串口在系統(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)效率。
圖1 硬件系統(tǒng)結(jié)構(gòu)圖
為了防止電機(jī)在運(yùn)行時(shí)產(chǎn)生強(qiáng)電流燒毀處理器,在PWM輸出與電調(diào)輸入之間采用TI公司的TXS0108電平電壓轉(zhuǎn)換芯片,達(dá)到信號隔離和增強(qiáng)驅(qū)動的作用,電路如圖2所示。
圖2 PWM輸出隔離電路
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)識別與切換、協(xié)處理器控制、日志記錄。進(jìn)程間進(jìn)行通信是程序結(jié)構(gòu)的重要部分。為了建立一個快速簡潔的進(jìn)程間通信機(jī)制,本文引入一種微型對象請求代理(micro Object Request Broker,uORB)機(jī)制[5],通過推送和訂閱主題的方式進(jìn)行通信,進(jìn)程不用關(guān)注信息交換的對象,并且同時(shí)可以推送和訂閱多個主題,只需簡單的代碼即可實(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)識別進(jìn)程結(jié)合傳感器數(shù)據(jù)、飛行器姿態(tài)和遙控?cái)?shù)據(jù)識別出飛行器當(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 主處理器軟件結(jié)構(gòu)圖
3.2 協(xié)處理器軟件設(shè)計(jì)
如圖4所示,為了保證系統(tǒng)的實(shí)時(shí)性,協(xié)處理器的PPM脈沖輸入部分采用中斷方式進(jìn)行捕獲,與主處理器通信部分采用DMA方式直接填充至PWM匹配輸出寄存器,最大程度地減小CPU的干預(yù)。失聯(lián)識別在定時(shí)器20 ms中斷中實(shí)現(xiàn),每次進(jìn)中斷會讀取DMA傳輸計(jì)數(shù)器的值并記錄,再與上次的記錄值進(jìn)行比較,如果兩個值不相等,則說明數(shù)據(jù)連接正常;相反,如果連接斷開,兩個值將會相等,據(jù)此實(shí)時(shí)地判斷出連接的通斷狀態(tài)。主循環(huán)中只需要判斷通斷標(biāo)志位,如果檢測到連接斷開,協(xié)處理器則會啟用失效保護(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個萬向節(jié)中兩個的軸發(fā)生重合時(shí),會出現(xiàn)失去一個自由度的情況。四元數(shù)法則不存在這個問題,并且運(yùn)算步驟也相對簡單,適合在本文控制系統(tǒng)的協(xié)處理器中運(yùn)用。
圖4 協(xié)處理器軟件流程圖
如圖5所示,利用四旋翼飛行器作為實(shí)驗(yàn)平臺,在室外進(jìn)行飛行試驗(yàn)后,得到橫滾、俯仰和偏航角的響應(yīng)曲線。將日志導(dǎo)出到MATALB并繪制曲線,從圖6可以看出飛行器的實(shí)測值能夠快速、精確地追蹤設(shè)定值。在人為軟件復(fù)位主處理器后,飛行器能在空中保持機(jī)身大致水平,直至主處理器恢復(fù)工作,保證了系統(tǒng)的安全性。此外,在NuttShell中輸入”top”指令,可得到主處理器的資源占用情況。如圖7所示,主處理器的cpu空閑資源達(dá)到了51.73%。
圖5 實(shí)驗(yàn)平臺
圖6 飛行器姿態(tài)角響應(yīng)圖
實(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ǔ)。
NuttX-based control system design for multi-rotor unmaned aerial vehicle
Huang Shuichang1,Li Pan2,Sun Shengjuan1,Zhang Yongjian1,Zhang Zhipan1
(1.School of Information and Electrical Engineering,Hebei University of Engineering,Handan 056038,China;2.School of Electrical Engineering,Guizhou University,Guiyang 550025,China)
According to the requirements of multi-rotor unmanned aerial vehicle for multitasking and secutiry,this paper presents a kind of flight control system adding a failsafe coprocessor based on NuttX real-time operation system,to reduce the probability of crash risk and enhance the capacity of task of the main processor.Experimental results show that this platform can meet the flight with great stability,significantly reduce the development effort and shorten the development cycle.It retains adequate resources for the subsequent algorithm development also.
multi-rotor uav;NuttX;multitask;fail safe
V242
:A
:0258-7998(2015)03-0041-03
10.16157/j.issn.0258-7998.2015.03.009
國家自然科學(xué)基金資助項(xiàng)目 (41373101)