论文简介:
《Closing the Loop for Robotic Grasping: A Real-time, Generative Grasp Synthesis Approach》
2018年发表于Robotics: Science and Systems (RSS),作者:Douglas Morrison, Peter Corke and Jürgen Leitner
摘要:
1、提出一种实时、轻量、可进行扩展物体抓取的闭环抓取检测算法,可达到50Hz。
2、提出抓取检测的新型表示方法。
3、只以深度图为输入,直接端到端输出,不生成候选框再筛选。
4、在目标运动和机械臂控制不够精确时依然有很高的成功率。
5、在复杂几何物体上的成功率为83%,在运动着的常见物体上为88%,多个物体混乱堆叠且运动时为81%。
一、引入
为了在真实世界的非结构化环境中执行抓取和操纵任务,机器人应具备以下功能:
(1)为所有物体计算抓取姿势
(2)在动态环境中依然可工作,包括:机器人工作空间变化、传感器噪声和误差、 机器人控制的不精确、机器人本身的扰动
基于深度学习的抓取检测进展迅速,但是几多都是采用为目标识别设计的网络的改进版,对抓取候选框进行采样和排序,耗时数秒,几乎没有闭环系统,且依赖于精确的视觉传感器和机器人控制,多用于静态环境中。
本文提出的GG-CNN网络的优点:
(1)不对候选框进行采样,以深度图为输入,采用全卷积神经网络直接端到端输出每个像素上的抓取位姿。
(2)参数更少,运行时间为19ms,完全可实现闭环控制。
作者用kinova机械臂和二指灵巧手进行实验,实验抓取对象有两组,一组是8个复杂形状的3D打印件,另一组是12个常用物品。两组对象的选择分别来自《Dex-Net 2.0: Deep Learning to Plan Robust Grasps with Synthetic Point Clouds and Analytic Grasp Metrics》和《The ACRV Picking Benchmark: A Robotic Shelf Picking Benchmark to Foster Reproducible Research》、《Benchmarking in Manipulation Research: Using the Yale-CMU-Berkeley Object and Model Set.》。实验测试了两组物品在以下6种情况下的成功率:
(1)静态环境、单目标抓取、开环
(2)静态环境、单目标抓取、闭环
(3)静态环境、多目标堆叠抓取、开环
(4)静态环境、多目标堆叠抓取、闭环
(5)动态环境、单目标抓取、闭环
(6)动态环境、多目标堆叠抓取、闭环
二、相关工作
抓取未知物品:
抓取检测方法主要分为经验法和解析法。解析法使用几何、运动学和动力学的数学和物理模型计算稳定的抓取,但由于难以模仿机械手和物体之间的物理相互作用,往往无法转移到现实世界。经验法使用模型和基于经验的方法,其中一些方法将已知物体的模型与抓取点相关联,但无法检测新物体。
近年来,基于视觉的深度学习方法取得了巨大进展,其中的很多方法流程大致一样:提取候选抓取框->使用神经网络对候选框排序->得到最优抓取框->运行抓取。(上述方法多为2017年前的方法,现在的方法大多也是端到端检测)但上述流程需要精确的视觉传感器和机器人控制、完全静态的工作环境。
上述流程为开环控制,主要原因是以前的神经网络参数都为百万级,检测时间数秒。
一些方法通‘使用预处理精简候选框或将提取候选框和预测置信度同步进行’来缩减时间,但会忽视潜在的抓取位姿。
还有些方法使用回归的方法得到最优结果,但结果可能是候选框的均值且无效。
本文使用较小的网络和为每个像素都生成一个抓取位姿来解决耗时长、提取候选框的问题。
闭环抓取:
通过以来视觉反馈和闭环控制使机器人运动到指定的位姿成为视觉伺服(visual servoing),优点是不依赖精确的视觉传感器和控制即可在动态环境中执行任务。但视觉伺服只管将机器人运动到指定位姿,不管抓取。也有一些工作将闭环控制与深度学习结合起来,如《Z. Wang, Z. Li, B. Wang, and H. Liu. Robot grasp detection using multimodal deep convolutional neural networks. Advances in Mechanical Engineering, 8(9), 2016.》
比较了本文工作和其他工作在以下几方面的表现:是否有机器人抓取实验、测试物品是否来自标准数据集、是否有复杂几何物体、是否有多物品混乱堆叠测试、是否闭环、是否有动态测试、是否提供代码、训练数据集是否可获得、使用的什么基础数据集(因为有些论文采用的抓取表示方法与cornell数据集的标注方法不同,但又不想自己建数据集再标注,所以通过固定的算法将cornell的标注直接转换为自己的标注,再进行后续实验)
三、抓取表示
如上图,使用表示抓取,灵巧手伸入方向与x-y平面垂直,其中是抓取器的中心位置,Φ是抓取器沿z轴的偏转角度,w是抓取器张开的宽度,q是抓取置信度。本文从大小为H*W的深度图(相机内参已知)中得到平面中的抓取位姿:
其中是抓取中心点的像素坐标,~Φ是相机参考坐标系沿z轴的旋转角度(相机参考坐标系文中没有具体介绍,我猜测是xy轴分别于深度图的xy轴平行,z轴垂直深度图向内的坐标系),~w是抓取器的张开宽度,则~g可通过下式转化为真实世界中的抓取位姿g:
其中,tCI是从深度图平面坐标系到相机坐标系的转换矩阵,tRC是从相机坐标系到机器人(世界)坐标系的转换矩阵。
由于深度图每个点的平面坐标已知,所以接下来的工作就是:给定一个深度图,得到每个点上的Φ、w、q,这样神经网络的输入输出也明确了:输入为一张深度图,输出为三张等大小的图,对应坐标上的值分别表示旋转角Φ、宽度w、置信度q。最后置信度最大的那个位置上的Φ、w、q、坐标s就是所求的最优~g,再通过上述两个转换矩阵,就得到了机器人坐标系中的最优抓取位姿g。(上述过程就是本文中的开环检测过程,闭环检测过程略有不同,后面会讲到)
四、抓取卷积神经网络
使用L2损失函数。
A 抓取表示
网络输出三张图,大小与深度图一致,对应位置的值分别为旋转角Φ、抓取宽度w、置信度q。q的范围是[0,1],值越大表示抓取成功率越大;Φ的范围是[-π/2,π/2];w的范围是[0,150]。(后面在真正训练的时候,作者将输出都归一化为1,再通过预测结果反推出真实值,这也是常用的方法)
B 训练数据集
选用cornell为基础数据集(优点:每张图像上有多个groundTruth,缺点:量级太小),所以作者使用随机裁剪、缩放、旋转来进行数据增强,使数据集增大到8840个深度图、51100个groundTruth。
为了将cornell数据集改为适合本文抓取表示的数据集,采用了以下方法:提取cornell标注的矩形框的中间三分之一部分的矩形,将上述矩形包裹的坐标的置信度都设为1,抓取宽度w与cornell一致,旋转角Φ也与cornell一致,如下图所示。所有矩形外的区域的置信度为0,w和Φ文中没说,具体要看代码。(我认为矩形内的置信度如果取高斯分布可能会好一点,矩形中间为1,越接近矩形边缘则越小,最小值不小于0.5)。
旋转角:训练时,将旋转角Φ编码为单位圆内的两个向量sin(2Φ)和cos(2Φ),则预测值被限制在[-1,1]之间,再将预测值通过反推出真实旋转角。这样做的好处是消除数据的不连续性(没太懂,再查查)。
宽度:同样限制在[0,1]之间,再将预测值乘150反推出真实值。
输入:cornell数据集由真实相机拍摄,自带噪声,与真实测试时一致。通过opencv去除深度无效值NaN,将每个深度值减去图像所有深度值的平均值,使其值以0为中心来获得深度不变形(不懂,再查)。
C 网络结构
采用全卷积网络,全卷积网络已被证明能很好地执行计算机视觉任务。
网络最后一层卷积后输出四个等大小的图,即原来的角度Φ先输出两张图sin(2Φ)和cos(2Φ),再经过反正切公式得到一张图,最后一共三张图。
网络共包含62420个中间数,代码地址:https://github.com/dougsm/ggcnn (python、pytorch)
D 训练
数据集的80%为训练集,20%为验证集,设计了结构之后,通过改变卷积大小、步长等超参数共得到95个网络,每个网络训练100个epoch,挑选在验证集上表现最好的网络为最终网络。
网络结构如图:
五、实验配置
A 硬件
机器人:Kinova Mico 6DOF robot(机械臂)、kinova KG-2 2-fingered gripper(二指灵巧手)。二指灵巧手张开的最大宽度为175mm,抓不住高度小于15mm的物体。
相机:RealSense SR300 RGB-D,相机安装在手腕部,高度80mm,以14°角偏向灵巧手。距离物体小于200mm、物体反光、黑色时,测距会出问题。
电脑:Ubuntu 16.04、3.6GHz Intel Core i7-7700、NVIDIA GeForce GTX 1070
运行一次网络5ms,跑完整个流程(从拍摄到深度图到得出抓取位姿)19ms
B 测试对象
两组(上面有讲)。
C 抓取检测流程
深度图先剪切到300*300并用opencv去除无效值,然后送入网络,使用高斯滤波器对预测的置信度进行滤波,可以去除离群点和局部最大值,提高鲁棒性;选置信度最高的位置处的参数与为最优抓取参数,并通过转换矩阵恢复出机器人坐标系下的抓取位姿,最后机器人运行。
D 抓取运行
使用两种方法评估系统。
1、开环
相机(机械臂手腕上的相机)最开始在在桌面上方350mm处,并与桌面垂直。物体放置在相机视野内,计算得到最优抓取位姿后,机器人灵巧手移动到抓取位姿上方170mm处,垂直下降,直到达到抓取位姿或检测到碰撞。灵巧手关闭并提升,如果成功提升到开始的位姿,记这一次实验成功。
2、闭环
相机(机械臂手腕上的相机)最开始在在桌面上方400mm处,并与桌面垂直。物体放置在相机视野内,深度相机以30Hz的频率拍摄深度图,抓取检测系统实时计算抓取位姿。由于一张图像上可能会有多个最优抓取位姿,为了避免在抓取过程中,系统不断切换抓取目标,造成系统混乱,在每张深度图中选置信度最高的3个抓取位姿,并从中选择与前一帧的最优抓取位姿最接近的抓取位姿,作为下一步抓取的目标,最开始的最优抓取位姿为全局最大值。为使在距目标远时运动快,越接近目标运动越慢,设置运动速度v如下:
其中Tg0和Tf分别为最优抓取位姿和灵巧手的位姿,用(x, y, z, α, β, γ)分别表示3D坐标和欧拉角。λ是速度尺度,常量。
E 物体放置
每次实验前物体放在盒子中摇晃在倒到桌子上,机器人工作空间约250*300mm。
六、实验
具体步骤可参考论文,结果如下:
除了引入部分介绍的实验,作者通过设计不精确运动模型来测试系统在传感器和机器人控制不精确情况下的抓取成功率。由于kinova机器人的精确率很高,所以为了模仿不精确控制,设置xyz方向速度干扰矩阵:
其中,c~N(0, σ2)为不同轴之间的速度干扰比例,在每次检测到最优抓取位姿后,给最优位姿各个轴加上干扰。结果如下: