安装 Unity Robotics Demo

  • (如果使用的是该 Github 存储库提供的 Dockerfile 则不需要执行该步)将 unity_robotics_demounity_robotics_demo_msgs复制到 Catkin 工作空间下的 src 文件夹下:
    • ROS1:从 tutorials/ros_unity_integration/ros_packages 复制
    • ROS2:从 tutorials/ros_unity_integration/ros2_packages 复制
  • 编译新的 package:
# ROS1:
catkin_make
source devel/setup.bash

# ROS2:
colcon build
source install/setup.bash
  • 在 Unity 菜单栏中,从 Robotics 进入 Generate ROS Messages... ,在 ROS Message 浏览窗口中,点击 Browse 按钮去设置 ROS message 的路径为存储库的 tutorials/ros_unity_integration/ros_packages/unity_robotics_demo_msgs 。(注:ros2_packages 的内容和 ros_packages 中的内容相同,ROS2 用户用哪个都行)

  • 在 ROS message 浏览窗口中,展开 unity_robotics_demo_msgs 的子文件夹,点击 “Build 2 msgs” 和 “Build 2 srvs” ,从 ROS .msg 和 .srv 文件中生成 C# 脚本。

  • 注:生成的文件默认存储在 Assets/RosMessages/UnityRoboticsDemo/msgAssets/RosMessages/UnityRoboticsDemo/srv 中,在 ROS1 和 ROS2 之间切换时不需要重新生成文件,因为其内容是一样的。

网络通信的定义

  • ROS_IP:运行ROS的机器、虚拟机或容器的IP地址。
    • 可以在运行 Unity 和 ROS 的计算机上设置这两个变量。下面将介绍每个设置的位置和原因的细节。
  • 两种设置方法:
    • 在 ROS 中,这些设置作为 rosparam 被设置,写在 launch 文件中或参数文件中供 launch 文件调用。
    • 在 Unity 中,通过 Robotics -> ROS Settings 可以进行设置
%%写在 launch 文件中%%
<launch>
    <param name="ROS_IP" value="127.0.0.1" />
    <node name="position_service" pkg="unity_robotics_demo" type="position_service.py" args="--wait" output="screen" respawn="true" />
    <node name="server_endpoint" pkg="ros_tcp_endpoint" type="default_server_endpoint.py" args="--wait" output="screen" respawn="true" />
</launch>
%% 在 launch 文件中加载,写在 yaml 文件中 %%
%%
params.yaml文件的内容如下:
ROS_IP: 127.0.0.1
%%
<launch>
    <arg name="tcp_ip" default="0.0.0.0"/>
    <arg name="tcp_port" default="10000"/>

    <node name="server_endpoint" pkg="ros_tcp_endpoint" type="default_server_endpoint.py" args="--wait" output="screen" respawn="true">
        <param name="tcp_ip" type="string" value="$(arg tcp_ip)"/>
        <param name="tcp_port" type="int" value="$(arg tcp_port)"/>
    </node>
    <node name="mover" pkg="niryo_moveit" type="mover.py" args="--wait" output="screen"/>
    <include file="$(find niryo_moveit)/launch/demo.launch" />
</launch>

通信的前提条件

  • Unity 和 ROS 通信的两个前提条件是:
    • 在 ROS 端的 launch 文件中设置 ROS_IP
    • 并在 Unity 端进行 Robotics -> ROS Settings 的设置。

如果使用 Docker

  • Docker 需要使用以下参数启动,以转发用于 ROS 和 Unity 之间通信的端口。
-p 10000:10000 -p 5005:5005
  • 在 ROS 端,设置 ROS_IP0.0.0.0
  • 在 Unity 端,设置 ROS_IP127.0.0.1