图: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. 离线计算:根据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姿态
此类方法并不需要预先知道抓取的物体,但是需要大量类似的物体来训练图像分割的算法,“物体”的概念在这类方法中仍然很关键。
方法流程:
1. 离线训练图像分割算法,就是把图片里的像素按物体分类。早年此类方法一般得手标图像样本,现在大家都开始多多少少用起了仿真+渲染,效率大增。
2. 在线跑图像分割,在每个物体所属的一块像素里找normal分布合适的点作为抓取(吸取)点。
工业分拣系统常见的Segmentation
这类方法是Bin Picking一开始流行起来的主要推力。其实是借了CS研究的东风,计算机视觉那边图像分割进展迅速,最近又有Mask CNN这样的大杀器出现,实在是不好意思不用在Bin Picking上。相比而言Robotics这边还是进展缓慢,同志们撸起袖子加油干啊
这是最晚出现的方法,此类方法并不涉及到“物体”的概念,直接从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的任务只有抓取没有分类摆放,而且使用的物体集难度明显低了很多。)
总之,机器人Bin Picking虽然和人有差距,但差距是在慢慢缩————
啊不对,每小时分拣600个这件事已经有人做到了,而且是华人带领的团队
不仅是抓取,加上读取条形码和货架摆放,整套动作的周期只有5秒多,并且可以清空物料箱。不论从什么角度评价,视频中的演示都是卓越而惊艳的。这是一支来自北美顶尖机器人研究机构的团队,正在招人。
XYZ Robotics由周佳骥(CMU计算机学院机器人系博士),俞冠廷(MIT电子工程与计算机系博士)和邢梁立博(北大经济学院硕士) 共同创立。公司位于中国上海及美国波士顿。周佳骥和俞冠廷包揽了2016年ICRA全会最佳论文和IROS全会最佳论文提名,两会均为机器人学界规模最大的会议。俞冠廷作为Team MIT-Princeton的技术架构总负责人,在2015-2017年Amazon Robotics Challenge中稳居前三,并且获得2017年Stowing Task冠军。公司致力于研发仓库和分拣中心所需的机器人操作,3D视觉等相关人工智能核心技术,并提供商业解决方案。公司已获得由创新工场领投,New Wheel Capital和周佳骥CMU博士导师, 现任Aurora CTO的Drew Bagnell教授参投的种子轮投资。公司寻求志同道合,热爱技术的工程师一起参与攻克难题,打造全方面超越人工劳动力的机器人系统。有兴趣者请联系
career@xyzrobotics.ai
1. 机电一体化工程师:
工作职责:
- 用于高速抓取各种仓库物品的柔性末端执行器(吸盘和夹爪机构设计)
- 极简主义机动结构设计,注重稳定性和走线细节设计
- 机器人单元设计(连同周边自动化设备如传送带等)
任职要求:
- 三年以上一线机器人,自动化设备设计从业经验
- 丰富气动装置和连杆设计设计经验
- 部件鲁棒性分析经验
- 精通CAD建模
- 熟悉加工制造设备:铣床, 3D 打印机, 激光切割机, 水刀切割机, CNC设备等
加分项:
- 有机器人比赛经验
- 工业机器人、夹具等硬件开发经验
2. 软件系统工程师:
工作职责:
- 开发机器人软件系统的单元测试框架
- 软件系统架构,编译优化,搭建持续集成系统
- 开发logger和运行数据可视化工具
- 开发低延迟,确定性序列的消息传递系统
任职要求:
- 计算机,电子工程等相关专业本科学历
- 大型软件开发工作经历
- 扎实C++, Python技能,熟悉软件设计架构
加分项:
- 有ACM-ICPC编程比赛, 机器人比赛或大型硬件软件集成系统开发的经验
- 深入了解发布/订阅系统和共享内存消息队列管理
- 深入了解ROS
3. 机器人算法工程师
工作职责:
- 负责开发快速稳定的无碰撞时间最优机械臂操作轨迹生成的算法
- 负责抓取动作规划
任职要求:
- 机器人,机械工程,电子电气,计算机等相关专业的硕士或博士毕业生
- 精通刚体和串联机器人动力学
- 熟悉带约束条件的几何路径规划算法
- 了解碰撞检测和几何表示
加分项:
- 熟悉基于优化的运动规划
- 熟悉力阻抗控制
- 了解抓取规划和力学分析
4. 3D视觉算法工程师:
工作职责:
- 负责机器人操作的3D感知算法的研发
任职要求:
- 机器人,计算机等相关专业的硕士或博士毕业生
- 精通C++编程技巧并有相关软件工程项目经验
- 有相机内外参矫正的经验
- 有丰富的RGB图像和点云数据处理经验,例如位姿估计,多视几何视觉等。
加分项:
- 熟悉OpenCV和PCL
- 熟悉计算机图形学和3D建模, 渲染等
5. 深度学习工程师
工作职责:
- 开发应用于机器人操作的高精度识别与抓取规划模型
任职要求:
- 计算机,机器人等相关专业的硕士和博士毕业生,有丰富项目经验的本科毕业生
- 深入了解至少一种主流深度学习框架: Pytorch, Tensorflow, MXNet等
- 精通基于深度学习的目标识别和物体分割架构,如FCN, Mask-RCNN等
- 有GPU编程的项目经验,熟悉Cuda, OpenCL等
加分项:
- 有RGBD网络架构设计经验
- 了解位姿估计,多视几何
- 有图形学渲染的经验
最后,本文除了滚动广告部分,都是我的一家之言,欢迎大家批评指正。
本文由微信公众号 机器人学家 原创,作者Yifan。
转载请联系我们获得许可即可,不尊重作者劳动成果的行为会被举报。
手机长按下图二维码即可关注。