胡啸川 李泽森 杨双 罗庆勤 陈炳强
(西南民族大学电气信息工程学院,成都,610041)
目前乒乓球机器人已经有了三四十年的研究历史[1],从1983年第一款具有乒乓球轨迹追踪的机器人问世以来,世界对乒乓球机器人视觉的研究就没有停止。
乒乓球直径小、运动速度快,用乒乓球作为载体研究乒乓球机器人需要了解乒乓球的运动特性,对乒乓球运动轨迹、落点进行可靠跟踪预测。
国外对于乒乓球机器人的研究较早,有四目、双目等多种形式的视觉系统,但当时PC 硬件发展落后,图像处理速度跟不上,使得计算的乒乓球坐标和预测乒乓球的轨迹没能得到很好的保证[2]。国内在这方面研究相对较晚,尽管已经有一些性能较好的机器人可以实现多回合人机对打,但以机器视觉为基础研究乒乓球的运动识别仍有很高的研究意义。
本文采用的2+1 式的三目组合式视觉系统,使用双目作为立体匹配解析距离,单目进行乒乓球的识别追踪,最后,由PC 拟合出高精度乒乓球运动轨迹,对乒乓球落点进行预测,具有较好的稳定性和精确度。
在三目组合式视觉系统中,单目摄像头由树莓派4B控制,双目摄像头直接与MiniPC(小型主机)相连。树莓派得到的二维坐标数据会写入一个本地文件,通过UDP 传输至Mini PC,PC 将UDP(UDP 即用户数据报协议)解包与双目摄像头匹配解析的距离数据传送至C++程序中,实时解析三维坐标保存为二进制数据文件,而后Python 脚本通过读取文件中的三维坐标生成三维轨迹图,并进行轨迹预测及落点预测,最后通过USB-TTL 向下位机发送处理好的坐标数据,如图1 所示。
图1 系统总体方案
摄像头采用棋盘标定板作为标定数据来源,并准备了15 组标定图对摄像头进行标定[3]。这里对比使用OpenCV(开源计算机视觉库)标定和Matlab 标定。
OpenCV 标定程序输入参数较为复杂,为了使标定结果更加直观,本文使用了Qt(一个跨平台的C++图形用户界面应用程序开发框架)重新写了一个标定程序Stereo Calibrator(双目标定器),在图形界面下使用标定。程序运行如图2 所示。
图2 双目标定设置
图3 标定输出界面
Matlab 仿真软件进行标定如图4 所示,将Matlab 标定结果与OpenCV 标定结果进行对比和分析可知,Matlab会直接将标定的结果显示出来,依据结果可以删除一组误差非常大的数据,以减小误差。Matlab 也可以直接打印出标定矩阵的结果。
图4 相机外部参数可视化
图5 Matlab 平均投影误差
通过比对两种不同标定方法的标定结果可见,使用OpenCV 标定相较于Matlab 标定,标定精度高5%,所以笔者选择OpenCV 进行摄像头的标定。
单目摄像头对乒乓球的识别主要运用HSV 颜色识别法,得出球中心点的二维平面坐标。HSV 的特点之一是增强颜色特征,便于设置合适阈值来选择颜色。本文中,合适的H(hues,色相)为11~34,S(Saturation,饱和度)为25~43,V(Value,亮度)为46~255。[1]树莓派4B 上得到的二维坐标数据会写入一个本地文件coord.txt,脚本会主动读取本地文件,再通过UDP 传输至Mini PC,如图6 所示。
在每一帧中对合适的HSV 阈值进行处理并框选出乒乓球;找到球后,解析其二维平面坐标;最后通过UDP协议传输给双目匹配程序中。
图6 树莓派4B 流程图
BM 算法又称BM 算法或StereoBM 算法,为计算绝对误差和的一种算法,SGBM 又称StereoSGBM,为半全局匹配算法。
双目匹配BM 算法(又称StereoBM 算法),BM(Block Matching,分块匹配)实现的主要方式是SAD(Sum of absolute differences),为绝对误差和算法,是图像立体匹配中常用的初级块匹配算法,其基本运算思想是求取相对应的左右两个像素块内像素值之差的绝对值之和[4-5]。其过程分以下三步计算。
5.1.1 匹配代价计算
SAD 匹配代价为参考图像(Reference)和目标图像(Target)像素直接相减,即:
视差空间(DSI)是一个三维矩阵,定义为:
5.1.2 代价聚合
SAD 的代价聚合即是将固定窗口(Fixed Window,FW)内代价求和,公式如下。
绝对误差和(SAD):
平方差和(SSD):
截断绝对差值和(STAD):
5.1.3 视差计算及选择
本文采用最直观的WTA(赢家通吃,即择优选择,在算法里面体现为选择代价最小的视差)方式来计算视觉误差,这种方法可以很方便地直接选取使得聚合代价值为最小的视差值,直方图如图7 所示[6]。
图7 WTA 视差选择
双目匹配SGBM 算法(又称Stereo SGBM),SGBM是一种在OpenCV 中用于计算双目视觉差异图的半全局匹配算法[7]。
5.2.1 主要特点
半全局匹配的算法能够在深度不连续区域相比灰度值相减的方式有较好的效果,但与之换来的是更复杂的代价聚合,算法的复杂也会让最终程序的运行速度受到影响。
5.2.2 代价聚合及动态规划
表1 路径选择
SGBM 提出的更具体化的能量函数如公式2 所示。
惩罚项越小,该算法越能够适应视差变化小的情况,换言之,大的惩罚项能更好地使算法兼容处理非连续的视差情况,为了更真实地保护现实场景中非连续的视差情况,算法会动态调整以适应相邻像素的灰度差。
以上是单方向的DP(深度优先)方法,速度够快,但所得视差图存在条纹缺陷,所以为了得到更好的视差图,SGBM 采用了多方向搜索,如图8 所示。
图8 SGBM 多方搜索
图8左图为搜索最小代价路径Lr的单方向搜索方式,图8 右图为全方向16 条路径多通道搜索方式。
每个像素的差异值之和与其左边的像素有关,存在如下公式:
这个最小值是从4 种可能的候选值中选取的最小值:
4)前一个像素(左相邻像素)差异值取值为其他时,其最小的代价值+惩罚系数。
把每个方向的代价值累加,选取最小的差异值改为像素的最终差异值,对每个像素进行该操作后,就形成了整个图像的差异图,公式表达如下:
双目坐标的解析依赖于二维坐标,所以我们将树莓派4B 中得到的二维坐标输入到双目程序中,可以得到三维世界坐标系,这一部分均在Mini PC 上完成,如图9 所示。
图9 Mini PC 流程图
接收到三维坐标后,在绘图软件中输入数据进行绘图,得到实时绘制球形轨迹。然后通过帧差来解析速度等参数[8]。轨迹图如图10 所示。
图10 轨迹绘图结果
本团队的程序经过多线程优化,与其他未经处理的程序对比结果:在同为320*240 的分辨率下,未经处理的算法处理一帧的时间为300ms 左右,而本团队的多线程StereoBM 算法可以达到平均50 帧/s,平均每帧处理时间为20ms 左右。
图11 FPS 对比结果
在识别精度上,笔者根据项目自身的实际情况,确定了1~2m 的深度测量范围,在1~2m 的情况下,Stereo BM算法和Stereo SGBM 平均算法精度都能达到50%以上,Stereo SGBM 的精度甚至可以高达75%。而未经处理的算法精度只能达到35%左右,且深度范围仅在1m 之内。由于分辨率和焦距本身的限制,目前未能在2m~5m 的范围内得到更好的深度测量结果。
图12 各种算法的精度对比
本文创新采用2+1 式的三目组合式视觉识别系统对乒乓球位置轨迹进行研究,单目运用了HSV 颜色识别,得出球中心点的二维平面坐标,双目匹配SAD/SGBM 算法加强乒乓球位置锁定,最后拟合出高精度的乒乓器运动轨迹。
尽管本文对三目组合式视觉控制系统在乒乓球机器人上的应用中仍存在一定问题,但是笔者总结了问题和改进方法。
1)对于高速图像处理需要强大的硬件支撑,为提升响应速度,笔者做出很多调整,但对乒乓球速度仍有一定的限制要求。下一步将计划不断优化算法,以期能获得更快的识别速度。
2)对于乒乓球识别精度,当前使用的是HSV 颜色空间识别,在HSV 空间中颜色特征明显,便于特征抓取。但是在大量实验过程中,笔者发现,光照对识别影响非常大,强光会导致识别失败。下一步计划考虑使用神经网络识别乒乓球。