,,,
(吉林大学 仪器科学与电气工程学院,长春 130012)
四旋翼飞行器是多旋翼飞行器中最简单最流行的一种,其4个旋翼对称分布,呈“十”型或“X”型,相比于直升机,四旋翼飞行器结构简单,适宜在复杂、狭小的环境下飞行。在飞行效果方面,该飞行器的盘旋稳定性更好,降落时地面效应不明显[1]。综合以上优势,四旋翼飞行器被很多领域作为一种新兴的空中移动平台,搭载各种相应的任务负荷,广泛应用于影视航拍、电力巡航、情报监视、战损评估等诸多方面,具有极高的应用价值和广阔的应用前景。
目前常用的机载单目视觉跟踪方法有多种:光流传感器法[2]利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体运动信息的一种方法,但它对目标纹理要求比较严格,跟踪精度较低;基于图像特征点的同时定位与地图创建方法[3]通过传感器测量周围环境数据,逐渐估计自身位置及运动情况,并且估计和描绘周围环境和地图,该方法对传感器及处理器性能要求较严格;参考文献[4]设计了一种由一系列同心圆环组成的地面标记,通过计算图像中心与同心圆圆心之间的距离来控制飞行器的姿态使其间距最小;参考文献[5]设计了方形的地面标记,通过计算形心之间的距离来控制飞行器调整姿态,但是这种方法使用图像特征作为输入,无法获得飞行器的位姿参数。
本文设计的四旋翼飞行器跟踪系统有效地弥补了光流传感器法及其他方法的缺陷,充分利用先进的计算机视觉技术,在获取目标位置信息和飞机姿态信息的同时优化了控制算法,提高了跟踪的准确性和系统的可靠性。
飞行器采用X型电动式四旋翼结构,以四旋翼飞行器中心为原点建立x-y-z坐标系(如图1所示),机体绕x轴转过的角度为横滚角(Roll),绕y轴转过的角度为俯仰角(Pitch),绕z轴转过的角度为偏航角(Yaw),这3个角度统称为欧拉角。
图1 四旋翼飞行器模型简化图
机体在悬停过程中,4个旋翼对机体产生的升力与机体自身重量mg相等,旋翼M1和M3顺时针转动,旋翼M2和M4逆时针转动,各旋翼的转动惯量大小相等,可抵消机体的自旋。
垂直飞行时,同时提高4个旋翼的转速,使拉力u变大,当u>mg时,飞行器向上飞行;俯仰飞行时,控制旋翼M2和M3转速同时增加,旋翼M1和M4转速同时减小,使f2+f3的值增大,f1+f4的值减小,飞行器向前飞行;横滚飞行时,控制旋翼M3和M4转速同时增加,旋翼M1和M2转速同时减小,使f3+f4的值增大,f1+f2的值减小,飞行器向左飞行;偏航飞行时,控制旋翼M2和M4转速同时增加,旋翼M1和M3转速同时减小,使f2+f4的值增大,f1+f3的值减小,飞行器水平逆时针转动。
PID控制器在连续控制系统中取得了非常好的控制效果,并得到了广泛应用,PID控制器的时域微分方程如下:
(1)
式中,KP为比例系数,Ti为积分时间常数,Td为微分时间常数,u(t)为控制量,e(t)为期望值与实际输出值构成的偏差量。
PID控制算法原理图如图2所示。图中,r(t)为期望值,y(t)为实际输出值。
图2 PID控制算法原理图
式(1)描述的是模拟PID控制器,在计算机控制中需要将其转换为数字PID控制器。将式(1)通过后向差分的方法离散化后可得到
(2)
式中,T为采样周期,uk为控制量。
本文中对四旋翼飞行器高度、横滚、俯仰的控制均采用PID算法。因此,图2中的r(t)为飞行器期望的高度值或位置坐标,y(t)为飞行器实际的高度值或位置坐标,u(t)为控制飞行器4个电机转速的PWM(Pulse Width Modulation)波占空比,被控对象为飞行器的4个电机。
OpenCV是一个开源的跨平台计算机视觉库,可以运行在Linux、Windows和MAC OS操作系统上,它由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。对于飞行器这种实时性要求较高的系统,使用计算机视觉技术对图像进行处理可以快速获得跟踪目标位置信息,从而实时控制飞行器姿态[6],因此本文采用OpenCV实现系统的图像处理。
整个系统由控制模块、测距模块、图像采集与处理模块组成,其总体架构如图3所示。
图3 系统总体架构
2.2.1 控制模块
控制模块由中央控制器STM32和飞行控制器组成,STM32接收到运动目标的位置信息后进行解算,解算出目标的运动方向、速度和加速度等,并通过PID控制算法得出合适的横滚值、俯仰值、偏航值,同时,STM32根据测距模块测得的高度进行高度方向的PID计算,得出相应的油门值,然后将4个姿态值发送至编码器,编码器将4个姿态值对应的PWM信号转换成PPM信号传送至飞行控制器。飞行控制板集成了气压计、3轴陀螺仪、3轴加速度计和SPI、I2C等多种通信接口,且其主控芯片运算速度快,具有强大的数据处理能力,可以满足四旋翼飞行器这一硬实时系统的要求。当飞行控制板接收到PPM控制信号后,将各姿态值融合转化为欧拉角输出,改变飞行器4个旋翼转速,实现姿态调整。
2.2.2 测距模块
测距部分采用HC-SR04超声波测距模块。该模块测距范围为2~400 cm;采用I/O口TRIG触发测距,给最少10 μs的高电平信号,模块发送8个40 kHz的方波,自动检测是否有信号返回,若有,则通过I/O口ECHO输出高电平,高电平持续时间就是超声波从发射到返回的时间。所以,测试距离=(高电平时间×声速)/2。
(3)
其中,h为飞行器高度,t为声波发出与接收的时间间隔,v为声音在空气中传播的速度,取340 m/s。
2.2.3 图像采集与处理模块
图像采集与处理部分使用单目摄像头和树莓派。单目摄像头具有800万像素分辨率,具有自动调光和自动对焦功能,能够有效减小飞行器在飞行过程中的震动和光线强度变化对图像采集的影响,具有较强的抗干扰性,因此能够满足本系统的要求。树莓派采用基于ARMv7的32位Broadcom BCM2836四核处理器,装载Ubuntu操作系统,便于使用和开发,带有4个USB接口,方便连接外部设备以及与主控制器通信,采用5 V直流电源供电,可以从飞行器上直接取电,体积小巧,方便飞行器搭载。
系统的软件设计主要分为两大部分:一是控制四旋翼飞行器实现定高飞行和跟踪飞行;二是识别地面运动目标并获取与解算其位置信息。程序流程图如图4所示。
图4 程序流程图
2.3.1 定高飞行
在飞行过程中,超声波测距模块实时测量飞行器当前飞行高度,并将高度值传递给主控制器STM32,主控制器采用位置式PID算法进行高度方向的PID计算,最后将计算得到的结果转换成相应的油门值,控制旋翼的转速,从而改变飞行器的高度。
飞行器飞行高度的期望值和实际值分别作为PID控制器的输入量和反馈量,位置式PID算法如式(2)所示,u(k)即为最终控制量。
电机的PWM控制信号与电机转速的关系受电池输出电压的影响。一方面,由于电池存在内阻,在大电流输出时会产生压降,使输出电压降低;另一方面,随工作时间延长,电池的电荷量减少导致输出电压降低[7]。这两个原因都会使电池输出电压不能恒定,导致飞行器在不同电池电压下使用相同的油门值起飞时,起飞的稳定效果和过冲高度不同。本系统将11.4~12.6 V作为电池正常工作区间,以0.1 V为单位,以超调量和上升时间作为衡量标准,测试不同电压下较为理想的油门值。测试结果如表1所列。
表1 电池电压补偿表
注:Tr为上升时间,δ为超调量。
2.3.2 目标物体的跟踪
当识别到目标后,首先将摄像头得到的BGR颜色空间图像转换为HSV颜色空间图像,如图5(a)所示,然后设置目标阈值,根据阈值构建掩膜,接着对原图像和掩膜进行位运算,经过位运算处理后的图像如图5(b)所示。下一步对图像与设定的核进行卷积处理,先进行腐蚀处理,将灰度值小的区域增强扩展,去除比较亮的噪点;然后进行膨胀处理,将灰度值大的区域增强扩展,连通相似颜色的区域。先腐蚀后膨胀的过程称为形态学的开运算,经过开运算处理后的图像如图5(c)所示。很明显可以看出,经过开运算处理,可以有效滤除掉图像中的噪声,提高目标识别的准确性。最后做出目标的最小外接圆,目标位置即为该外接圆的圆心,树莓派再将该圆心信息发送至STM32主控制器,进行PID计算。
图5 图像处理过程图
为了达到起飞时间短、超调量小、稳定飞行时高度稳定等指标,根据PID参数整定规则多次调整飞行器高度轴PID控制器中的系数Kp、Ki和Kd,通过地面站观察飞行过程中的高度信息,并做出高度随时间变化的曲线图(如图6所示),可以看出,起飞时超调量不超过8%,稳态误差不超过5%,飞行稳定性高,能够有效避免在跟踪目标过程中,由于高度不稳定而丢失目标的问题。
在跟踪过程中,通过单目摄像头实时采集目标运动信息,并传至树莓派中,通过构建平面直角坐标系,可以得到目标相对于飞行器来说在横滚方向的位置坐标x和俯仰方向的位置坐标y,然后通过各自方向的PID控制器计算出横滚值和俯仰值。通过多次调整横滚和俯仰方向PID控制器的参数Kpx、Kix、Kdx和Kpy、Kiy、Kdy,最终达到识别速度快、反应灵敏、跟踪稳定性高等效果。图7(a)为
图6 飞行器飞行高度曲线图
跟踪过程中横滚方向偏差x随时间变化的曲线图,图7(b)为俯仰方向偏差y随时间变化的曲线图。
由图分析可得,飞行器起飞后,能快速识别到目标并锁定,在跟踪过程中x轴偏差不超过±13 cm,y轴偏差不超过±10 cm,具有较高的可靠性和抗干扰性,能够达到稳定跟踪地面目标的要求。
图7 跟踪误差曲线图