用 Unity 教机器人看东西

机器人世界充满未知!从传感器噪音到重要物体的精确定位,机器人都迫切需要了解周围的世界,以便准确、稳健地执行任务。我们之前在 Unity 中演示了一个拾放任务,使用 Niryo One 机器人拾起一个已知位置和方向的立方体。在现实世界中,这种解决方案并不十分稳健,因为精确的物体位置很少是先验已知的。在新的 "物体姿态估计演示"中,我们将向您展示如何使用 Unity 计算机视觉感知包来收集数据并训练深度学习模型,以预测给定物体的姿态。然后,我们将向您展示如何将训练有素的模型与 Unity 中的虚拟 UR3 机械臂整合在一起,从而在具有未知和任意姿势的物体上模拟完整的拾放系统。
现实世界中的机器人经常在动态环境中工作,而且必须适应动态环境。此类应用通常需要机器人感知相关物体并与之互动。感知物体并与之互动的一个重要方面是了解它们相对于某个坐标系的位置和方向,也称为 "姿势"。早期的姿势估计方法通常依赖于经典的计算机视觉技术和定制的靶标。这些解决方案设计用于在特定环境中运行,但当其环境发生变化或偏离预期时,往往会失效。传统计算机视觉的局限性所带来的差距,正在被前景广阔的新型深度学习技术所解决。这些新方法创建的模型可以通过从大量实例中学习,预测给定输入的正确输出。
该项目使用图像和地面真实姿势标签来训练一个模型,以预测物体的姿势。运行时,训练有素的模型可以从它从未见过的图像中预测物体的姿态。通常,需要收集和标注数万张或更多的图像,深度学习模型才能充分发挥作用。在现实世界中收集这些数据既繁琐又昂贵,而且在某些情况下,如 3D 物体定位,本身就很困难。即使能够收集到这些数据并对其进行标注,这一过程也会变得有失偏颇、容易出错、繁琐且昂贵。那么,如果您想要的数据遥不可及,或者您的应用实际上还不存在这些数据,您该如何将强大的机器学习方法应用到您的问题中呢?
Unity Computer Vision 可以生成合成数据,作为满足机器学习数据需求的高效解决方案。这个示例展示了我们如何在 Unity 中生成自动标记的数据来训练机器学习模型。然后,利用机器人操作系统(ROS)在 Unity 中将该模型部署到模拟的 UR3 机械臂上,以实现对未知姿态立方体的拾放操作。

模拟器(如 Unity)是通过生成合成数据来解决数据收集难题的有力工具。如前所述,使用 Unity 计算机视觉技术,可以以最小的代价收集到大量完美标注且各不相同的数据。在这个项目中,我们收集了许多立方体在不同姿势和光线条件下的示例图像。这种场景随机化方法被称为域随机化1。更多样的数据通常会带来更强大的深度学习模型。
要在现实世界中以各种姿势收集立方体的数据,我们必须手动移动立方体并拍照。我们的模型使用了 3 万多张图片进行训练,如果每张图片只用 5 秒钟就能完成训练,那么我们需要花费 40 多个小时来收集这些数据!这还不包括需要贴标签的时间。利用 Unity 计算机视觉技术,我们可以在短短几分钟内生成 30,000 张训练图像和另外 3,000 张带有相应标签的验证图像!在本示例中,摄像机、桌子和机器人的位置都是固定的,而灯光和立方体的姿态则在每个捕捉到的帧中随机变化。标签被保存到相应的 JSON 文件中,其中姿势由 3D 位置(x,y,z)和四元数方向(qx,qy,qz,qw)描述。虽然这个示例只改变了立方体的姿势和环境光照,但 Unity 计算机视觉允许您轻松地为场景的各个方面添加随机化。 为了进行姿态估计,我们使用了一种有监督的机器学习技术来分析数据并生成一个训练有素的模型。


我们在这个项目中使用的机器人是带有 Robotiq 2F-140 抓手的 UR3 机械臂,我们使用 Unity RoboticsURDF Importer 软件包将其引入 Unity 场景。为了处理通信,使用了 Unity RoboticsROS-TCP Connector软件包,而 ROS MoveIt 软件包则负责运动规划和控制。
既然我们可以通过深度学习模型准确预测立方体的姿态,我们就可以在拾放任务中将预测的姿态作为目标姿态。回想一下,在之前的 "拾放演示 "中,我们依靠的是目标物体的地面真实姿态。这里的不同之处在于,机器人在执行拾放任务时,事先并不了解立方体的姿态,只能从深度学习模型中获得预测姿态。该过程分为 4 个步骤:
Unity 可捕捉到带有目标立方体的图像
将图像传递给训练有素的深度学习模型,该模型会输出预测姿势
预测的姿势将发送给 MoveIt 运动规划器
ROS 向 Unity 返回一条轨迹,供机器人执行,试图拾起立方体
任务的每次迭代都会将立方体移动到一个随机位置。虽然我们在模拟中知道立方体的姿态,但在现实世界中却无法获得这些信息。因此,为了给将该项目应用于真正的机器人奠定基础,我们需要仅通过感官数据来确定立方体的姿势。我们的姿势估计模型使这成为可能,在模拟测试中,我们可以在 Unity 中 89% 的时间内可靠地拾取立方体!

我们的 "物体姿态估计演示 "展示了 Unity 如何为您提供生成合成数据、训练深度学习模型以及使用 ROS 控制模拟机器人解决问题的能力。我们使用 Unity 计算机视觉工具创建了合成的标注训练数据,并训练了一个简单的深度学习模型来预测立方体的姿势。该演示提供了一个教程,指导你如何重新创建这个项目,你可以通过应用更多随机化器来扩展这个项目,创建更复杂的场景。我们使用 Unity 机器人工具与 ROS 推理节点通信,后者使用训练有素的模型来预测立方体的姿势。这些工具和其他工具为您在 Localization 探索、测试、开发和部署解决方案打开了大门。当您准备扩展解决方案时,Unity Simulation与 Localization 系统相比,既节省时间又节省资金。
你知道 Unity 计算机视觉和 Unity 机器人工具都是免费使用的吗?立即前往 "物体姿态估算演示 "开始使用它们!
既然我们可以拾取姿态未知的物体,想象一下还能如何扩展它!如果路上有障碍怎么办?还是场景中的多个对象?想想你该如何处理这个问题,并留意我们的下一篇文章!
迫不及待地想看到我们的下一篇文章!?注册后,您将通过电子邮件收到有关我们在机器人学或计算机视觉方面工作的最新信息。
您还可以在我们的Unity Robotics GitHub 上找到更多机器人项目。
如需了解更多计算机视觉项目,请访问我们的Unity 计算机视觉页面。
如果您有任何问题、反馈或建议,我们的团队将竭诚为您服务!请联系unity-robotics@unity3d.com。
引文
J.Tobin, R. Fong, A. Ray, J. Schneider, W. Zaremba, P. Abbeel, "Domain Randomization for Transferring Deep Neural Networks from Simulation to Real World" arXiv:1703.06907, 2017
J.Tobin, W. Zaremba, and P. Abbeel, "Domain randomization and Generative models for robotic grasping," arXiv preprint arXiv:1710.06425, 2017
