王晓光, 管港云, 徐嘉铭, 李俊呈
(1. 吉林大学 公共计算机教学与研究中心, 长春 130012; 2. 吉林大学 电子科学与工程学院, 长春 130012; 3. 长春理工大学 光电工程学院, 长春 130022)
近年来, 随着传感器技术的发展和GPS在控制系统中的广泛应用, 微型无人机系统迅速发展, 无人机作为微型机电系统的产物, 非常适合在旷野城区等近地面环境中执行任务, 具有广阔的应用前景. 在人工智能技术中, 利用航拍图像实现对特定目标进行跟踪与自动识别的技术受到广泛关注, 其借助可编程的硬件突破了逻辑电路的固件性, 算法灵活.
基于GPS和计算机图像识别的无人机导航系统利用计算机视觉技术, 旨在设计无人机高精度定位导航系统. 使用该系统的无人机需要有摄像头硬件匹配, 当无人机利用GPS定位到达目标地点附近却因GPS定位精度较低不足以精准定位目标时, 无人机立即开启摄像头进入图像识别定位模式, 通过图传模块在计算机端完成目标检测与路径规划, 并控制无人机相应运动, 实现无人机自主完成高精度识别目标降落任务的功能. 本文利用开源计算机视觉库(OpenCV)为无人机设计基于计算机视觉的定位系统与控制系统[1], 并采用GPS定位与计算机视觉识别相结合的技术实现更高效、 准确的定位导航系统.
本文根据无人机自主飞行定位导航任务, 采用STM32无人机核心主板, 在GPS定位与飞行模式控制的基础上, 数传模块与图传模块通信传输, 在计算机上完成视觉识别精准定位. 任务需求由如图1所示的4个分系统协调合作实现. 首先图像捕获系统将视频流采集到PC端[2], 图像处理系统再将收集到的图像做预处理, 进行图形拟合并计算出图形的几何中心坐标值; 然后由路径规划系统计算目标图形几何中心与无人机的坐标差值; 最后飞行控制系统传输相应的运动期望指令, 使无人机到达预设的位置[3].
图1 无人机导航系统组成Fig.1 Composition of UAV navigation system
在图像形状特征的提取上, 对于相对简单的目标图像, 可采用轮廓特征算法提取得到形状特征[4]; 而对于复杂目标图像的处理, 则需先重新进行边缘检测, 再使用轮廓特征算法完成图像形状特征的提取[5]. 在定位系统上, 本文使用更精准的基于计算机视觉系统的定位方式. 利用计算机视觉库完成基于计算机视觉的无人机定位系统与控制系统的程序设计, 解决了无人机在空中快速飞行下的图像数据采集及预处理, 其他图形或地面轮廓干扰下的标志识别, 远距离无人机配合识别精确位置控制的问题.
本文设计了基于STM32单片机和GPS模块两者之间的通信, GPS模块在系统中作为通信的桥梁, 通过接收卫星发射的无线电信号实现对定位信息的获取, 并由GPS模块对接收到的数据进行分析解读, 转换为终端设备可识别的位置信息, 然后使STM32单片机对无人机发出适当的指令, 最后无人机执行指令到达目的地. 相应的模块关系如图2所示.
图2 模块关系Fig.2 Module relationships
GPS定位解析可实现经纬度测定、 海拔高度测定、 速度计算与方向指示、 路径存储和最短路径计算.
2.2.1 串口通信设计
STM32单片机对GPS模块的控制通过通用异步收发传输器(UART)实现, 当串口初始化结束后, UART读取或写入存储器内的数据, 当等待接收缓存区为空时, USART即可接收GPS数据. 系统的串口通信模块可分为串口初始化模块、 串口读取模块和串口写入模块.
2.2.2 GPS数据接收程序设计
GPS模块用于从串口读取GPS信号信息, 判断是否检测定位到GPS信号, 进而获得GPS的位置、 速度、 时间数据等信息, 并进行相应的处理. GPS信号接收过程如图3所示.
图3 GPS信号接收过程Fig.3 GPS signal receiving process
2.2.3 GPS数据格式解析协议
选用GPRMC数据帧模式, 其具有特定的信息存储形式, 包含经纬度、 速度、 时间等所需内容. 系统程序接收到处理标识后, 根据GPRMC格式, 从中获取所有关键数据[6]. 以GPRMC信号为例: 首先创建一个GPS数据结构体, 然后解析GPRMC数据, 得到经纬度、 日期时间、 速度、 航向, 如果数据有效, 则分析分离纬度、 分离经度、 速度等.
在无人机飞行控制系统中引入前置反馈, 改善系统的实时性, 进入微分环节, 改善动态特性, 提升飞行控制系统的整体性能, 以便无人机适应飞行过程中的各种复杂状况.
陀螺仪选取MPU6050进行姿态角的探测, MPU6050加速度陀螺仪传感器内有三轴加速度传感器、 三轴陀螺仪和一个I2C接口, 可连接外部地磁传感器, 并利用自身带的DMP(数字运动处理器)硬件加速引擎, 利用I2C接口将完整9轴融合演算的数据输出到应用端. 软件设计选用STM32读取传感器信息, 解算姿态角, 将姿态角作为控制量与遥控参量融合, 将输出的控制信号传送到动力系统中, 实现无人机的飞行控制.
蚁群算法(ACO)是一种模拟蚂蚁寻找食物过程中如何发现最短路径的算法. 如果在栅格图[7]中要寻找从起点S到终点D的最优路径, 则所有可能走的节点组成集合Possible. Possible表示蚂蚁接下来可能会走的下一个节点的集合;α是体现搜索路径重要性的因子[8],α越大表示蚂蚁走的是其他蚂蚁走过路径的可能性越大;β为反应蚂蚁协作性强度的因子[9],β值越大, 说明状态转移概率越接近贪心规则[10].因此, 当求解一个问题时, 通常能做出目前最优的选择.
每通过一段路径, 蚂蚁就需要去更新信息素的值.已知t时间时, 信息素值为τij(t), 则信息素的值在t+n时间可表示为
τij(t+n)=(1-ρ)τij(t)+Δτij(t),
(1)
其中ρ为信息素挥发系数, 定义域为(0,1).因为蚁群算法在使用Ant-Cycle模型时的性能更好, 因此本文使用Ant-Cycle模型[11], 表示为
(2)
蚁群算法使用分布式计算方法, 进程和线程同时执行实现算法的性能; 该算法易与其他算法相结合, 且鲁棒性较好, 不需做过多修改即可使用.但该算法用时较长, 易陷入局部最优解.
考虑到无人机自身的约束条件, 如飞行高度、 最大航迹长度等因素, 设现有一条飞行路径R, 无人机在飞行过程中经过点(X1,Y1,Z1),(X2,Y2,Z2),…,(XN,YN,ZN), 则适应度值函数F为
(3)
其中α和β为系数, 其值大小分别表示路径长度和无人机飞行高度在路径规划中的重要程度.
选择X方位为主方位, 沿着X轴方向从XS到XD划分成n=(|XS-XD|+1)个平面, 分别命名为Π1,Π2,…,Πn, 无人机路径即分成(n-1)段.假设无人机飞行到第i个平面Πi中的点(Xi,Yi,Zi), 则易知下一个到达的栅格即在Πi+1上, 平面Πi+1上任意一栅格(X,Y,Z)成为下面要运行的栅格, 其概率表示为
(4)
其中:τ(X,Y,Z)为面Πi+1中点(X,Y,Z)的栅格信息素数值;H(X,Y,Z)为平面Πi+1中坐标为(X,Y,Z)所对应栅格的启发函数, 其计算公式为
H(X,Y,Z)=D(X,Y,Z)ω1S(X,Y,Z)ω2Q(X,Y,Z)ω3,
(5)
D(X,Y,Z)为到(X,Y,Z)的路径长度, 使蚂蚁尽可能选择距离目前点最近的点,
(6)
S(X,Y,Z)为表示安全性的重要因素, 使蚂蚁去选择安全点,
(7)
Q(X,Y,Z)表示栅格(X,Y,Z)到终点栅格(XD,YD,ZD)的距离, 可使蚂蚁选择离终点栅格近的栅格, 计算公式为
(8)
式(5)中ω1,ω2,ω3为系数, 其大小表示上述因素是否重要, 该项越重要, 对应的系数值越大, 反之则表明不重要.
在蚁群算法中, 所有栅格都有一个信息素值, 信息素有两部分: 局部更新和全局更新.局部更新会在有蚂蚁经过该栅格时进行更新.全局信息素只改变最小适应度值的路径通过的所有栅格的信息素值, 信息素更新的计算公式为
(9)
其中length(m)表示蚂蚁m走过的路径长度,K表示系数,ρ表示信息素的挥发系数[12].
3.3.1 起始点位置确定
假设栅格地图的原点坐标是(XgridS,YgridS,ZgridS), 无人机放置的位置为(SX,SY,SH), 则与其所在栅格坐标位置(XS,YS,ZS)的关系为
(10)
(11)
(12)
其中ceil表示在正无穷的方向上取整.
3.3.2 主方向的选取
选取经度和纬度方向中栅格变化数较多方向为无人机路径规划的主方向, 则从Πi到Πi+1坐标变化为
(13)
无人机视觉定位系统通常选择生活中常见有辨识度的图形作为视觉定位目标, 因为使用PC端进行实验, 所以目标图形需满足: 1) 现实生活中普遍存在且易计算中心值; 2) 易被识别的目标图形; 3) 目标图形的灰度值与其背景图像有明显区别, 易辨识. 常选用“H”图形.
在地面标志识别算法和程序设计过程中, 为提高无人机对目标图形的检测准确性, 需要优化对于角点识别的相关算法. 设计程序使无人机自动寻找目标物, 绘制地面标志判断的流程图. 最后进行地面标志识别跟踪定位实验, 检验飞行性能.
图像预处理中首先使用灰度处理提高计算效率; 其次利用高斯滤波处理降噪[13]; 然后采用形态学梯度处理[14], 使图像中的灰度级阶跃更明显, 凸显边缘; 最后使用Canny边缘检测算法提取内部轮廓边缘[15], 再进行Hough圆检测过程, 找到圆的区域半径以及其几何中心坐标, 从而进行运算得到相对坐标. 图像预处理流程如图4所示.
图4 图像预处理流程Fig.4 Image preprocessing process
级联分类器包含训练和检测两个过程. 其中训练分类器本文采用OpenCV traincade程序. 程序支持Haar和局部二值模式(LBP)两种特征, LBP特征是整数特征, 使训练和检测速度更快且不影响其精确性. 对于分类器的选择, 本文使用Python中OpenCV的Adaboost分类器, 将训练弱分类器进行迭代, 每次迭代后对获得的局部最优分类器权重进行求和, 得到强分类器.
4.3.1 算法流程
1) 首先修改训练数据权重, 保证其遵循均匀分布的规律;
2) 学习训练数据集合Dm(m=1,2,…,M), 获得一个简单分类器, 计算分类器在训练数据集合上的误差率, 即错误样本数量;
3) 计算系数, 即弱分类器权重, 分类错误样本越少, 弱分类器权重越大, 分类器的性能越好;
4) 更新训练数据集的权重分布, 可通过提高分类错误样本权重的方法, 增强分类器的性能;
5) 弱分类器加权得到目标分类器.
4.3.2 训练级联分类器的步骤
训练级联分类器步骤如图5所示. 训练过程概括为两步: 1) 创建样本, 样本分为正、 负两类, 正样本是要检测的目标样本, 负样本是任意无关的图片; 2) 对正、 负样本分别建立描述文件, 为正样本创建一个TXT文件(pos.txt), 将该文件与正样本存储在相同的路径中, 负样本则为另一个TXT文件(neg.txt), 与负样本图片存储在相同路径中.
图5 训练级联分类器步骤Fig.5 Training cascade classifier steps
4.3.3 正样本建立
选择正样本的要求: 1) 不严格规定图片尺寸大小, 但必须与得到的正样本矢量文件比例相同, 训练时可根据设置的比例自动缩放; 2) 正样本图像背景干扰尽可能少, 避免背景特征干扰正样本特征值的计算结果; 3) 正样本来源应丰富, 如果目标图像重合率相似率过大, 局部特征明显一致, 训练拟合程度过高, 则会影响识别的准确度, 不利于分类器的广泛使用.
正样本建立步骤如下:
1) 获得正样本图像, 首先要对正样本归一化处理, 采集时可直接从原图按比例裁剪以便放缩;
2) 获取正样本路径列表, 在文件夹中编写一个bat文件, 内容为dir pos/b>pos.txt, 其中pos是文件夹名, 运行bat文件, 生成dat文件, 删掉dat文件中所有不是图片的路径, TXT中的位置信息是基于objectMaker程序生成的;
3) 获取正样本矢量集vec文件, 用OpenCV中的程序opencv_createsamples.exe获取后放在当前路径下, 写入bat文件完成指令的输入, 通过加-show显示正样本图像, 根据需求更改num, -w和-h(数目、 宽度、 高度), 运行bat.pos文件产生成正样本矢量集文件.
4.3.4 负样本建立
选择负样本的要求: 图片中不允许有待检测物; 负样本同样要求种类数目繁多, 不能重复; 不对负样本的尺寸大小严格规定, 但负样本尺寸需大于正样本矢量集图像的高和宽, 保存路径与正样本类似, 内容为dir neg/b>neg.txt, 其中neg为负样本所在的图像文件夹名, neg.txt中内容不含框和位置信息. 经上述步骤, 负样本建立完成.
4.3.5 训练级联分类器
使用opencv_traincascade完成级联分类器的训练后, 将其存储于cascade.xml文件中. 路径中还存放许多中间量. 若在训练级联分类器的过程中被其他高优先级程序中断, 则只需再次加载即可读入, 不用再次训练该分类器. 训练完成后, 不需保存这些中间文件. 经验证, 正负样本数目为1∶3训练效果较好, 训练层数越多越好.
训练成功后, 如果能在文件夹下找到名为dt.xml的文件, 则说明可进入测试阶段. 若在某处停止很久, 则大概率是因为负样本不足. 此时应输入中断程序指令, 通过提高负样本的数量和增加其丰富性, 得到分辨能力强弱不同的多个级联分类器; 或使用OpenCV的CVHaarDetectObjects函数对其检验.
无人机是双向对称结构, 因此可将无人机的相对位置用俯仰、 横转、 偏航和升降4个输入量定义. 以姿态角为被控量, 应用PID算法, 并通过STM32单片机控制无人机4个电机的转速分别控制无人机完成不同动作, 从而达到控制实现无人机定向运动的目的. 无人机飞行控制流程如图6所示.
图6 无人机飞行控制流程Fig.6 Flow chart of UAV flight control
对于姿态角的计算, 采用积分的算法可能会降低动态系统平衡性能, 严重时会导致闭环系统稳定性较低, 所以积分不能过大. 若采用微分算法, 则可能因为人为操作原因而导致误差过大, 从而影响系统稳定性, 甚至使系统振荡. 因此引入微分实现PID值计算时, 只针对姿态角进行微分而不对设定值进行微分操作, 可提高系统动态性能并增强系统可靠性.
利用数传模块将姿态角信息传到计算机, 通过计算机运算观察图像与模拟姿态, 得到拟定姿态角数据. 系统数据传送过程如图7所示. 对于无人机的PID算法, 反复调节得到最优参数, 最终达到预期平衡状态. 使STM32单片机与GPS模块连接, 将模块的输入输出线和地线分别与STM32的输入输出线和地线相连. 整体系统搭建完成后, 可实现无人机的飞行只由用户端程序控制, 将无人机的航点任务需求编入程序, 可在计算机上实现无人机导航系统切换多种模式调试的目的[16].
图7 系统数据传送流程Fig.7 Flow chart of system data transmission
无人机搭载摄像头得到的数据信息不因环境而改变, 且可以直接从捕获的图像获取感兴趣区域(RIO), 利用训练好的分类器进行目标比对与判定.
综上所述, 本文在全球定位系统GPS的基础上, 结合当前计算机视觉识别与级联分类器智能化目标检测对无人机视觉定位系统进行了研究与设计, 其中摄像头捕获图像传回计算机一体化处理, 获取一系列位置坐标和路径规划, 自动调整位置, 使无人机自主完成高精度识别目标降落的任务, 实现无人机对于常用标识的跟踪.