李凯强,沈建新
(南京航空航天大学 机电学院,南京 210016)
近年来,桌上冰球机器人、羽毛球机器人、乒乓球机器人的相继出现,体现了人机互动在人工智能领域的重要性,已逐渐成为目前的热点研究方向.机器人的工作原理大致相同:机器人通过图像采集系统,快速检测到运动目标的具体位置和运动状态,并实时的对运动目标实现击打.桌上冰球机器人是在二维平面内工作,对本文算法的验证较为简单,故而本文选取桌上冰球机器人作为算法的应用对象.冰球机器人通过图像采集系统获得冰球滑行过程中的位置信息并对其轨迹进行提前预测,等到冰球滑行到机器人的攻击范围内,通过伺服控制系统操纵机械臂,对冰球实现击打.由于冰球滑行的速度非常快,这就对运动目标预测算法提出了较高要求.由实际工程测试知道,算法运行时间在30 ms内时,冰球机器人才能实时挡住冰球,并有时间进行击打操作.对于运动目标的轨迹预测算法,目前应用最多的是卡尔曼滤波算法,使用卡尔曼滤波算法对观测到的轨迹信息进行滤波即可估计出运动目标的运动速度,用以预测轨迹,但当运动目标发生突变如碰撞后运动方向改变,可能会导致运动目标丢失.基于受力分析的运动建模方法目前应用也十分广泛,但其经常应用于无碰撞或碰撞发生后的轨迹预测情况[1].考虑到算法运行速度的问题,本文通过帧间差分结合碰撞算法,在冰球与桌边碰撞前对冰球目标轨迹进行预测,提高了算法的运行速度,满足实时性的要求.
常用的运动目标检测算法主要有光流法、帧间差分法和背景差分法三类.光流法是利用目标的矢量流特征[2],如大小和方向等来检测运动区域,其主要优点在于能够检测出独立的运动对象,而不需预知场景的任何信息;缺点是大多数光流方法的计算比较复杂,且抗噪性能差,不能够快速检测到运动目标.背景差分法是目前目标检测中最常用的方法之一[3,4],它将图像分为背景和前景,对背景进行建模,然后用当前帧与背景图像的差分来检测运动区域.该方法能够得到比较精确的运动目标信息,但对于动态场景的变化,如光照和外来无关事件的干扰特别敏感,因此在实际应用中需要加入背景图象的更新机制,降低了算法的运行速度.帧间差分法是在连续的图像序列中两个或三个相邻帧间,采用逐像素的差分并阈值化来提取出图像中的运动区域,它能较快地检测出视频图像中发生变化的部分[5–8].由于连续两帧图像之间的时间间隔较短,差分图像受光线、气候等环境因素变化的影响较较小,因此它具有很强的自适应性.但是如果目标速度过慢,则会造成过度覆盖,使检测的运动目标不够完整.
对运动目标冰球来说,其运动速度很快,满足了帧间差分法对运动速度的限制要求.又由于差分图像受光线、气候等环境因素的影响较小,所以当应用帧间差分法去检测冰球目标,能使运动目标检测算法具有更好的稳定性,并且帧间差分法能够快速地检测出冰球运动目标.
本算法是在VS2010+OpenCV平台上编写运行的.首先从图像采集系统采集的序列图像中读取两张相邻帧图像,并将这两张相邻帧图像分别用Ik+1(x,y)和Ik(x,y)表示.然后,用灰度函数 cvtColor();将两张相邻帧图像转化成灰度图.其次,把得到的两张相邻帧灰度图进行差分运算如公式(1),得到差分图像DK(x,y),如图1所示.
图1 帧间差分图像
为清晰明确的显示冰球目标,我们将所得到的差分图像进行二值化运算,其算法如公式(2),得到二值化的目标差分图如图2.
其中,T是二值化时所选取的阈值,其值一般由实际场景决定,本文中选取T=50.
图2 差分图像二值化
为找到冰球的具体位置,我们要用findContours()函数去查找图像中所有轮廓.从图2中可以看到冰球位置和人手的干扰噪声,为准确的找到冰球位置,需要去掉噪声影响.首先,从图2中可以知道,冰球的面积大于噪声的面积且人手的干扰噪声只位于图像最左侧,所以在这里本文设置面积阈值area结合位置阈值center.x来除去噪声干扰,面积阈值area可以除去所有面积小于冰球目标的噪声,位置阈值center.x是所查找的轮廓中心在像素坐标系中横坐标的位置.由程序测试知,当面积阈值area大于100,位置阈值center.x大于150的时候,只选中冰球目标.对于冰球的具体位置我们找的是它的球心坐标,而对于快速滑行中的冰球来说,检测到的冰球目标会是一个椭圆轮廓,其有大部分圆的特性,且其最大外廓直径与原冰球目标直径相比基本保持不变,所以这里我们用OpenCV自带的最小外接圆函数minEnclosingCircle(contours[i],center,radius);去拟合图像中选中的椭圆轮廓,拟合结果如图3.
图3 冰球轮廓最小外接圆
最小外接圆的圆心,即为冰球在像素坐标位置的球心坐标位置,将其圆心和半径存储起来,如图4所示为所检测到的冰球的位置信息.
图4 冰球在像素坐标中的位置
冰球滑行过程中会与桌边产生碰撞,从而改变其原有的运行轨迹,增加了冰球轨迹预测的难度.针对这一问题,采用ANSYS/LS-DYNA显示非线性动力分析软件进行仿真模拟[9,10],建立冰球碰撞轨迹预测模型.通过仿真模拟获得实验数据,并用MATLAB对获得的数据进行数据拟合[11],从而得到了一种碰撞函数关系作为冰球碰撞过程的算法.研究主要针对两种运动状态:一种是以冰球的运动速度大小为变量,保持碰撞前冰球的运动速度方向与桌边的夹角不变;另一种是保持冰球的运动速度大小不变,只改变冰球的运动方向与桌边的夹角.
对于冰球与桌边碰撞角度不变的运动状态,通过改变自变量速度的值,来获得碰撞后冰球的运动状态,其实验结果如表1所示.
表1 角度不变,改变速度大小 (单位:m/s)
对于速度大小不变的运动状态,通过改变冰球与桌边的碰撞角度,来获得碰撞后冰球的运动状态,设定冰球速度恒为0.4 m/s,其实验结果如表2所示.
表2 速度大小不变,改变角度 (单位:m/s)
如表2中X,Y的数据值所示,所采集的数据中当速度方向沿坐标轴正方向,则速度为正,否则速度为负.Y方向的速度均为负值,表示冰球在Y方向的速度沿Y轴负方向.这里的X、Y坐标轴并不是像素坐标系的坐标轴,而是建立的碰撞仿真模型中的坐标轴.由于研究对象是速度矢量,这里并不影响结果.
为了得到碰撞前后速度之间的关系,分别对X轴方向和Y轴方向的速度分量进行分析.将上述仿真实验中获得的碰撞前和碰撞后的速度数据进行拟合[10],从而得到一种简单的函数关系,作为碰撞模型的碰撞预测算法.通过观察相关系数(R-square)、和方差(SSE)及均方差(RMSE)的值,来判定该碰撞预测算法的可行性.
如图5,6所示,分别为以X轴、Y轴方向碰撞前速度Vx、Vy为自变量,以X轴、Y轴方向碰撞后的速度V_x、V_y为因变量,进行数据拟合的显示图像.
图5 X 轴方向速度拟合
图6 Y 轴方向速
如表3所示,为经过MATLAB拟合的结果,从而得到碰撞算法的函数关系式如下:
表3 X 轴、Y 轴方向速度拟合结果
X轴方向速度函数关系式:
Y轴方向速度函数关系式:
上述(3)、(4)式中Vx和Vy分别表示碰撞前冰球在X轴方向和Y轴方向上的速度,V_x和V_y分别表示碰撞后冰球在X轴方向和Y轴方向上的速度.由于相关系数 (R-square)的正常取值范围为[0,1],越接近 1,表明模型函数对数据拟合得越好.和方差(SSE)及均方差(RMSE)的值越接近0,说明模型函数拟合的越好,数据预测也越成功.在表3的拟合结果中,上述两式的相关系数 (R-square)分别为:0.9994 和 0.9998,和方差(SSE)与均方差(RMSE)的值也近乎为0,所以本模型算法的建立能够很好的预测碰撞后冰球的运动状态.
本文运用帧间差分结合碰撞算法,使冰球的运行轨迹只与冰球的初始运动状态有关,算法在处理到前几帧便可以预测出冰球运行到机器人攻击点的最终位置,极大地缩短了冰球轨迹的预测时间,使机器人能够有充足的时间对冰球进行击打,满足了机器人实时性的要求.通过采集几组实际工程中连续帧图像来验证本文算法,将预测位置与实际检测位置的差值P与冰球直径D作对比,且由于机器人手柄直径大于冰球直径,所以若P<D,则机器人能够挡住并实现对冰球的击打,以此验证本文算法切实可行.
实验中所建立的坐标系为像素坐标系,其整体尺寸为 6 94×370,数值均为像素坐标值[12].由于本文主要解决算法运行速度慢的问题,所以应该尽可能地在检测到冰球的前几帧时就能够预测出冰球到达机器人攻击范围内的目标位置 (XL,YL).该目标位置是根据机器人的攻击范围合理的设定了一个X方向的阈值XL,本文根据实际情况取XL=500,对于预测目标只需要求出YL的值即可预测到目标位置.本文用帧速表示冰球的速度,通过帧间差分检测,可以得到冰球在像素坐标中的具体位置I(x,y),冰球在像素坐标中的半径R,检测出R=15.
冰球在桌面上运行的轨迹主要分为两种:一种是不与桌边发生碰撞的滑行;另一种是滑行过程中与桌边发生碰撞,改变了其原有的运动轨迹.针对这两种情况,本文用帧间差分和碰撞算法相结合的方法去进行轨迹预测实验,其具体算法运行流程图如图7所示.
这种情况对冰球轨迹的预测相对来说较为简单,只需要知道冰球滑行的初始速度就能够预测出冰球滑行到机器人攻击范围内的具体坐标位置 (XL,YL),并提前将这个坐标位置发送给机器人,以实现对运动目标冰球的击挡.
3.1.1 滑行中无碰撞的轨迹预测算法
如图8所示,为无碰撞时冰球轨迹预测示意图.本文用帧差法第一次检测到冰球位置I1(x1,y1),第二次检测到冰球位置为I2(x2,y2),则冰球的初始速度为:
图7 算法运行流程图
图8 无碰撞轨迹预测示意图
其中,Vx为冰球在X方向上的帧速,Vy为冰球在Y方向上的帧速.
对于需要预测的目标位置 (XL,YL)来说,由于XL=500,则冰球从第二次检测位置运行到该目标位置所需要的时间T为:
由式(8),可以计算出冰球滑行到机器人攻击范围内的具体坐标位置(XL,YL).
3.1.2 无碰撞的轨迹预测实验验证
如图9,10为检测到冰球相邻两帧的位置,根据算法判断此时冰球与桌边不发生碰撞,其具体滑行轨迹如图11所示.
图9 检测到冰球位置 (一)
图10 检测到冰球位置 (二)
图11 无碰撞时冰球目标轨迹
将图9,10中所获得的像素坐标值带入轨迹预测公式(5)至公式(8),得到预测目标位置为(500,157.727),对比图12中用帧差法检测的实际最近目标位置(495,155)(因帧差法限制,检测不到横坐标为500的位置,故取其最邻近位置),由于冰球直径为D=2R=30>2.727,所以冰球机器人能够挡住冰球,该预测算法能够准确预测冰球轨迹.
图12 检测到实际目标位置
当冰球与桌边发生碰撞时,其情况更为复杂.首先要根据检测到的冰球目标,与桌边哪一侧碰撞,并预测到碰撞点的位置.其次根据碰撞点的位置结合碰撞算法,预测出冰球滑行到机器人攻击范围内的具体坐标位置(XL,YL).
3.2.1 滑行中有碰撞的轨迹预测算法
如图13所示,为冰球轨迹预测示意图,与无碰撞时一样先用帧差法测到前几帧中冰球位置为I1(x1,y1),I2(x2,y2),求出冰球在碰撞前的速度为:
其中,Vx为冰球在X方向上的帧速,Vy为冰球在Y方向上的帧速,带入式(3)、(4)可以求出碰撞后的速度V_x、V_y的值.并且通过判断Vy的方向,知晓撞向桌边的哪一侧.
图13 冰球轨迹预测示意图
(1)冰球在Y方向上的帧速沿负方向
当冰球在Y方向上的帧速为负值时,Vy沿负方向,冰球从第二次检测位置到达碰撞点的时间T1为:
到达碰撞点时,冰球的坐标位置为 (x0,y0),其中y0=R,x0为:
冰球从碰撞点到预测目标位置所用的时间为T2,其值为:
由此可以求出冰球到达机器人攻击范围内的目标位置(XL,YL),其中XL=500,YL的值则为:
(2)冰球在Y方向上的帧速沿正方向
当冰球在Y方向上的帧速为正值时,Vy沿正方向,冰球从第二次检测位置到达碰撞点的时间为:
同理可以求出冰球到达机器人攻击范围内的目标位置(XL,YL),其中XL=500,YL为:
3.2.2 碰撞轨迹预测实验验证
如图14,15为检测到的碰撞前冰球相邻两帧的位置,根据算法判断此时冰球与桌边发生碰撞,其具体滑行轨迹如图16所示.
图14 检测到冰球位置 (一)
图15 检测到冰球位置 (二)
图16 碰撞时冰球目标轨迹
将图14,15中所获得的像素坐标值带入轨迹预测公式 (9)~公式 (1 4),得到预测目标位置为(500,156.693).对比用帧差法检测到的实际目标位置,如图17,因为冰球直径D=2R=30>6.693,所以机器人能够成功挡住冰球,由此也验证了本文算法的可行性.
图17 实际冰球位置
为验证本文算法的快速性,本文用GetTickCount()函数来记录系统运行算法的时间,该函数可以返回从算法启动到结束所经过的毫秒数,精度非常高.如图18所示,本文算法运行时间为 16 ms<30 ms,完全能够满足机器人对目标跟踪预测算法快速性的要求.
图18 算法运行时间
本文通过帧间差分法快速找到冰球目标,再结合碰撞算法,对冰球轨迹进行预测.算法仅通过两次帧间差分,就能够预测出运动目标的位置信息,满足了冰球机器人对算法快速性的要求,使冰球机器人能够成功挡住冰球,并且有充足的时间进行击打操作.相对于传统的运动目标跟踪预测算法,本文算法对于运动目标的跟踪预测速度更快,实时性更好.对于算法速度要求高的工程性问题,本文算法具有很高的参考价值.