搜索 Unity

借助ROS 2和Unity提高机器人自主性

ROS2 photo of machine learning bot in a manufacturing environment
ROS2 photo of machine learning bot in a manufacturing environment
分享

Is this article helpful for you?

Thank you for your feedback!

我们很高兴地宣布Unity已正式支持ROS 2。强大的ROS 2框架与模拟相结合将引出大量的机器人新应用。

发源于2007年的Robot Operating System(ROS)是一个用于开发机器人应用的框架,这项最初用于促进机器人研究的发明在工业和商用机器人领域很快得到广泛采用。ROS 2在继承ROS可靠的框架基础上,更是添加了对多机器人系统、实时系统和生产环境等流行应用的支持。Unity对ROS生态系统的支持将延申至ROS 2。

现如今,机器人技术正在逐步强调“自主性”,即让机器人算法能在无人为制定严格规则的情况下自主做出决定。而更为灵活、测试更快的模拟技术将作为后盾为这一中心理念提供支持。我们开发的示例项目Robotics-Nav2-SLAM演示了怎样使用Unity和ROS 2模拟自主移动机器人(AMR)的SLAM(即时定位与地图构建)和导航功能。

ROS 2驱动现代机器人技术

尽管ROS是一个优秀的机器人原型设计框架,但它除原型制作以外缺乏必要的全面生产和部署功能,并不能满足当今的机器人开发。ROS 2的技术路线图由一个业内资深人士组成的委员会制定和维护,其宗旨明确指明要将ROS 2打造成一个适用于终端用户的框架。ROS 2将支持更多的操作系统和通信协议,并在设计时遵循了“分布式”理念。

用模拟驱动自主性

ROS 2的许多新用法大多集中在自主性方面。“自主性”意味着仅带一个状态机和一组数学公式的机器人能做出不完全一致的决定,产生不尽相同的结果。譬如,许多工业机器人时常会遇到由外部变量引起的意外情况,而自主机器人与工业机器人相比可适应时常变化的操作环境。在模拟中,机器人接受的输入数据组合可远远超出实验室环境中重现的情形。要想检验机器人能否能按预期行动,你可以使用真正的机器人在自己的迷你演练环境中进行验证,但此类测试通常不会考虑时间因素,最为关键的环境参数也经常会出现偏差。或者,大家也可以使用仅次于它的精确又稳定的利器:模拟技术。

机器人要能感知环境,在模拟中其传感器必须准确反映模拟环境的拓扑形状与物理性质。若模拟环境中还带有其它人物或机器人等代理,模拟也必须能够建立这些代理的行为模型,准确还原其感应能力、拓扑形状和物理性质。为了让机器人能充分应对所有可能遇到的情况,模拟一般需要运行许多许多次。这些要求表明,自主机器人的模拟需具备四种工业机器人所不具备的特点:灵活性、扩展性、可扩容性和逼真度,所有这些都以不牺牲性能为前提。Unity正好满足了所有这些要求,因此我们决定为平台添加更多相关功能来支持自主机器人的开发。

Unity Robotics软件包带有许多现成的接口,能让你轻松与ROS或ROS 2的交换信息。你也能用URDF Importer直接从URDF文件中导入机器人配置,在Unity高质量的渲染管线与高精度的物理模拟加持下开始训练机器人。Unity的Asset Store还售有大量现成的环境和道具,可用于补充机器人的训练环境、完善训练任务。只需几键,你搭建的模拟就可以构建并部署到Windows 10、Mac OS或Linux等任意主流操作系统。你甚至可以使用C#、Bolt可视化编程及Asset Store上的众多脚本和实用程序来根据自己的需求进一步定制模拟环境。

一键支持ROS 2

要将Unity项目移植到ROS 2很简单。ROS-TCP-Connector软件包会在编辑器中新增一个下拉菜单,允许你在ROS和ROS 2之间切换。在切换协议后,Unity将自动根据选择的信息定义和序列化协议重新编译脚本。要想检测功能的实际效果,你只需在自己的项目中亲自尝试,或下载我们的Robotics-Nav2-SLAM 示例项目。项目中包含了用Unity生成感应和测距信源所必须的组件,用于Nav2 Navigating while Mapping教程的学习。

ros2 settings
配置Unity支持ROS 2通信

本示例项目将演示如何使用Unity模拟用ROS 2运行的导航系统。自主机器人的导航概念本身并没有多大改变,其目的仍为从起点终点求得一条可行的路径。而机器人若想从所在地点到达目标地点,就必须先执行SLAM。SLAM是一组描述位置、解决“我现在在哪、我去过哪”等问题的算法。人脑无时无刻不在执行SLAM,这是我们感官和大脑信息处理流的内在组成,但对于机器人来说,在复杂多变的现实环境中精确地执行SLAM仍然是一个极具挑战性的问题。自主移动机器人到底需要怎样的信息,才能根据此前所在的地点得出自己当前的位置?这仍然是一个有待研究的课题。在一个相对固定的环境下,该问题的唯一解答办法是测试各种技术(传感器、算法等)能否持续产出精确的结果。

示例项目中包含了一个简单的仓库环境,一个带有全关节、激光雷达和电机控制的Turtlebot 3机器人模型,以及一个用于ROS 2成像、在模拟中执行Nav2与slam_toobox堆栈所需的Dockerfile。如果你从未接触过ROS 2或SLAM算法,可在Nav2的步骤式教程中学习基础知识。Github存储库中包含了详细的项目上手和运行说明,请参照说明完成项目的安装、运行。

Left: RViz display of ROS 2 messages generated in and sent by Unity. Right: TurtleBot 3 performing SLAM and autonomous navigation in Unity.
左图:由Unity生成和发送的ROS 2信息在RViz中的可视化图像。右图:TurtleBot 3在Unity中执行SLAM和自主导航。

快来加入我们吧!

不论你是初入Unity的机器人工程师,还是初次接触机器人的Unity开发者,我们欢迎大家前来尝试ROS 2集成,用Robotics-Nav2-SLAM试做自主导航。该示例只是冰山一角,有了Unity的机器人工具和众多强大的软件包,你完全可以打造更多。并且,Unity Robotics团队将继续开发、发布更多针对性功能,着重强化模拟的可扩容性和可扩展性,进一步支持日常的机器人应用。

Unity还将在今年的ROSCon上主办一场现场教学,讲解怎样在Nav2-SLAM-Example的基础上实现多个机器人的分工协作。

Is this article helpful for you?

Thank you for your feedback!