关于这个问题,刚好我在大学的时候,做过类似的项目,探索过一阵。
机器人实物图
传统CV范畴(其实更偏机器视觉),与之相对应的就是现在如日中天的基于深度学习的相关CV技术。当然传统的方法有传统方法所专长的领域,比如测量、定位等,机器人接球,就可以用到其中的很多技术,比如基于几何约束的双目视觉。
经典的CV方法的特点在于其简洁和可解释性,知其然也知其所以然,每一步我们都可以知道其作用是什么;但是如果是涉及到跟复杂特征提取检测相关的,那么显然上深度学习会有效许多,可以把对手工设计特征的要求,转嫁到对数据的采集标注和清洗,即便有一定的黑盒特性,但是目前DL领域各种SOTA model的效果是有目共睹的。
下面我也基于我以前做的项目进行简单地分析一下接球机器人可能用到的一些CV方法。
首先显然的,要接球,就必须知道球的位置和速度信息,也就能够对球进行检测识别。
对球的识别我们可以有很多方法去做,由于球的特征相对来说是比较简单的(有很明显的形状、颜色、纹理特征),所以这一步使用传统CV的方法就完全可以胜任了。
这里以乒乓球为例,提供一些思路:
由于我们所处三维空间,要想获取一个物体的空间坐标只靠二维图像相机是肯定不行的(目前有一些基于深度学习的RGB图像深度估计方法,但是理论上都是根据先验知识去脑补,精度在这个应用里无法达到要求)。多目视觉可以在这里提供一个很好的解决方案,实际上目前几乎所有能打球的机器人也都是采用多目相机系统来跟踪球的运动,比如新松机器人、欧姆龙的乒乓球机器人、电子科大的羽毛球机器人等等都是这个思路。
科大的羽毛球机器人视觉系统
多目视觉的意义在于,一方面可以增加感知系统监视覆盖的区域;另一方面通过两个或更多相机捕捉的同一时刻的目标位置,根据几何约束关系求解出目标的实际三维空间坐标。求解的方法一般都是根据多目视差,当然前提是要先做好相机内外参数的标定(因为现实世界里不存在理想镜头,为了提高精度需要对各种镜头畸变做预先矫正)。
镜头畸变示意图
至于相机的标定方法像是OpenCV、Halcon、Matlab等都有相关工具可以自行去了解一下。
然后是单个摄像头图像里的目标识别,在接球这个应用里面,我们可以认为摄像机是位置固定的(区别于拿着手机这样的情景),所以其实有一些很实用的方法可以用来简化模型。
比如我们首先利用进行高斯混合模型(GMM)甚至简单的差帧等方法,来进行背景去除(下一帧画面减去上一帧画面,就可以只得到图像中变化了的部分),这对于运动物体的跟踪是很有帮助的,去除了绝大部分干扰信息。接下来以筛选到的区域为核心,进行一些简单的形态学处理(腐蚀、膨胀等)消除噪点并扩大主要选取,这样就把目标搜索范围限制在了很小的局部区域内。
得到了搜索的选取ROI,就可以利用一些球的其他特征进行精确检测了,比如色彩空间、形状检测等,再结合多个相机图像的检测结果做视差计算,就可以得到球的三维空间坐标了。
当然只是这样的话还比较粗糙,tracking by detection很多时候并不可靠,指望每一帧都能成功检测到目标太理想化了。这时候有必要引入一些跟踪器方法,比如卡尔曼、光流、相关性滤波器等等,总之就是在检测丢帧期间做合理的插补,同时稳定输出。
当然这只是实现了视觉系统,要想让机器人准确接球的话,机械结构和机电控制算法也极其重要,要展开来讲的话就是个很庞大的问题了。
除了传统的CV技术,深度学习的发展其实也给这个领域带来了很多可能性。
最典型的比如人体关键点的检测和姿态识别:把机器视觉的焦点从球扩展到了包括发球的人在内。大家都知道专业的运动员是可以考观察发球动作就大致预判出球路的,而如果机器也具备这样的感知能力,无疑对于接球有极大帮助。
如果再进一步呢?不光能识别出人的姿态,甚至可以“预知”人的动作呢?
东京工业大学的研究小组就设计了一套名为“FuturePose”的系统,通过深度学习能预测 0.5 秒后对手的动作。
该方法通过残差网络来提取RGB图像特征,以估计对手的2D位置,然后将该位置输入到 LSTM中学习时序特征,并且预测未来的2D位置,通过从一个 RGB 相机捕获的图像中,从 30 fps(1帧= 1/30秒)图像中预测15帧,即0.5秒后的动作,得到下面的效果:
这篇paper的链接在这里:
https://ieeexplore.ieee.org/abstract/document/8658594
方法的实用性有待进一步检验,但是我觉得这个方向是很有创意的。