机器人操作的“圣杯问题” -- Bin Picking

来源 | 机器人学家

作者 | Yifan

                                                    图:Amazon Picking Challenge (Team MIT)

Bin Picking 是机器人操作(manipulation)中的一类经典问题,也是各种工业流程中常见的一类工序,其说白了就是使用机械臂把箱子中无序摆放的物体取出来。这是对人类来说非常简单的一件事,但对于机器人自动化却是极具挑战性的问题。箱子里的物体之间,物体和箱子之间存在大量的遮挡,这些遮挡一方面妨碍了对物体的感知,另一方面让机器人运动的碰撞检测变得很复杂。 因为其难度高,潜在应用场景多,Bin Picking长期以来有机器人操作中的“圣杯问题”之称。直到近几年来,伴随着计算机视觉和运动规划等学术界方面的进展,部分Bin Picking问题才开始出现稳定可靠的解决方案和商业化的可能,于是吸引了大批研究者,大公司和创业公司的注意。越来越多的机器人研究以Bin Picking作为背景,越来越多的大公司研究部门开始探索这方面技术落地的可能。

然而,不同Bin Picking问题难度差别很大,处理Bin Picking的方法又有很多思路差别巨大,很容易让人摸不清头绪。本文旨在梳理一下我了解的此方面研究现状,以及技术难点。希望大家交流想法。

                    主流方法

 目前绝大多数Bin Picking核心只是一件事:找到合适的抓取点(或者吸盘的吸取点)。之后具体怎么执行只是影响速度,属于运动规划问题了。

找抓取点主流的方法有三大类:Model-based,Half-model-based,以及Model-free的方法。

#1 Model-based

基于模型的方法。

此类方法要求事先知道所有物体的模型,最好是直接能拿到实物,进行拍照/扫描。方法大概分为以下三步:

扫描二维码关注公众号,回复: 4303768 查看本文章

1. 离线计算:根据Gripper类型,对每一个物体模型计算局部抓取点。

2. 在线感知:通过RGB或者点云,计算出每一个物体的类型和三位位姿

3. 计算抓取点:把每个物体的抓取点投影到世界坐标系下,然后根据其他要求(碰撞检测等)选一个最优的抓取点。

早些年,机器人抓取的文章基本都是这个套路,不过那时此类方法只能局限在非常简单的场景,比如空空的桌子上放一个茶杯之类。近年来SSD-6D之类的牛逼方法开始出现,让clutter内多个物体6D位姿识别不再是痴人说梦,完全基于模型的方法在环境相对可控的场合确实变成了最稳妥的方案。参考文章:

SSD-6D: Making RGB-Based 3D Detection and 6D Pose Estimation Great Again

https://arxiv.org/pdf/1711.10006.pdf

                             SSD6D可以同时估计多个物体的6D姿态

#2 Half-model-based

此类方法并不需要预先知道抓取的物体,但是需要大量类似的物体来训练图像分割的算法,“物体”的概念在这类方法中仍然很关键。

方法流程:

1. 离线训练图像分割算法,就是把图片里的像素按物体分类。早年此类方法一般得手标图像样本,现在大家都开始多多少少用起了仿真+渲染,效率大增。

2. 在线跑图像分割,在每个物体所属的一块像素里找normal分布合适的点作为抓取(吸取)点。

             工业分拣系统常见的Segmentation

这类方法是Bin Picking一开始流行起来的主要推力。其实是借了CS研究的东风,计算机视觉那边图像分割进展迅速,最近又有Mask CNN这样的大杀器出现,实在是不好意思不用在Bin Picking上。相比而言Robotics这边还是进展缓慢,同志们撸起袖子加油干啊

#3 Model-free

这是最晚出现的方法,此类方法并不涉及到“物体”的概念,直接从RGB或点云计算出合适的抓取点。这里仍有区分,一类是基于Geometry的方法,代表作是Andreas Ten Pas的AGILE grasp,通过一些几何约束在点云上高效sample潜在优质抓取点,然后通过supervised learning训练得到的分类器进一步分类。

                            AGILE GRASP 左图:实际场景 右图:点云和算法找到的抓取pose

另一种就是连Geometry的概念都不要的Deep一波流,端到端,Self-supervised learning。代表性的工作是Google的Arm Farm,训练从图片直接得到抓取点的策略。

                                                       Google Arm Farm

这类方法的流程非常直白:

1. 根据输入的点云/RGB图像,计算抓取点。

我个人更喜欢Andreas的方法,因为这种基于几何的方法原理清楚,就是在找点云上Antipodal的地方,而且训练成本低,能generalize到各种类似形状的物体。这就属于可以通过Engineering搞到非常高性能的方法。

这三类方法,各自有适用的场景并且都有人在用。在我看来,还看不出优劣之分。

                    意料不到的难点

应该注意的是,不同具体情景下的Bin Picking问题难度可以有天壤之别。有很多公认的难点,每多考虑一项,问题的难度就高一个层次;把所有的都考虑到,恭喜你,可以去开公司了。实验室出的工作往往是没有足够的精力去处理各种实际情况的,学校项目的性质决定了其只能在一个点深挖并回避其他问题,读paper的你需要自行判断这种方法应用到更一般情形还能不能work。

最主要的难点来自箱子里的物体。搞Bin Picking的工程师最讨厌三类物体:难看的,难抓的,以及又难看又难抓的。难看不是说丑,而是指难以被摄像头看到,比如深色物体,反射性表面,透明物体,以及网格物体。这些物体在深度摄像头下基本就是隐形的,而只基于RGB的抓取方法又还不成熟,所以在Amzaon Picking Challenge上这类物体基本都是在箱子底剩到最后的。解决方法的话,我觉得一方面是要利用好RGB所能提供的信息,在程序逻辑里考虑到有Depth看不见的情况;另一方面还是要等更好的深度摄像头,比如Intel Realsense D系列就在对深色物体的感知效果上有了巨大进步。高精度的激光扫描可以处理网格物体,但是成本比较高昂,并且仍然不太能看见反射型表面。

另一方面就是难抓的物体。作为对比,比较容易抓的是这种:

物体形状规则,并且大量存在完美的平面,这种用吸盘从上往下吸一吸一个准。然而,对任何一套Picking系统,你总能找到一些让其从物理上就束手无策的物体。比如对于gripper而言,一个倒扣的碗就是mission impossible。而对于吸盘,网格状物体就是噩梦。所以,下回去什么工业机器人展会,把你家洗菜的筛子带上,见到谁家现场展示Bin Picking就把它倒扣进箱底问能不能抓这个,我保证你半小时就会被人打出来。

                                                                 <机器人分拣.砸场子神器.jpg>

其实,最要命的还不是要处理这些麻烦的物体,而是要处理你却还预先不知道!最难的永远是“下一个”。在物流分拣之类的应用场合,几百万个商品分类,每天还有上万种新品,根本不可能全部预先建模。这就要求算法一定要能够generalize到不同的物体,并且这个generalize的范围得是可以通过工程量稳步提升的

另一个常被外行忽略的难点来自于箱子本身。事实上,箱子的形状,大小和位置都对Bin Picking系统的流畅运行有很大影响!正常人类使用的箱子对机器人其实是很不友好的,靠近拐角的物体不存在抓取点,靠近边沿的物体也让gripper的运动很受限制,一句话,抓取算法只输出一个抓取点是不够的,还需要对应的collision-free的机器人姿态。所以你会看到Google用向外倾斜呈喇叭状的箱子代替普通的垂直箱体来回避碰撞,很多抓取的工作甚至直接不考虑箱子。箱子的大小和位置则是要考虑机器人的工作空间,不合适的话轻则让运动规划算法卡在local minima里出不来,重则直接卡进奇异姿态,需要人工干预。这些对机器人控制规划算法的影响其实是一回事:你不能只用XY两个坐标来描述算法输出,理想情况下应该用关节角(6维或以上)来描述,才能真正的解决此类问题。所以实际的系统中,不论是用有模型还是无模型的方法找出一系列抓取点后,都要再通过基于模型的运动规划对其进行筛选,找出机器人能够安全执行的动作。

总而言之,搭建一个实用的Picking系统是一项浩大的工程,会遇到各式各样难以预料难以处理的困难,把系统的稳定性和速度做上去非常考验一个团队的工程能力,经验和判断力。这项工作有多难?看看Amazon Picking Challenge的比赛视频就知道了。来自世界各地顶尖高校的团队,机器人平均抓取一个物体要花几分钟的时间。Ken Goldberg提到过一个“每小时有效分拣数目”的指标,人类分拣员大约是每小时处理600个物体,几年前机器人的这项指标是个位数,Amazon Picking Challenge把这个数字推到了几十,接近一百。 三个月前Ken Goldberg自己组在其DexNet 4.0的演示中达到了平均每小时200个以上:(注意,其实进步没有看上去这么多,Dexnet4.0的任务只有抓取没有分类摆放,而且使用的物体集难度明显低了很多。)

https://v.qq.com/x/page/d1345z7b9dr.html

总之,机器人Bin Picking虽然和人有差距,但差距是在慢慢缩————

啊不对,每小时分拣600个这件事已经有人做到了,而且是华人带领的团队

https://v.qq.com/x/page/c1345771qvw.html

不仅是抓取,加上读取条形码和货架摆放,整套动作的周期只有5秒多,并且可以清空物料箱。不论从什么角度评价,视频中的演示都是卓越而惊艳的。这是一支来自北美顶尖机器人研究机构的团队,正在招人。

最后,本文除了滚动广告部分,都是我的一家之言,欢迎大家批评指正。

猜你喜欢

转载自blog.csdn.net/gotouchtech/article/details/82316864