一个新的仿真方案之ROS2 For Unity
-
推荐语:ROS2 For Unity是一个高性能的通信解决方案,以ROS2 "原生 "方式连接Unity3D和ROS2生态系统。
地址:https://github.com/RobotecAI/ros2-for-unityRos2 For Unity
ROS2 For Unity是一个高性能的通信解决方案,以ROS2 "原生 "方式连接Unity3D和ROS2生态系统。通信不是像其他几个解决方案那样的桥接,而是使用ROS2中间件栈(rcl层及以下),这意味着你可以在你的模拟中拥有ROS2节点。
这个模块的优点包括。- 高性能--与桥接解决方案相比,有更高的吞吐量和更低的延迟。
- 你的模拟实体是真正的ROS2节点/发布者/订阅者。它们将正确使用命令行工具,如
ros2 topic
。它们遵循QoS设置并可以使用ROS2的native time。 - 该模块提供了抽象和工具,可以在你的Unity项目中使用,包括转换、传感器接口、时钟、被MonoBehavior包裹的旋转循环,处理初始化和关闭。
- 支持所有标准的ROS2消息
- 自定义消息在构建时自动生成,使用标准的ROS2方式。生成和使用它们是很简单的,不需要手工定义
.cs
等价物。 - 该模块被包装成一个Unity的asset。
平台
支持的操作系统。
- Ubuntu 20.04 (bash)
- Windows 10 (powerhell)
支持的ROS2发行版。
- Foxy
- Galactic
经测试的Unity3D版本:2021.1.7f1。
仅适用于Windows,该资产可以以两种方式准备。
- 独立的(在目标机器上不需要安装ROS2,例如你的Unity3D模拟服务器)。所有需要的依赖都已安装,例如可以作为一套完整的Unity3D插件使用。
- 覆盖(假设目标机上已有(支持)ROS2安装)。只有资产库和生成的信息被安装。
发布
快速启动的最好方法是使用我们的版本。
你可以下载预先建立的版本的资产,支持两个平台和特定的ros2和Unity3D版本。
构建
注意:该项目将把
ros2cs
拉入工作区,它也独立运作,因为它是一个更通用的项目,针对任何C#/.Net
环境。
它有自己的README和脚本,但对于构建Unity asset,请使用本文档中的说明和脚本,除非你也想运行ros2cs
的测试或例子。请看特定操作系统的说明。
使用方法
- 执行操作系统特定的readme中描述的构建步骤或下载预构建的Unity包。不要为ros2-for-unity或ros2cs提供源代码。
- 打开或创建Unity项目。
- 在菜单栏(Unity窗口的顶部)进入Assets。
- 选择 "导入包"→"自定义包"。确保资产名称是Ros2ForUnity,并且直接在Assets文件夹中。
- 在文件浏览器中,选择由
create_unity_package
脚本建立的.unitypackage文件(默认位于install/unity_package
中),并按照屏幕上的指示操作。 - 创建一个包含
ROS2UnityComponent.cs
的顶层对象。这是 "ROS2 For Unity "的中心Monobehavior,管理所有的节点。详情请参考类文件。 - 将示例脚本添加到层次标签中的任何对象,例如,将
ROS2TalkerExample.cs
拖到检查器标签中的对象。 - 在层次结构标签中选择另一个对象,用
ROS2ListenerExample.cs
添加重复上一步。 - 一旦你在Unity中启动项目,你应该能够在Unity编辑器的控制台中看到两个节点在互相交谈,或者使用
ros2 topic list
和ros2 topic echo /chatter
来验证ros2通信。
Acknowledgements
ROS2 For Unity的开源版本是通过与Tier IV合作实现的。由于Tier IV的鼓励、支持和需求驱动,该项目在可移植性、稳定性、核心结构和用户友好性方面得到了极大的改善。
-
目前Unity有官方解决方案,详见:https://fishros.org.cn/forum/topic/1844/分享-使用unity进行机器人的仿真/1