張 偉 王 坤 王 晨
(1.咸陽師范學(xué)院計(jì)算機(jī)學(xué)院 咸陽 712000)(2.凱迪雷拉大學(xué)信息技術(shù)與計(jì)算機(jī)科學(xué)學(xué)院 碧瑤 2600)
隨著現(xiàn)代電子科技和微機(jī)一體化技術(shù)的快速發(fā)展,推動(dòng)了四軸飛行器的發(fā)展與應(yīng)用。無人機(jī)被認(rèn)為是一種無人載具[1],可以通過地面人為操作設(shè)計(jì)好的無人載物飛行器,達(dá)到人們想要完成的任務(wù),實(shí)現(xiàn)四軸飛行器各種特殊任務(wù),比如高空偵查、物資投放、通信等。近年來,無人機(jī)在國防、農(nóng)藥、消防及探險(xiǎn)等領(lǐng)域得到了廣泛的應(yīng)用,無人機(jī)的研究已成為當(dāng)前的熱點(diǎn)之一。
四旋翼無人機(jī)其實(shí)就是由四個(gè)軸的電機(jī)和主控芯片組成,正是因?yàn)檫@種結(jié)構(gòu)可以使電機(jī)通過轉(zhuǎn)速得到向上的升力,從而去控制機(jī)身的運(yùn)動(dòng)姿態(tài)。本設(shè)計(jì)開發(fā)板選用STM32[2],芯片型號(hào)為STM32F103C8T6,其具有32位高速浮點(diǎn)處理單元,72MHz高速處理能力,有多個(gè)GPIO端口和兩個(gè)USART,以及高級(jí)定時(shí)器、通用定時(shí)器。其中高級(jí)定時(shí)器能產(chǎn)生四路PWM[3],用于控制電機(jī)。主控芯片主要負(fù)責(zé)獲得并計(jì)算處理傳感器測量的數(shù)據(jù),傳感器將獲得的三軸加速度和三軸角速度,通過其自帶的數(shù)字運(yùn)動(dòng)處理器輸出數(shù)據(jù)存取在寄存器中;并將其獲得相對于地面的飛行高度、航向姿態(tài)并結(jié)合控制算法[4]計(jì)算出電機(jī)控制量,利用程序中設(shè)定的時(shí)間檢測并計(jì)算控制,以實(shí)現(xiàn)無人飛行器的穩(wěn)定飛行。
姿態(tài)傳感器是由加速度計(jì)和角速度集成。在無人機(jī)中,四旋翼在空中高度不穩(wěn)定機(jī)械作用下,電機(jī)轉(zhuǎn)速的一點(diǎn)點(diǎn)不平穩(wěn)都會(huì)帶來傾斜,更何況遇到障礙。由三軸加速度三軸陀螺儀組成的姿態(tài)傳感器可以有效保持姿態(tài)穩(wěn)定性。
由于MPU6050測量的數(shù)據(jù)精度高于陀螺儀結(jié)合加速度測量的數(shù)據(jù),為了提高精度,本設(shè)計(jì)中四旋翼通過三軸加速度計(jì)結(jié)合陀螺儀6D0F模塊采集數(shù)據(jù)并與MPU6050采集的數(shù)據(jù)進(jìn)行校準(zhǔn),以便更精確地控制飛行器的飛行。
無線通信技術(shù)分為2.4GHz和5.0GHz,然而2.4GHz無線技術(shù)在無線通信行業(yè)里應(yīng)用最為廣泛。2.4GHz所指的是一個(gè)工作頻段2400M~2483M范圍,這個(gè)頻段是全世界免申請使用。WIFI、藍(lán)牙以及物聯(lián)網(wǎng)中的Zigbee都是基于2.4通信的。而由于它們用到的通信協(xié)議棧各不相同,故各自的傳輸速度也不同。本次開發(fā)中采用ESP8266 WIFI收發(fā)芯片,數(shù)據(jù)速率高達(dá)600Mb/s,不足的是手動(dòng)控制飛行器比手持式無線終端靈活性差,但可以滿足上位機(jī)對其數(shù)據(jù)采集和實(shí)時(shí)操控的需要。
采用直接集成到微控制板上的MOS驅(qū)動(dòng)管來實(shí)現(xiàn)有刷電機(jī)轉(zhuǎn)動(dòng),微控制器通過獲得傳感器自帶的數(shù)字運(yùn)動(dòng)處理數(shù)據(jù),通過計(jì)算處理輸出PWM控制電機(jī)。有刷電機(jī)有兩個(gè)接線口,一個(gè)接電源的正極一個(gè)接電源的負(fù)極。如果要改變電機(jī)的轉(zhuǎn)動(dòng)方向只需要將正負(fù)極反接即可。另外,可以使用有刷電調(diào)來控制有刷電機(jī),可在不反接線的情況下通過電調(diào)控制電機(jī)的轉(zhuǎn)動(dòng)方向。
對于航模電池,有兩個(gè)參數(shù):電量和放電倍率。電量就是常用的毫安時(shí)電量標(biāo)示,它表示了電池能夠存儲(chǔ)的電能的多少;放電倍率通常是有15C、20C、25C或30C等,它表示了放電的速率。電池選用了3.7V 380mAh的電池。
軟件開發(fā)選用Keil uVison4集成開發(fā)環(huán)境,內(nèi)核工具鏈?zhǔn)褂肧TM32F10x_V3.5.0。
四軸飛行器的軟件控制過程如圖1所示,其主要步驟如下。

圖1 控制過程
1)微控制器通信方式采用的是IIC控制總線通信方式,來獲得MPU6050傳感器的初始數(shù)據(jù);
2)四軸濾波采用互補(bǔ)濾波方式并進(jìn)行融合得到飛行器的實(shí)時(shí)姿態(tài);
3)ESP8266將接收到上位機(jī)發(fā)送的數(shù)據(jù)解析為預(yù)期的飛行姿態(tài);
4)將無人機(jī)的實(shí)時(shí)姿態(tài)與ESP8266解析預(yù)期的飛行姿態(tài)作差,差值送入串行PID閉環(huán)控制器,進(jìn)而控制飛行器的飛行動(dòng)作。
MPU6050傳感器將獲得的姿態(tài)值保存到寄存器中,通過STM32主芯片和MPU6050之間集成的IIC總線通信,從而讀取三軸加速度和三軸角速度值。飛行器傳感器采樣頻率設(shè)置為200Hz;陀螺儀量程為±2500°/s(dps),加速計(jì)量程±5g。
姿態(tài)融合時(shí),采用互補(bǔ)濾波[5]。四旋翼飛行器的在空間中此刻至下一秒的運(yùn)動(dòng)姿態(tài)是由陀螺儀的數(shù)學(xué)積分方程通過計(jì)算來確定的。為了得到姿態(tài)角所對應(yīng)的四元數(shù)[6],用超復(fù)數(shù)的乘法四元素來等效于姿態(tài)歐拉角,其轉(zhuǎn)換公式[7]如下:

四元數(shù)被定義為四維結(jié)合代數(shù),以i、j、k為四元數(shù)的基數(shù),基數(shù)應(yīng)滿足以下條件:

其中i、j、k代表沿x、y、z軸的單位矢量,而四元數(shù)是指標(biāo)量w與矢量v=x·i+y·j+z·k之和。
通過旋轉(zhuǎn)軸和繞該軸旋轉(zhuǎn)的角度可以構(gòu)造一個(gè)四元數(shù),計(jì)算公式如下:

姿態(tài)解算指控制器讀取自身傳感器數(shù)據(jù),實(shí)時(shí)計(jì)算四軸飛行器的姿態(tài)角,比如橫滾角(roll),俯仰角(pitch),偏航角(yaw)的信息[8],四軸飛行器的微控制器對這三個(gè)方向的信息值,通過計(jì)算處理得到四個(gè)電機(jī)所需要的運(yùn)行值,從而使飛行器可以在空間中完成平穩(wěn)飛行和一系列動(dòng)作飛行。
對于飛行器的姿態(tài)解算方面有多種方法,比如卡爾曼濾波算法(EKF)和互補(bǔ)濾波算法等。由于卡爾曼濾波算法精度高,計(jì)算量大,適用于復(fù)雜的無人機(jī)項(xiàng)目中,而本設(shè)計(jì)只是研究微型飛行器,互補(bǔ)濾波算法既可以滿足研究需要,又簡化了設(shè)計(jì)過程。
設(shè)計(jì)中用到的傳感器是集成在PCB板上加速度計(jì)和陀螺儀的組合體。其中加速度計(jì)用來測量相對于空間坐標(biāo)的加速度值,陀螺儀用來獲得飛行器自身和空間坐標(biāo)的各個(gè)角度值。由于飛行器相對于靜止?fàn)顟B(tài)時(shí)加速度計(jì)測量的穩(wěn)定性高,而飛行器相對于運(yùn)動(dòng)狀態(tài)時(shí)陀螺儀測量的穩(wěn)定性高。因此,可以通過加速度計(jì)的值來修正陀螺儀所獲得數(shù)據(jù)的偏差。
通過手機(jī)WIFI APP,用ESP8266 WIFI模塊接連到STM32的USART2,用戶在手機(jī)操作界面發(fā)出姿態(tài)值通過WIFI通信,再由UART2將得到的期望值傳入STM32主芯片中,系統(tǒng)需要實(shí)時(shí)更新無線通信數(shù)據(jù)。
四旋翼無人機(jī)的平衡控制算法有許多種如:PID控制算法[9]、反步法[10](Backstepping)、線性二次型(LQ)、神經(jīng)網(wǎng)絡(luò)自適應(yīng)[11]、反饋線性化[12](Feedback Linearization)以及H控制[13]等。此設(shè)計(jì)中選擇PID算法,即本無人機(jī)設(shè)計(jì)基于PID控制器算法來控制姿態(tài)穩(wěn)定性。
PID算法是指“比例(Proportional)”、“積分(Integral)”、“微分(Derivatioe)”三個(gè)元素。P指當(dāng)無人機(jī)收到外界的干擾后,機(jī)身對產(chǎn)生姿態(tài)偏移回到穩(wěn)定的時(shí)間,即用來控制從不穩(wěn)定到穩(wěn)定的響應(yīng)時(shí)間,P越大響應(yīng)越快;I指當(dāng)無人機(jī)從不穩(wěn)定回到穩(wěn)定狀態(tài)一段時(shí)間內(nèi)積累的誤差,只修正P是無法達(dá)到的期望姿態(tài)值,也叫靜態(tài)差值;D是為了加強(qiáng)對機(jī)體變化的快速響應(yīng),對P有抑制作用,二者具有互斥性。
串級(jí)PID有兩個(gè)閉環(huán)的控制器串聯(lián)來搭配工作,主控制器是主要部分,最終目的是保證主變量的穩(wěn)定。如果出現(xiàn)二次干擾,主控制器不動(dòng),副控制器先來調(diào)整,然后主控制器再根據(jù)副控制器的調(diào)整進(jìn)行進(jìn)一步的調(diào)整。所以,采用兩個(gè)閉環(huán)的控制器串聯(lián)工作一定比單個(gè)環(huán)的控制器獨(dú)自工作效果要好很多。環(huán)內(nèi)環(huán)副控制器的輸入,計(jì)算出一個(gè)較小的PWM輸出信號(hào)。這個(gè)過程由快變慢,使無人機(jī)慢慢恢復(fù)平衡。
通過陀螺儀,可以獲得X、Y、Z三個(gè)軸的傾斜角和旋轉(zhuǎn)角。根據(jù)這六組參數(shù),就可以對四個(gè)電機(jī)做反饋控制。飛行控制器的程序采用的是雙環(huán)串級(jí)PID反饋控制。外環(huán)輸入通過采集陀螺儀獲得的傾斜角值,外環(huán)輸出采用期望的角速度,內(nèi)環(huán)輸入采用期望的角速度減去當(dāng)前通過陀螺儀測得的角速度,而內(nèi)環(huán)輸出則是飛行控制器輸出的信號(hào)的補(bǔ)償值,通過輸出的補(bǔ)償值來調(diào)整電機(jī)的轉(zhuǎn)速。
串級(jí)PID控制如圖2所示,期望角度值來自于無線遙控模塊,測量角度值由飛行器中傳感器模塊提供,通過計(jì)算兩者的差值從而輸入到角度環(huán)PID控制器中,角度環(huán)PID計(jì)算處理后輸出期望角速度值;期望角速度值與傳感器獲得的測量角速度進(jìn)行計(jì)算得到角速度偏差值,得到的這個(gè)差值作為角速度環(huán)PID控制器的輸出值,再由其進(jìn)行計(jì)算處理得到四個(gè)PWM的控制量,輸出控制量進(jìn)而控制電機(jī)轉(zhuǎn)動(dòng),實(shí)現(xiàn)飛行器的運(yùn)作。

圖2 串級(jí)PID框圖
STM32主控芯片通過代碼完成PID計(jì)算后,將PID計(jì)算后的值輸入到集成在STM32的TIM4(定時(shí)器4)的比較寄存器中,然后通過調(diào)制輸出四路PWM信號(hào),如果想要得到不同的PWM波形只需通過輸入的PID值,來改變正負(fù)占空比,從而達(dá)到不同的轉(zhuǎn)速。將PWM通過電機(jī)驅(qū)動(dòng)使其工作,至此,完成了基于STM32和MPU6050搭建的飛控系統(tǒng)工作。
無人機(jī)采用PID控制[14~15],通過人為期望的姿態(tài)值和飛行器實(shí)際的姿態(tài)值進(jìn)行計(jì)算得到誤差值,然后將誤差值作為輸出四路PWM值來控制電機(jī),當(dāng)飛行器調(diào)整到期望值和實(shí)際值誤差接近于0時(shí),則到達(dá)相對穩(wěn)定狀態(tài)。
無人機(jī)的PID參數(shù)調(diào)試需要一些準(zhǔn)備工作。首先在調(diào)整參數(shù)之前,無人機(jī)要保持電機(jī)打開,保持機(jī)體震動(dòng),在這個(gè)前提下,確保電機(jī)與槳葉的轉(zhuǎn)動(dòng)平衡,獲得傳感器的原始數(shù)據(jù)輸出。如圖3無人機(jī)處于劇烈震動(dòng),開始調(diào)整PID參數(shù)時(shí),要先確定比例增益P,將時(shí)間積分常數(shù)I設(shè)為0,時(shí)間微分常數(shù)D設(shè)置為一個(gè)極低的值或設(shè)置為0。將P降低為0,由0開始逐漸增加P。P的值在保持不抖動(dòng)的情況下越大越好。P逐漸增大,增大到多少會(huì)抖動(dòng)完全取決于機(jī)身的質(zhì)量以及電機(jī)本身的性能和動(dòng)力。在P增加至機(jī)身出現(xiàn)劇烈高頻抖動(dòng)后,將P降低60%~80%,調(diào)整到懸停時(shí)機(jī)身不再出現(xiàn)抖動(dòng)為止。

圖3 飛行器震動(dòng)
通過遙控器控制無人機(jī),在給出一個(gè)指令后查看無人機(jī)對于指令的執(zhí)行是否有執(zhí)行過量,是否會(huì)出現(xiàn)過沖反饋。如果出現(xiàn)了這種情況,可以適當(dāng)增加微分量D來減小過沖。最后,在懸停飛行時(shí),可以查看無人機(jī)是否存在漂移或不按照指令方向飛行的情況,如果有,就略微增加積分項(xiàng)I,來消除漂移的情況。
加鎖控制鎖,點(diǎn)擊右上角的參數(shù)設(shè)置,在PID內(nèi)外環(huán)設(shè)置中設(shè)置數(shù)值,設(shè)置完成點(diǎn)擊提交。提交完成后,修改橫滾P值為0,不要提交,下拉刷新,若變?yōu)樵O(shè)定值,證明PID修改成功。通過多次的調(diào)整正得到了合理的PID值,如表1所示,通過多次實(shí)驗(yàn),當(dāng)P=3,I=0.8,D=22時(shí)飛行器能夠穩(wěn)定地飛行。

表1 測試內(nèi)外環(huán)參數(shù)值
在飛行過程中,根據(jù)飛行器在飛行時(shí)的實(shí)際情況,如四軸重心偏前、偏后、偏左、偏右等,在參數(shù)設(shè)置界面中調(diào)整姿態(tài)數(shù)值,增強(qiáng)四軸飛行穩(wěn)定性,優(yōu)化飛行體驗(yàn)。圖4是姿態(tài)值調(diào)整說明圖,在飛行過程中,在只控制四軸垂直上升的情況下,如過四軸自動(dòng)偏向某一方向,說明四軸重心偏移在某一側(cè),在參數(shù)設(shè)置界面中調(diào)整姿態(tài)數(shù)值可以解決這一問題,可以根據(jù)如下方法調(diào)整姿態(tài)參數(shù)。

圖4 姿態(tài)調(diào)整說明
連接四軸飛行器,進(jìn)入控制界面,加鎖控制鎖后,進(jìn)入?yún)?shù)的姿態(tài)設(shè)置界面,下拉獲取四軸飛行器中的默認(rèn)加速度X、Y、Z值。通常,只更改加速度的X、Y值即可,X、Y值都以500為默認(rèn)值作為基準(zhǔn)進(jìn)行修改。當(dāng)四軸重心偏前時(shí)(即控制四軸垂直上升時(shí)飛機(jī)自動(dòng)往前偏移),應(yīng)適當(dāng)增加Y值,增加值根據(jù)偏移的嚴(yán)重程度(增加與減少值必須為50的倍數(shù))。
最終通過幾十次的調(diào)整正得到了合理的姿態(tài)值,X=300,Y=450,Z=500時(shí)無人機(jī)起飛的重心才在中心點(diǎn)上。
基于STM32的無人機(jī)設(shè)計(jì),該系統(tǒng)主要以STM32開發(fā)板為控制器,并且在開發(fā)板上集成了MPU6050姿態(tài)傳感器,通過預(yù)留的串口通道便于連接其他模塊,如WIFI模塊通過串口2連接到開發(fā)板上,并進(jìn)行一些遙控通信,通過集成的IIC來獲得傳感器得來的姿態(tài)值,實(shí)現(xiàn)了對無人機(jī)各種飛行姿態(tài)的精確控制。