梁睿哲 李承蒙 谢祥平 谢昊璋 唐 亮
(桂林电子科技大学机电工程学院,广西 桂林 541004)
RoboMaster机甲大师赛是大疆创新发起创建的机器人竞技与学术交流平台,其为我们提供了很好的计算机视觉应用开发平台,需要机器人在赛场实现识别追踪、目标检测、预判以及精准打击等功能。本文基于RoboMaster2020~2021赛季比赛内容,以机器人所需的视觉功能为背景,研究计算机视觉领域下的多种技术的开发和应用。
自动瞄准作为RoboMaster视觉中最基础的功能,自动瞄准装甲板大幅度提高打击效率。机器人身上的装甲板是主要承受伤害的区域,有两根平行的灯条,中间是数字或者兵种图标,所以需要从众多的灯条中准确地筛选出真正的装甲板,以确定最佳目标进行瞄准打击[1]。
首先对从摄像头获取的图像做预处理操作,好的二值化处理可以真实地还原灯条的轮廓,减少灯条的筛选错误;以上一帧图像的识别到的装甲板为中心,从长宽两个方向扩大合适的倍数作为ROI区域,可以减少跳变,再对ROI图像进行处理可以提高图像处理的速度,提高数据的连续性,而后对找到的所有轮廓进行筛选;将获得的灯条放入数组中逐个进行配对,图像中的灯条相对于真实的灯条可能会有一些变形,通过合成装甲板的角度与灯条角度之差,删除误差较大的装甲板,再通过RGB判断灯条颜色是否为应该识别颜色,最后通过BP模型判断得到的装甲板中间是否为数字或者兵种图标,得到正确的装甲板,并且保持了较高的图像处理帧率。
通过灯条配对的装甲板依然有误识别现象出现的可能,所以需要判断装甲板中间是否有数字或图标,我们采用了BP(back propagation)神经网络来分类各种数字和图标。BP神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传递,误差反向传播。基本思想是梯度下降,最终让网络的实际输出值和期望输出值的误差均方差最小;训练的核心算法为前向传播和反向传播[2]。
研究表明,隐含层的节点数表示该网络的数据处理能力。为了保证程序的运算速度,这里BP模型的隐藏层只有一层,样本的分辨率是20×20,隐藏层的结点为64。输出层为7类,分别是数字1(英雄)、2(工程)、3(步兵)、4(步兵)、8(前哨站)、9(基地)、7(哨兵),因为使用此网络用于多分类,tanh函数在特征相差明显时的效果会更好,在循环过程中会不断扩大特征效果,所以隐藏层激活函数使用了tanh函数。整个过程如下:
(1)样本采集
我们采集了每个种类的样本图片800张,样本的亮度在一个范围之内,可以减少灯光条件对识别的影响。
(2)数据预处理
将样本处理成一个xml文件作为网络训练的输入文件。
(3)网络训练
①先设置每层神经元个数,初始化权重。
②输入训练文件。
③设置阈值、学习速率和激活函数。
④训练,达到停止训练的条件后停止。
⑤保存模型,样本测试。
(1)坐标变换
从相机中我们可以获取到目标在图像上的位置,我们通过针孔相机模型来构建这种从二维到三维的对应关系。
针孔相机模型描述了三维空间中的点的坐标与其在理想针孔相机的图像平面上的投影之间的数学关系,将相机光圈视为一个点,根据小孔成像原理来形成投影。针孔相机模型是理想化的模型,我们引入了畸变参数来修正形变,畸变参数可以在相机标定过程中求得。在针孔相机模型下,我们可以用矩阵来表示坐标系之间的线性关系,从而实现不同坐标系下的坐标相互转换。我们用到了3个坐标系:图像物理坐标系、图像像素坐标系、相机坐标系。图像物理坐标系为二维平面坐标系,用来描述投影实像中的点,以投影像中心为原点;图像像素坐标系用来描述二维图像中的点,原点一般为图像左上角并以像素为单位;相机坐标系为右手系,以相机光心为原点[3]。
根据小孔成像原理,我们可以得到相机坐标与图像物理坐标之间的关系:
其中x、y为图像物理坐标系下的坐标,X,Y,Z为相机坐标系下的坐标,fx、fy为相机焦距。
图像物理坐标系到图像像素坐标系的变换需要平移和缩放,使其原点重合单位统一,这种对应关系可以这样描述:
其中u、v为图像像素坐标系下的坐标,x、y为图像物理坐标系下的坐标,dx、dy为单位转化系数,u0、v0为图像物理坐标系原点在图像像素坐标系下的坐标。
因此,图像像素坐标写成齐次坐标形式后与相机坐标之间的线性关系可以用矩阵描述为:
两个矩阵的乘积即为相机的内参矩阵,内参矩阵与相机畸变参数可以由张正友标定法求得。但图像毕竟是二维的,想要求得三维世界中的真实坐标还需要更进一步计算。
(2)PnP解算求解坐标
为了能精准打击到敌方装甲板,需要知道敌方装甲板中心在相机坐标系下的坐标。每块装甲板上都有一对灯条,灯条的长度和灯条之间的间距是已知的。因此,可以引入第四个坐标系——世界坐标系,并以灯条矩形中心为世界坐标系的原点,根据矩形的尺寸赋给矩形四个点相应的世界坐标系下的值,从而将其视作一个PnP(Perspective-n-Point)问题。
通过PnP解算获得A、B、C三个点的相机坐标后,可以使用ICP(Iterative Closest Point)的方式迭代求解相机的位姿,最终解出旋转矩阵R与平移向量T。由于我们选定灯条矩形中心为世界坐标系的原点,因此,解出的平移向量T就是矩形中心在相机坐标系下的坐标。
(3)预判打击
预判打击需要结合相机和陀螺仪两个传感器的数据。相机获得到的目标图像经过识别和解算后,即可得到相机坐标系下目标的坐标数据,而陀螺仪则反映了当前云台的姿态。陀螺仪的零点在忽略零漂的情况下是不会发生变化的,因此,可以根据陀螺仪的角度数据将相机坐标系进行反向旋转得到一个坐标系。该坐标系除原点会随着战车移动外,各个坐标轴方向是固定不变的。
至此,已获得了一个相对静止的坐标系,通过这个坐标系即可将预判打击转换为一个运动学问题。将我方战车视为静止状态,通过观测一段连续时间中目标的位置变化即可近似计算出目标此时的运动状态(速度、加速度)。
接下来是通过当前时刻的运动状态来推算正确的弹丸落点,使得敌方目标到达该处时我们的弹丸刚好可以打击到。可以使用迭代法来求得飞行时间的近似解。将弹丸飞行至当前时刻目标位置所用的时间设为迭代初值t0并开始迭代。计算出经过t0时间后目标所处的位置p1,求得弹丸飞行至p1所用时间t1。用t1与t0作差得到时间差△t,并将△t作为本次迭代的步长。用t1加上步长得到t2,并将t2作为新的迭代初值进行下一轮迭代。当△t小于一定值或迭代次数到达上限即停止迭代,可获得最终的弹丸飞行时间tn。可以给△t乘上一个系数α,通过调节α的值来缩短迭代时间,但要注意α的取值以防发散。最后用tn求得最终的预判坐标。
能量机关的激活在RoboMaster比赛中非常重要,大幅度的攻防属性加成往往决定着比赛的胜负走向。
(1)能量机关定位圆心的识别
根据传入的类正方形的轮廓和矩形进行判别。遍历所有的轮廓和矩形,先在形态学上进行筛选,如果满足形态学条件,那么获取该矩形。在原图的对应坐标位置,截取出比该矩形略大的ROI区域,然后对ROI区域进行归一化,传入SVM进行二分类。
这里重点运用了机器学习中的SVM(支持向量机),简单应用了其二分类的功能。我们利用OpenCV中的ml库封装好的SVM类建立起一套完整的SVM的项目。首先,我们利用上面的识别部分获取样本。采集样本时便同时将其分类,以是否为正确的圆心R图像为标准,分为正负两类样本,按照1/4的比例分为测试集和训练集(此比例是参考周治华老师编写的《机器学习》一书)。其次,对样本进行归一化操作后,通过调用SVM类中的外部接口进行训练,得出训练结果xml文件。然后,通过调用预测函数对测试集进行测试,反复测试后得到最好的xml文件。
(2)悬臂击打状态的识别判定
当悬臂未发光时,该悬臂处于未打击状态;当悬臂出现流水灯时,则该悬臂处于待打击状态;当悬臂灯光常亮时,则该悬臂处于已打击状态。将已获取的圆心坐标和每一块装甲板矩形进行连线,并把这条线段四等分。在原图像上截取垂直于每一条线段,并且靠近装甲板的矩形作为待识别区域,获得该旋转矩形的外接矩形作为ROI区域。对此,ROI区域先将选装矩形外的部分填充为黑色。然后,进行预处理获得ROI区域的二值图。因为已打击的悬臂呈现常亮状态,未打击的悬臂只有中间的主区域呈现流水灯状态,二值图下两个状态的白色像素点数量具有很明显的界限。统计每个ROI区域的白色像素点数量,寻找数量最小的ROI区域。
能量机关有大小两个模式,大能量机关的旋转策略为角速度关于正弦函数变化,如下所示。
其中 spd的单位为rad/s,t 的单位为s;小能量机关的旋转策略为固定转速10rpm。
首先确定基准,以能量机关圆心R的中心点为基准点,沿图像二维坐标系的X轴正方向作射线,以此为基准线。计算出每一帧图像中待打击装甲板的中心和圆心R的连线与基准线的角度。每次处理记录上一次的角度,根据角度的变化判断出能量机关的旋转方向。特别地,要剔除掉悬臂跳变的情况,当角度变化过大时认为悬臂发生跳变现象。依然根据角度变化再计算角速度的极值,每0.1s计算一次,当极值连续固定达到一定次数,认为计算出了正确的极值。记录现在的角速度和上一次计算的角速度,判断出现在能量机关处于加速还是减速状态。根据以上给出的目标函数式反解出当前所处的时刻。然后进行决策,若是匀速,则为小能量机关,那么每一次预置固定的预判量;若是非匀速,则为大能量机关,那么就要根据计算出的实际角速度和时刻,利用给出的正弦函数式进行积分,获得角度变化。
雷达站机器人作为RoboMaster机甲大师赛中唯一的辅助类型机器人,它的任务主要是监控全场,从繁杂的信息中提取出对我方有效的信息,从而达到辅助我方取得比赛胜利的目的。
(1)数据采集和预处理
前期测试使用RoboMaster机甲大师赛官方提供的RoboMaster 2019比赛目标检测数据集,该数据集已经标注了object的name属性、armor的armor_color属性以及若干本文未使用的属性。其中name属性有5种属性值,分别为car,watcher,base,ignore,armor。armor_color有3种属性值,分别为red、blue、gray。前者用于区分机器人种类,后者区分机器人所属阵营。从中随机抽取5 000张样本作为训练集,该数据集的原始图片大小为1 920×1 080。
训练前,须将数据集图片统一修改为608×608,以提高训练速度。除此以外,还会通过去除相似图片来达到提高模型的精度。
(2)YOLOV4算法
YOLOV4网络可以划分为Backbone、Neck、Head三部分,其中Backbone采用CSPDarknet53作为骨干网络,Neck使用PANet和SPP(空间金字塔池化)来加强特征融合,而Head则沿用YOLOV3检测头。
在YOLOV4网络中,它首先会将一张图片划分成N×N个网格,如果某个机器人的中心落在某个网格内,则这个网络就负责预测这个机器人对象。每个网格需要预测M个边界框的位置和置信度,位置信息包括模型预测的对象的中心坐标及宽高aw、ah。
下一步是利用模型预测的中心坐标和宽高求出预测框的中心坐标(bx,by)及宽高bw、bh。
将bx、by、bw、bh除以对应的特征图尺寸,再乘以原始输入图片尺寸(608×608)便可得到预测的边界框在原图中的实际坐标。
预测位置和预测种类是同时进行的,每张图片划分的N2个网格都会预测一个分类值,代表的是待测物在每个边框上的概率。
现在已经预测出了N×N×M个目标窗口,再根据设定的阈值筛出一定的低概率窗口,最后利用非极大值抑制法来选择置信度高的目标窗口。
机器智能化的前提是其得具有感知能力,而计算机视觉给予了机器“看”的感知能力。本项目不仅能够完成基本的灯光和数字的识别锁定,还能进行精准的测量与打击,并且可以对目标的运动进行预判。将项目实际运用于RoboMaster机甲大师赛,有着很好的自适应性,高内聚低耦合使其更具实用性。