基于图形化编程的多旋翼无人机的飞控系统设计与实现
2022-11-24万德强李春青黄乙铭黄欣华覃雪婷黄劼
万德强,李春青,黄乙铭,黄欣华,覃雪婷,黄劼
(广西民族师范学院 数理与电子信息工程学院,广西崇左,532200)
0 引言
随着信息技术、通信技术和无人驾驶技术的发展,融合光电技术、智能控制、材料科学、飞行动力学等多项技术于一身的无人机被广泛应用于应急救援、高空航拍、遥感测绘等领域当中,无人机发展也获得了快速发展。自2018年以来,我国出台了一些用于规范无人机发展的政策。智研咨询公布的《2021-2027年中国无人机行业市场全景调查及市场分析预测报告》也表述:中国无人机行业的成长特别是民用无人机的成长走到世界前面,按照IDC的数据统计,深圳市大疆创新科技有限公司占领世界消无人机费级市场70%以上的份额,在世界中民用无人机企业中排名第一。
本项目顺应国家信息技术发展需求和中小学“创客教育课程的意义和实施”发展要求,通过对多旋翼无人机硬件和软件两方面的控制系统进行设计和优化,在此成果上,应用于中小学无人机教育中。从而达到科普科学知识的同时,培养中小学生的动手能力,提升中小学生的信息素养。
1 硬件设计
设计分为飞控部分和遥控器部分,飞控部分主要由STM32F103芯片配合MPU6050、升压稳压电路、空心杯电机、NRF2401无线通信模块组成,经过NRF2401无线通信模块实现无人机遥控器与无人机飞控的联系。
遥控器采用了两块芯片作为主要构成,一块是同飞控一样的STM系列的芯片,另一块是可以支持图像化编程的MEGA328P的芯片,设计思路是通过串口与STM32F103C8T6主控芯片通信,发送指令给飞控,从而让飞控判断遥控器发过来的指令去控制四轴飞行器,完成图形化编程的过程。
■1.1 飞控部分
STM32F103C8T6是ST发布的一款MCU,是基于ARM Cortex-M内核STM32系列的32位的微控制器,它的程序存储器可存储的容量为64KB,其供电电压可以在2~3.6V之间的范围,运算速度也高达720MHz,有着封装体积小,可使用资源丰富等特点。
图2 陀螺仪引脚图
姿态传感器我们选择使用的是MPU6050,MPU6050它能够同一时间去检测三轴陀螺仪和三轴加速度的运动数据以及温度的数据。三轴加速度和三轴陀螺仪划分三个16位的ADC,也就是说,加速度有三个16位ADC,此中每一个轴利用了一个。它的价格比较划算,使用资料也广为丰富。使用MPU 6050芯片内部的DMP模块,可以对传感器数据进行滤波和融合处理,直接通过I2C总线向主控制器输出所解算过后的数据,从而去减少相对主控制器的运算量。其频率最高可以高达200Hz,所以非常适合应用于对一些姿态控制以及实时要求比较高的领域。
无线通信采取NRF24L01模块,该模块采用FSK调制,集成NORDIC自家的Enhanced Short Burst。能够一对一或者是一对六之间进行不经导体或缆线传播进行的远距离传输通讯,传播距离一般达几米到几十米甚至更远。经对SPI接口设置,基本可以与各类单片机产生信息交换,完成无线传输。还有极低的电流消耗,体积小,兼容性高,发射功率小,使用环境广等特点,四条线的SPI接口通信的速率能够达到8Mbps,对其的操作也相对比较简单。
图3 NRF2401引脚图
图4 气压计引脚图中气压计使用的是FBM320,这是一款分辨率很高的数字气压计(一个数字压力传感器),它是由MEMS压阻式的压力传感器还有信号组成调节ASIC,ASIC包括用于校准数据的24bits sigma-delta ADC,OTP存储器,和串行接口电路,提供I2C和SPI接口与控制器通信以及微控制器,它的作用主要是用来进行压力效准以及温度补偿。通过I2C或者SPI接口能够获得效准数据存储在OTP和压力及温度的原始数据。
图4
设计的升压电路采用ME2188C50M5G DC-DC升压芯片,升到5V主要是为了给空心杯电机提供够足够的电压,避免突然拨杆启动电机的时候导致会拉低电压,进而使无线通信产生信号降低的情况;稳压电路采取ME6206A33M3G DC-DC稳压芯片,目的是给主控芯片提供稳定的供电。
图5 升压电路图
图6 电机驱动
图7
四个机臂上采用的RGBLED是串行单总线全彩灯,只需要占用单片机的一个IO端口,就可以控制这四个灯发出各种各样的颜色。空心杯电机使用SI2302这款MOS管进行驱动,这是非常常见的一款MOS管,既便宜又好用。
■1.2 遥控器部分
MEGA328P芯片支持图形化编程,通过串口与STM32F103C8T6主控芯片通信,发送指令,控制四轴飞行,完成图形化编程的过程。
图9油门、方向摇杆使用滑动变阻器,主控器读取摇杆位置的阻值来判断无人机的油门,方向,控制四轴做出上升、下降,前进、后退、左旋、右旋,左移、右移等动作。
图9
图8 MEGA328P芯片图
图10四个独立用户按键,K1用来给飞机解锁和上锁,当正确解锁后,OLED上的MOD标识变为Unlock后,便可推动油门,使四轴上升;K2是用户自定义按键,可以自己编程达到预想的效果,K3是加速度计和陀螺仪的校准,K4切换有头和无头的模式。
图1 STM32F103C8T6引脚图
图10
2 软件设计
软件开发选用Keil μVison5和Mixly作为主要开发环境,Mixly是一款可以进行图形化编程的软件,可以在这款软件设计无人机的飞行方案,软件所提供的图形化编程内容,使用积木的方式编程无人机的控制和飞行方案,可以在软件里面去添加无人机的控制指令,可以在软件添加无人机的事件类型,结合积木编程就可以创建新的无人机飞行控制方案。
四轴飞行器的软件控制过程如图11所示,其主要步骤如下。
图11 控制过程
微控制器通讯方式所采取的是I2C总线的通信方法,向MPU6050传感器取得初始的数据;四轴滤波利用互补滤波的方法并融合在一起取得无人机的实时的飞行姿势和状态;无线通信模块NRF24L01将获取到上位机的发送数据进行分析解剖作为预期的姿势状态;将无人机的实时姿势和状态与NRF24L01所分析解剖预期的姿势状态作差,差值送入串行PID闭环控制器中,进而控制无人机的飞行姿态。
无人机飞行控制的算法有捷联式惯性导航系统、卡尔曼滤波算法、飞行控制PID算法三大算法,本系统采用的是PID算法,PID算是一种线性操控器,它是依据给定值和实际输出值组成操控误差,然后操纵误差给出响应的控制量。PID中的P是表示比例的意思,I是表示积分的意思,D则表示的是微分。
本设计中使用PID算法来进行对无人机的姿势状态和定高操控。在没有操控系统的状态下,直接进行驱动电机带动螺旋桨的旋转来发生控制力,可能会呈现出飞行器的动态回应太快和太慢、过冲和不足的问题,导致完成不了起飞和悬停的状态的。为消除这一系列问题,则需要在操控系统的回路中去运用PID算法。在飞行状态数据和螺旋桨转速之间插入比例、积分和微分的关系,经由调整每个关键的参数,可以使多旋翼无人机系统控制可以实现动态回应及时、既不会过冲、也不会短缺的情况。
3 实物调试
无人机采用的PID算法是位置式PID控制,位置式PID公式如下:
设计通过以姿态角作为被控制对象,所以:
在这里要说明一下,用到的算法都是最基本的PID控制算法,运用传统的形式,对无人机的姿态进行控制。可能对于熟练操作的人来说比较有好处,也试过其他的算法,发现通过陀螺仪直接测出角速度,在实践过程中用角速度与微分项进行微分,加载在PID算法上面,打杆比较缓和,对PID参数要求不是很高,可这并不是本设计想要的效果,所以还是采用了老式的算法。
图12
PID控制器调整:
在实物调试过程中遇到的问题:由于该飞机是一个小型的,并且使用的是空心杯电机,外加了一个防护套,在调试的时候利用调试架先调试Y轴即可,后可调试X轴,最后调试Z轴,在调试过程中,第一要稳定性,能否平衡在期望角度;二要应答性,当操作语句改变时,四轴可否即时的应答所想要的变化;第三要操纵性,由操纵员感受四轴的姿态是否已与操纵,会不会产生响应过冲。
本设计在调试过程中采取四组典型参考数据进行分析。即第一组数据设置P值为1000,I值、D值设置为0,设置P值是1000是因为在PID算法中从地面站传参进去到执行算法,算法中最后得出的结果都除以了1000,方便PID的运算,所以把P值设置为1000,如图13所示。
图13
在这一组参数中发现,无人机上电解锁电机后开始往一边倒,但是并没有倒下就起不来了。而是在倒到约55度角度左右,电机力量像是突然加大,四轴起来,反向,接着倒向另外一边。进入失控的大幅度抖动。
由于一开始就往一侧倒,所以认为是P值过小。于是在第二组数据中加大P值,即把P值设置为3000,其他参数不变,如图14所示。
图14
但是当把P值加到很大时,四轴还是一开始往一边倒,然后电机力量增大,四轴翻倒向另外一边,开始散性的震荡。此时觉得是P值给的不够,在电机的惯性的作用下会有抖动。到后来是P太大了,直接进入震荡。始终没有观察到一个等幅震荡或者说接近小幅震荡的点。无论P值大亦或是P值小,四轴都会进入失控的发散性震荡。换而言之这个X四轴光靠P根本进入不了一个比较稳定的状态或者接近稳定的状态。连相对稳定的等幅震荡都观察不到就直接进入发散的震荡。没有明显观察到网上流传最通俗的调节PID说法的那种情况,即:逐渐加大P直到开始发生等幅震荡,然后P不变,加入D抑制震荡。
观察到的是P无论怎么给,四轴都倒向一边然后开始进入发散的震荡,唯一的区别就是P小,现象是一开始倒下的角度大,P越大,现象就是一开始倒下得角度越小,进入震荡得越快。
于是在第三组数据中把P值减小,即把P值设置为2000,其他参数还是不用发生任何改变,如图15所示。
图15
这次观察到新现象。把四轴稍微倾向一边几度,比如说左边,当P小时,启动电机松手后,四轴向左倒,如果P大了,四轴回向右倒。前面的是补偿不够,后者是补偿过头了。在这两个P值得区间就有我们要找的P,合适的P就是能在平衡位置挣扎左右晃几下的值。此时的P=2000,但是光靠P四轴还是站不住,只能在平衡位置坚持个2~4s。所以得加入D,因为加入D值,能提升四轴回到期望角度的响应速度,但D值过大又会影响到响应速度过慢。
第四组数据中把D值设置为100,P值为2000,I值为0,即图16所示。
图16
这组参数中四轴无明显变化,依然只能在平衡位置坚持个2~4s。很明显D值给得太小了,当D=1000时可明显观察到平衡的时间跟长了,但还是会倒。在第五组数据设置D=2000,可以明显观察到四轴可以基本平衡了,但还是又有小幅震荡,一旦有干扰还是不能很快恢复稳定了,D=3000时四轴已经开始比之前大的等幅震荡了,此时说明D大了。在这类情况下表明P值仍然是给小了。把D值设在2500,然后把P值加大。后面的调节参数就是要调好P后再调D,定好D再调节P,两个参数互相扶持的趋近一个最佳点。当然机体表现出的等幅震荡时也不一定是D大了,P不合适同样也会产生此种情况。还有调节参数时不要一味只加不减。当P=4000,D=5000时将P往回减了点才取得了更好的效果。最后离开平衡杆时P=3500,D=5000。这次没有静差,也就没有I项,X轴和Z轴的调试方式相同。
图17
小结:
(1)调节PID首先要明白最基本PID三项的意义P是回复力是系统平衡的主力,D是阻尼力,始终是抑制作用,I虽然能使系统回复但是I大了容易激发震荡,所以I只能是辅助P;
(2)一般从P开始调节时候首先要找到临界震荡点,要学会便是系统临界震荡点的特点,不同系统临界状态可能不同;
(3)P不一定就比D大,切不可经验主义,一切遵循实际,多尝试可能性。
调试图形化编程,利用Mixly软件拖动图形进行编程,起飞代码如图18所示。
图18
通过跳线口与控制器的串口发送命令达到图形化编程的效果。
4 结语
系统是基于STM32与MEGA328P并支持图形化编程的四轴无人机设计,以STM32F103单片机作系统的主要控制器,上位机采纳MEGA328P芯片为主要控制器,STM32F103为第二控制器,下位机集成了MPU6050姿态控制传感器,使用芯片上面预留的串口通信通道与其他模块进行通信,如无线通信模块经由串口来连接到开发板上,完成遥控和无人机之间的通讯,以集成的I2C来取得传感器得来的姿态值,实现了对无人机各类飞行姿态和定高的控制等。