Unity物体姿态预估抓取演示,助力省时高效的机器人开发方案
机器人世界充满了未知!从传感器噪声到重要物体的精确定位,机器人迫切需要了解周围的世界,才能准确、快速地执行任务。使用Niryo One机器人拾取具有已知位置和方向的立方体在现实世界中不是很可靠,因为精确的物体位置是很少为人所知的。
在Unity全新的物体姿态预估演示中,Unity将向大家展示如何使用Unity计算机视觉感知包收集数据并训练深度学习模型从而预测给定对象的姿态。之后Unity还将展示如何将训练好的模型与Unity中的虚拟UR3机械臂相结合,以在未知和任意姿态的对象上模拟完整的拾取和放置过程。
我们知道现实世界中的机器人经常在动态环境中运行,并且必须适应动态环境。这种应用通常需要机器人感知相关物体并与之互动。感知物体并与之互动的一个重要方面是理解它们相对于某个坐标系的位置和方向,也可以称为它们的“姿态”。早期的姿态预估方法通常依赖于经典的计算机视觉技术和定制的基准标记。这些解决方案是为在特定环境中运行预估而设计的,但当环境发生变化或偏离预期值时,这些解决方案就发挥不了作用了。传统计算机视觉的局限性所带来的差距正在被极具潜力的新的深度学习技术所解决。这些新方法通过从许多例子中学习,创建出可以预测给定输入的正确输出的模型。
该项目使用图像和地面真实“姿态”标签来训练模型以预测对象的姿态。在运行时,经过训练的模型可以从一幅从未见过的图像中预测出物体的姿态。通常,为了使深度学习模型充分运行,需要收集和标记数万幅或更多的图像。这种数据在真实世界中的收集是乏味、昂贵且耗时费力的,并且在某些情况下,如3D对象定位等。即使可以收集和标记这些数据,整个过程也可能是不准确、易出错的。那么,当我们想要的数据对于应用程序来说遥不可及或实际上并不存在时,我们该如何应用强大的机器学习方法来解决问题呢?
Unity的计算机视觉系统允许我们生成合成数据,作为满足机器学习数据需求的高效解决方案。这一案例展示了如何在Unity中生成自动标记的数据来训练机器学习模型。然后,将该模型在Unity中使用机器人操作系统(ROS)部署在模拟的UR3机械臂上,使得机器人能够精确地拾取和放置具有未知姿态的立方体。
生成合成数据
随机生成的姿势和环境照明特写
Unity的模拟器是通过生成合成数据来解决数据收集问题的。使用Unity计算机视觉,可以轻松的收集大量完全标记和变化的数据,如图所示。在这个项目中,我们收集了许多不同姿势和光照条件下的立方体示例图像。这种随机处理场景的方法被称为领域随机化。更多样的数据通常会造就更强的深度学习模型。
为了在现实世界中以各种姿态收集立方体的数据,我们必须手动移动立方体并拍照。我们的模型使用了3万多幅图像进行训练,因此如果我们能够以每幅图像在5秒内完成的速度进行训练,我们将需要40多个小时来收集这些数据!而这时间还不包括需要进行标注的时间。使用Unity计算机视觉系统,我们可以在几分钟内生成3万个训练图像和另外3万个带有相应标注的验证图像!在此案例中,摄像机、桌子和机器人的位置是固定的,而照明和立方体的姿态在每个捕获的帧中随机变化。他们的标签被保存到相应的JSON文件中,在该文件中,姿势由3D位置(x,y,z)和四元数方向(qx,qy,qz,qw)所表示。虽然这个例子只改变了立方体的姿态和环境照明,Unity计算机视觉允许我们轻松地添加随机场景的各个方面。为了执行姿态预估,我们使用监督机器学习技术来分析数据并生成训练模型。
利用深度学习预测姿态
用于姿态估计的深度学习模型体系结构
在监督学习机制中,模型将学习如何基于训练一组输入和相应的输出、图像以及姿态标签来预测特定的结果。几年前,一个团队的研究人员提出通过卷积神经网络(CNN)可以预测物体的位置。出于对立方体的3D姿态的兴趣,我们扩展了这项工作,将立方体的方向扩展到网络的输出中。为了训练模型,我们最小化了预测姿态和地面真实姿态之间的最小平方误差与L2距离。经过训练,模型预测立方体的误差位置在1厘米以内,方向在2.8度(0.05弧度)以内。现在让我们看看这是否足以让我们的机器人成功执行取放任务!
机器人系统中的运动规划
姿态预估工作流程
在这个项目中我们使用的机器人是一个UR3机械臂,以及一个2F-140抓手。使用Unity机器人技术的URDF进口商包将虚拟模型带入到Unity场景之中。为了处理通讯问题,当机器人操作系统(ROS)动作包处理动作计划和控制时,Unity机器人的ROS-TCP连接器开始工作。
现在,我们可以用深度学习模型准确地预测立方体的姿态,我们可以在拾取和放置任务中使用这个预测的姿态作为目标姿态。回想一下之前的拾取放置演示,我们依赖于目标物体的地面真实姿态。这里的不同之处在于,机器人用没有使用先验知识,仅从深度学习模型中获得预测的姿势。该过程有4个步骤:
1、目标立方体的图像由Unity捕获
2、图像被传递给训练好的深度学习模型,该模型输出预测的姿态
3、预测的姿态被发送到运动规划器
4、ROS返回一条信息给Unity,让机器人执行,机器人试图捡起立方体
在任务的每次迭代都会看到立方体移动到一个随机的位置。虽然我们知道立方体在模拟中的姿态,但在现实世界中这些信息对我们并没有什么益处。因此,为了给将这个项目转移到一个真正的机器人上,我们需要根据感官数据来确定立方体的真实姿态。Unity的姿态预估模型使这一想法成为可能,在Unity的模拟测试中有89%的时间机械手臂可以可靠地拾取立方体!
结论
在Unity使用姿态预估的拾取和放置
我们的物体姿态预估演示展示了Unity如何为用户生成合成数据、训练深度学习模型以及使用ROS控制模拟机器人解决问题。我们通过使用Unity的计算机视觉工具来创建合成、标记的训练数据,并训练一个简单的深度学习模型来预测立方体的姿态。
用户可以通过应用更多的随机化选项来创建更复杂的场景并扩展项目。我们使用Unity的机器人工具与ROS推理节点进行交流,ROS推理节点使用训练好的模型来预测立方体的姿态。这些工具为用户在本地探索、测试、开发和部署解决方案开辟了新的出路。当然Unity模拟系统与本地系统相比,也更加省时、省钱。