?

基于Arduino的四旋翼飛行器設計與實現

2017-11-15 13:09董瑞智李澤文徐振平
電腦知識與技術 2017年28期
關鍵詞:PID控制卡爾曼濾波

董瑞智+李澤文+徐振平

摘要:針對四旋翼飛行器姿態數據測量存在誤差、控制算法選擇較難的問題,該文選用Arduino開發板作為系統控制板,構建基于Arduino的四旋翼飛行器。選擇慣性測量單元六軸組件MPU6050、電子羅盤HMC5883L及氣壓計BMP085等多個MEMS傳感器實時采集飛行器姿態數據,并由雙閉環PID控制器實現對兩組四路電機的轉速控制。為降低傳感器數據的測量誤差,該文采用卡爾曼濾波算法對飛行器姿態數據進行濾波與融合,為飛行器的姿態控制提供有利條件。經飛行實驗顯示,該文設計的飛行器實現了懸停、升降和轉彎等功能,并驗證了該文使用卡爾曼濾波算法降低姿態數據測量誤差和雙閉環PID控制器控制飛行器狀態的有效性。

關鍵詞:四旋翼飛行器;MEMS傳感器;卡爾曼濾波;姿態解算;PID控制

中圖分類號:TP391 文獻標識碼:A 文章編號:1009-3044(2017)28-0263-03

Abstract: In order to solve the problem of the measurement error of the attitude data of the four rotor aircraft and the difficulty of the selection of the control algorithm. This paper uses Arduino development board as the system control board to build a Arduino based four rotor aircraft, and select some MEMS sensors, such as the inertial measurement unit six axis components MPU6050, HMC5883L electronic compass and barometer BMP085, to collect aircraft attitude data. Then, use double closed-loop PID controllers to control the speed of two groups of four motors. In order to reduce the measurement error of sensor data, the Calman filtering algorithm is used to filter and fuse the attitude data of aircraft, which provides favorable conditions for attitude control of spacecraft. The flight experiment shows that the design of the aircraft can hovering, lifting and turning function, and verified effectiveness of using the Calman filter algorithm to reduce the measurement error of attitude data and using double closed-loop PID controllers to control the state of the aircraft.

Key words: quad-rotor helicopter; MEMS sensor; kalman filtering; attitude calculation; PID controller

1 概述

四旋翼飛行器,一種由4個轉子推動飛行[1],六自由度垂直起降飛行器[2],能夠完成懸停、飛行、垂直起降等功能。通過改變每個轉子的速度,機身在各個方向承受不同的推力,從而實現機身傾斜,以達到轉向和控速的目的。目前,無人機的應用領域相當廣泛,如農業上的植保無人機,商業上的攝影無人機,亞馬遜的快遞無人機,工程質量檢測上的巡回無人機,地形檢測的無人機等等。四旋翼飛行器以其小巧易控制,穩定操控等優點得到市場的廣泛認可。

近年來,眾多學者針對四旋翼飛行器提出了多種控制算法,如自適應單神經元控制算法、魯棒控制算法、滑??刂扑惴ǖ?,但這些算法對中控處理器性能有較高的要求。本文則以Arduino開發板為主控板,輔以雙閉環PID控制器,即基于Arduino的四旋翼飛行器,能夠節約成本,并可有效控制飛行器的設計方案。

2 飛行原理

四旋翼飛行器的主體是十字形交叉結構,在每個機架的頂端固定有獨立電機分別驅動各自的螺旋槳。如圖1所示,螺旋槳1和螺旋槳3的旋轉方向一致,由一組電機驅動;螺旋槳2和螺旋槳4的方向一致,由另一組電機驅動。兩組電機按照指定的轉速旋轉,提供了四旋翼飛行器所需升力,垂直上下等;通過改變某電機的旋轉速度形成差動力矩,實現飛行器的翻滾和前進控制。

3 系統結構設計

四旋翼飛行器控制系統的硬件結構由主控模塊、微傳感器測量模塊、無線遙控模塊、電機驅動裝置等組成。如圖2所示,飛行器的整個工作過程可以分為以下4個步驟:

1) 獲取陀螺儀、加速度計、電子羅盤和氣壓計等傳感器采集到的數據,將其處理后得到姿態數據A;

2) 由無線模塊獲取遙控器給予的信號量B;

3) 姿態數據A由I2C協議、遙控器信號量B由SPI傳給主控芯片進行PID控制;

4) 根據形成的四路PWM占空比波形來控制兩組四路電機的旋轉速度。

3.1 主控模塊

本文選用Arduino Uno單片機作為主控板,該主控板的核心處理器為Atmega128,具有14個數字I/O端口(其中6個端口可作為PWM輸出端口),6個模擬輸入端口, I2C和SPI通信接口串口,以及10位內置 A/D端口。Arduino Uno主控板的這種結構能夠滿足系統設計要求[3]。endprint

3.2 傳感器模塊

圖2中所用傳感器模塊型號分別為:MPU6050模塊(包含三軸陀螺儀和三軸加速度計兩種MEMS傳感器)、HMC5883L磁力計(電子羅盤)、BMP085氣壓計。MEMS傳感器的測量非常靈敏,對機身震動敏感,因此機身震動對陀螺儀和加速度計測量有較大干擾,這將導致瞬間角速度值產生較大誤差。為保證系統能得到穩定的姿態信息,可將MEMS傳感器與HMC5883L磁力計一同使用。MPU6050模塊、HMC5883L磁力計和BMP084氣壓計這三個傳感器均是由端口通過I2C協議進行通信。

3.3 無線遙控

為保證飛行器接收信號的穩定性和正確性,無線遙控模塊采用NFR2401,其工作頻段在2.4G — 2.5GHz,其傳輸速率穩定且高達2M bit/s。正是由于NFR2401具有非常高的傳輸速率,飛行器在很短的傳輸距離內能有效避免信號的干擾,達到信號穩定傳輸。

3.4 驅動模塊

考慮到飛行器所需升力較大,傳統電機無法滿足要求,故采用無刷電機作為旋翼驅動電機。又由于無刷電機所需驅動電流較大,Arduino主控板所能驅動的電流無法達到此要求,因此本文采用電調驅動四個無刷電機,電調采用了線性穩壓技術,能提供較高且穩定的無刷電機所需電流。

4 飛行器姿態解算

4.1 數據濾波處理

雖然采用MEMS微傳感器進行數據測量精度較高,但是由于傳感器的高敏感性,以及飛行器飛行過程中的機身震動,測量出來的數據存在誤差。MPU6050模塊包含加速度計和陀螺儀兩個功能組件,加速度計用來測量加速度值,但加速度計容易受外界干擾,如飛行器震動等,瞬時誤差較大;陀螺儀用于角運動的檢測,而陀螺儀由于其自身測量存在著積分漂移誤差和溫度漂移誤差,當其測得數據經由自身積分處理后,隨著時間的增加積分誤差逐漸加大,所以MPU6050模塊所測量的數據在短期內有效。HMC5883L磁力計的測量也是針對短期內的測量有效,長時間的積累誤差不可避免。因此,本文將HMC5883L磁力計的測量值用于MPU6050模塊中加速度計測量值的修正。

總的來說,在飛行器飛行過程中,雖然陀螺儀測量的數據值短時間內比較可靠,但在長時間內使用電子羅盤測量值修正后的加速度計采集數據會更加可靠[4],其操作實質是將陀螺儀和加速度計的測量值分別與電子羅盤的測量值進行融合,得到陀螺儀和加速度計在階段性更加可靠的信號。本文針對傳感器在長時間采集數據誤差大的問題,利用卡爾曼濾波算法對多個傳感器測量得到的數據進行濾波與融合處理,降低測量誤差,為飛行器的姿態控制提供有利條件。

卡爾曼濾波算法在飛行器設計中具體實現流程如圖3所示[5]。

卡爾曼(Kalman) 濾波[6]算法包括預估和校正兩個主要過程[7]。預估過程利用時間更新方程對當前狀態進行先驗估計,并及時向當前推算當前狀態變量和誤差協方差估計的值,以便為下一個時間狀態構造先驗估計值;校正過程負責反饋,在預估過程中的先驗估計值及當前測量變量的基礎上利用測量更新方程建立起當前狀態的改進后驗估計[8]。如圖4所示,這里以飛行器的翻滾角為例,將測量值融合前后進行對比,可以看到融合之后的數據剔除了部分誤差,使得翻滾角的值不再有較大的上下浮動,數據曲線相對比較平滑,由此說明卡爾曼算法的有效性。

4.2 姿態解算

飛行器姿態解算,顧名思義是對飛行器運行過程中的姿態進行計算,從而得知飛行器是否傾斜、高度多少等信息。在得到計算后的姿態信息,可對飛行器進行更好的操控,如翻轉、懸停、上升下降等動作。由此可見姿態解算是飛行器設計中非常重要的環節,主要包括兩大部分:融合傳感器數據和雙閉環PID控制。

傳感器測量數據融合,通過互補濾波器等方法將傳感器的多軸數據從四元數形式轉換到歐拉角進行計算,從而得到飛行器的姿態信息,如姿態角和角速率。

雙閉環PID控制,控制器的重點是對飛行器電機的轉速進行控制,以達到對飛行器姿態的控制。如圖5所示,控制器的外環是飛行器姿態角度的PID控制,內環是角速率的PID控制??刂破鞯耐猸h首先對期望姿態角度和傳感器測量的實際姿態角度相比較得到誤差角度,然后將誤差角度經由PID控制器處理計算出期望角速率,接著將期望角速率和傳感器測量的實際角速率作為內環的兩個輸入量,經PID控制器計算后得到飛行器姿態數據。最后,經過程序處理將姿態數據轉換成PWM信號,達到控制電機轉速。

5 程序設計

本文在Arduino IDE中使用C++編寫飛控程序。整個程序的設計流程如圖6所示。程序開始和其他嵌入式設備軟件一樣進行硬件初始化,檢查各個部件是否正常,若所有部件處于正常狀態則飛行器進入起飛準備,獲取每個傳感器數據和遙控信號,將傳感器數據經由卡爾曼數據濾波處理得到姿態解算,然后將得姿態解算得到的角速度和角速率與遙控信號進行融合,再通過PID控制器對融合數據進行處理并調整輸出PWM信號以控制四路電機的轉速,從而控制飛行器的飛行,直到遙控信號設置為停止飛行,整個程序結束,飛行過程結束。

6 實驗驗證

本文根據第5章的設計流程搭建四旋翼飛行器,并在室外環境進行了多次試飛,圖7是四旋翼飛行器在某時刻所處位置的實拍圖。本文實現了飛行器的定高懸停和升降控制,驗證了整體架構、卡爾曼濾波算法和PID控制器的可靠性。

7 總結

飛行器在很多領域具有實際效用,如農業植保、商業攝影和工程質量檢測等。本文分析了飛行器在姿態數據測量上存在較大誤差,以及常用控制算法對中控處理器的性能要求較高,采用了卡爾曼濾波算法對傳感器的采集數據進行濾波和融合,以降低姿態數據的測量誤差,并采用雙閉環PID控制算法控制飛行器飛行姿態。本文從硬件架構、傳感器模塊選擇、數據濾波和姿態解算以及軟件程序設計等多個方面分析并設計了一個四旋翼飛行器。通過多次試飛實驗結果表明,本文設計的四旋翼飛行器能夠完成垂直升降、直線飛行、懸停和轉彎等功能,達到了飛行器的常用功能目標,同時驗證了本文使用的卡爾曼濾波算法和雙閉環PID控制算法在實驗中的有效性和可靠性。由于本文設計的飛行器結構較為基礎,考慮到數據濾波和姿態解算是飛行器核心部分,我們接下來將設計更優的數據濾波和姿態解算方法,并選用更高質量的硬件資源,以實現對飛行器的精準控制。

參考文獻:

[1] 李秀英, 劉彥博. 基于PWM的四旋翼飛行器控制方法[J].吉林大學學報:信息科學版,2011,29(5):464-472.

[2] 饒康麒, 劉小明, 陳萬春. 四旋翼飛行器姿態估計方法[J]. 電光與控制,2015(5):25-28.

[3] 蔡睿妍. Arduino的原理及應用[J]. 電子設計工程,2012,20(16):155-157.

[4] 唐懋. 基于Arduino兼容的Stm32單片機的四旋翼飛行器設計[D].廈門大學,2014.

[5] 王帥, 魏國. 卡爾曼濾波在四旋翼飛行器姿態測量中的應用[J].兵工自動化,2011,30(1):73-74.

[6] CharlesK.Chui, GuanrongChen, 崔錦泰,等. 卡爾曼濾波及其實時應用[M].清華大學出版社,2013.

[7] 趙慧. 多傳感器信息融合目標跟蹤算法研究[D]. 華南理工大學,2014.

[8] 張磊, 陸宇平, 殷明. 多傳感器融合四旋翼協同控制算法及其實現[J].應用科學學報,2016,34(2):190-202.endprint

猜你喜歡
PID控制卡爾曼濾波
改進的擴展卡爾曼濾波算法研究
基于遞推更新卡爾曼濾波的磁偶極子目標跟蹤
內??刂圃诨痣姀S主汽溫系統中的應用
常規PID控制和常規模糊控制的比較
基于模糊卡爾曼濾波算法的動力電池SOC估計
基于擴展卡爾曼濾波的PMSM無位置傳感器控制
基于EMD和卡爾曼濾波的振蕩信號檢測
基于卡爾曼濾波的組合導航誤差補償
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合