APP下载

基于Arduino的四旋翼飞行器设计与实现

2017-11-15董瑞智李泽文徐振平

电脑知识与技术 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控制。控制器的外环首先对期望姿态角度和传感器测量的实际姿态角度相比较得到误差角度,然后将误差角度经由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控制卡尔曼滤波
改进的扩展卡尔曼滤波算法研究
基于递推更新卡尔曼滤波的磁偶极子目标跟踪
内模控制在火电厂主汽温系统中的应用
常规PID控制和常规模糊控制的比较
基于模糊卡尔曼滤波算法的动力电池SOC估计
基于扩展卡尔曼滤波的PMSM无位置传感器控制
基于EMD和卡尔曼滤波的振荡信号检测
基于卡尔曼滤波的组合导航误差补偿