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

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

四元數被定義為四維結合代數,以i、j、k為四元數的基數,基數應滿足以下條件:

其中i、j、k代表沿x、y、z軸的單位矢量,而四元數是指標量w與矢量v=x·i+y·j+z·k之和。
通過旋轉軸和繞該軸旋轉的角度可以構造一個四元數,計算公式如下:

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

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

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

表1 測試內外環參數值
在飛行過程中,根據飛行器在飛行時的實際情況,如四軸重心偏前、偏后、偏左、偏右等,在參數設置界面中調整姿態數值,增強四軸飛行穩定性,優化飛行體驗。圖4是姿態值調整說明圖,在飛行過程中,在只控制四軸垂直上升的情況下,如過四軸自動偏向某一方向,說明四軸重心偏移在某一側,在參數設置界面中調整姿態數值可以解決這一問題,可以根據如下方法調整姿態參數。

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