关联比赛: IROS 2020: Open Cloud Robot Table Organization Challenge (OCRTOC)
一.赛题介绍
桌面物体整理任务是服务型机器人的一种常见应用场景,其主要任务是将桌面上随机散落的物体利用机械臂摆放到各自指定的位置上.本次比赛中,采用Realsense D435 和 Azure Kinect 相机作为感知模块,UR-5e机械臂和 Robotiq 夹爪作为执行模块,完成不同难度等级的桌面物体整理任务.
二.难点与挑战
在短时间内搭建起一套能够实现尽可能多功能的机器人系统无疑是有难度的,根据我们本次比赛的经验, 其挑战主要体现在如下三个方面:
- 感知模块:
- 本次抓取任务包含了数十个已知mesh的物体和若干未知物体,为了能够顺利完成任务,需要使用一个性能优秀的检测/分割模型. 而本次比赛官方并不会为参赛队伍提供足够数量的数据进行训练,因此如何通过有限的数据得到满足任务要求的模型成为本次比赛的第一个难点所在.
Challenge 1: 如何获得数量足够的满足训练要求的数据? - 物体的抓取和放置是一个三维空间 6 DOF 的任务, 单纯的检测分割结果仅可以用于识别和粗定位, 只有得到物体准确的 6D-Pose 信息, 才能进行抓取规划和目标位姿的放置规划.
Challenge 2: 如何获得选定物体的精确6D 位姿? - 假设我们已经得到了准确的物体 6D-Pose 结果,接下来应该考虑的是如何为 Robotiq 二指夹爪生成稳定合理的抓取点. 待抓取物体多选取于YCB数据集和常见的生活物品,其形状、尺寸各异,且在桌面上的排布随机,针对孤立物体生成的抓取点可能会和其他物体发生碰撞导致抓取失败.
Challenge 3: 如何在混乱场景下生成选定物体collision-free 的抓取点?
- 决策模块:
- 在我们检测到场景中的物体后, 需要与目标物体及位置进行比对. 由于物体是杂乱随机放置, 在实际任务中会出现以下情况:
(1) 场景中存在干扰物体, 即该物体存在于场景中但是本次任务并不需要移动它, 属于人为设置的混淆;
(2) 初始时两个物体之间存在堆叠关系, 当识别出二者时,需要先移动上方物体;
(3) 目标位置上两个物体之间存在堆叠关系, 放置时需要先放置下方物体;
(4) A物体目标位置被B物体占据, 需要先将B物体移开;
(5) 上述 4 种情况的组合.
Challenge 4: 如何实现合理的抓取/放置逻辑 - 假设我们已经成功地得到了本轮次需要抓取的物体及其对应的放置位置, 并且得到了该物体的 6D 位姿及抓取位置, 接下来需要对机械臂进行运动规划, 使其完成整个抓取/放置流程. 运动规划需要在保证机械臂与场景及场景内物体不发生碰撞的前提下, 尽可能提高运动速度, 以最大化抓取效率.
Challenge 5: 如何实现机械臂运动的motion planning
- 执行模块:
- 抓取任务中包含感知、决策、执行等多个功能模块, 而各个模块之间需要解决数据传递、流程控制等问题.与此同时, 本次比赛分两个阶段进行, 分别在官方提供的仿真平台(sapien, gazebo)以及真实机械臂场景下实现 table organization 任务. 针对两套环境的解决方案是相同的, 但是对于硬件模块的配置及控制却截然不同, 将同一套 pipeline 接入不同的硬件环境, 使其在两套环境下都能够顺利执行, 需要对代码进行大量重构甚至重新设计. 这显然不符合比赛时间限制及系统通用性的要求.
Challenge 6: 如何科学地部署机器人全流程任务
三.解决方案
针对上述问题, 我们设计并实现了一套完整的机械臂 table organization 解决方案, 并取得了较为理想的结果. 现结合上述问题介绍如下
Solving Challenge 1: BPYCV - computer vision & deep learning utils for Blender
为解决训练数据量不足的问题, 我们开发了一套基于 Blender 的仿真数据生成 & mask 标注工具. 该工具通过在 Blender 中加载物体 mesh , 并为其设置不同的背景、光照、材质等信息, 可以短时间内生成大量物体及场景, 以满足训练数据多样性的要求. 与此同时, 对于每个生成的场景, 该工具还支持一键生成指定物体的 mask 标注, 可直接用于网络的训练.\
render distance annotation & RGB image & depth created by BPYCV in a certain scene
利用该工具, 我们在数天时间内生成了上万个不同的场景, 解决了训练数据不足的问题; 且由生成数据训练得到的 det / seg 模型具有出色的泛化性.
- 该工具已在github上开源 ( **github link: Welcome to star & fork ! ** ) .
Solving Challenge 2: PVN3D - A Deep Point-wise 3D Keypoints Voting Network for 6DOF Pose Estimation
为得到物体准确的 6D Pose 信息, 我们提出了一种在单张 RGB-D 图像上利用 3D 关键点估计物体 6D Pose 的算法, 论文已收录于CVPR 2020 ( pdf_link).
不同于现有位姿估计算法中直接回归位姿参数的方法, 本文开创性地提出了利用 3D 关键点解决单目 6D 位姿估计的问题. 由于该方法充分利用了深度图像中刚性物体的几何约束信息, 可以得到更加精确的 6D 位姿, 且这种范式更易于深度神经网络的学习和优化. 该算法在 YCB 数据集和 LineMOD 数据集上的测试结果均远超现有算法, 且在本次抓取任务中也有不俗的表现.
我们将 Azure Kinect 相机或 Realsense 相机拍照得到的 RGB & Depth 图像送入网络, inference 得到物体的6D Pose, 为后续流程提供更加完备的物体信息. 该算法使得我们能够对复杂场景下随机摆放的物体进行准确的操作, 令抓取位置更加准确, 放置规划更加合理.
PVN3D Pipeline
- 该算法已在github上开源 ( **github link: Welcome to star & fork ! ** ) , 更多论文解读详情可参阅此处( Interpretion link).
Solving Challenge 3: Grasping Algorithms & Human Power
我们调研并测试了多种针对二指夹爪的抓点生成算法, 例如GPD, Dex-net等. 然而在实际测试过程中, 由于相机成像质量的原因会导致点云质量不甚理想; 且手眼标定精度也无法保证,难以利用手上眼的多角度拍照实现点云拼接. 因此, 直接使用上述算法无法得到高质量的抓点.
为解决上述问题, 我们利用 det / seg 结果和 6D Pose 结果, 结合物体的 mesh 信息, 对物体的 3D 信息进行重建, 并在此基础上应用抓点求解算法获得抓点. 与此同时, 考虑到抓点生成算法得到的抓取位置并非最优且充分的, 因此我们同样开发了一套抓点生成 / 标注工具, 用于指导并筛选最终结果.
生成的夹爪抓取位置
Solving Challenge 4: Grasping Order Algorithms
合理的抓取顺序对于复杂场景下的 table organization 任务至关重要, 涉及到多种边界情况. 为此, 我们设计了一套根据当前场景和目标场景信息, 选择本轮抓取物体 & 放置位置的规划算法.
顺序决策是一个相对独立的模块,它的主要功能是判断当前应该选择抓取哪个物体,并找到一个合适的放置位置。这个模块在初始化的时候会对桌面的大小、任务目标、可放置区域位置进行一定的处理;在对桌面上的物体进行初步识别之后,顺序决策模块得到环境点云与桌面上已识别的物体,找到最合适的一个物体,放置在最合适的位置;等待抓取完毕,成功或失败的结果都需要传回顺序决策模块,以更新相应物体的权重。
为了找到最合适的物体和最合适的位置,我们对桌面进行了一个状态维护,将桌面划分为边长2cm的网格,每个网格记录该位置1)是否是目标物体位置. 2)是否有障碍物. 3)是否是已放置完毕物体。对于是目标物体位置的网格,还需要记录目标物体的堆叠关系。堆叠关系可以通过物体目标点云的z轴最小值来判断。通过这个状态维护,我们就能找到当前需要抓取的最合适的物体,以及最合适的位置。具体流程如下图所示:
抓取顺序决策流程
Solving Challenge 5: mpl_kit Library
在抓取和放置过程中, 需要为机械臂规划出一条无碰撞的轨迹. Moveit! 是一个较为常用的工具, 但是Moveit! 中存在着一些bug, 其使用较为复杂, 定制化功能开发难度较大, 且规划出的轨迹不够合理. 因此, 在本次任务中, 我们采用了自研运动规划框架mpl_kit对机械臂进行运动规划.
mpl_kit是我们针对机械臂运动规划任务开发的一套算法库, 可以方便快捷地实现不同型号机械臂在构型空间和笛卡尔空间的运动规划. 其主要功能包括: 生成/导入机械臂及场景模型文件; config & cartesian space 下的无碰撞轨迹规划; 不同约束条件下的轨迹规划; 时间优化算法; 场景可视化…利用该框架, 我们实现了table organization任务中机械臂的运动规划, 使机械臂可以快速安全地运动到目标位置.
Solving Challenge 6: armplayer Framework
同样的, 为了实现科学合理的机械臂 table organization 流程控制及环境迁移, 我们基于 Behavior Tree 和 state machine 开发了一套用于机械臂全流程控制及任务搭建的框架. 本次比赛仿真阶段和实机阶段的所有任务流程都是基于该框架实现的.
armplayer 框架借鉴了状态机的思想, 将各个功能模块进行解耦. 基于该框架搭建的任务流程逻辑较为清晰且易于维护和修改, 可以帮助我们快速进行调试和迭代, 使得整个系统功能完备且易于维护.
四.整体流程总结
本次比赛, 我们实现的机械臂 table organization 任务中涉及到的主要思想和功能如前所述. 整体流程总结如下:
table organization pipeline
PS 团队介绍
我们团队的成员主要来自于旷视研究院机械臂团队以及香港科技大学, 研究方向着眼于机械臂相关算法在物流场景中的应用. 目前我们团队正在开放招聘, 也欢迎感兴趣的小伙伴们投递简历至邮箱: liujianran@megvii.com .