6、多机协作

Multiple robots

默认情况下,每个TurtleBot 4将使用相同的 topic, action, and service names进行通信。如果我们将两个默认的TurtleBot 4连接到同一网络,两个机器人的主题将相互通信,并导致不必要的行为。

本教程将介绍在单个网络上运行多个TurtleBot 4的两种主要方法。


ROS_DOMAIN_ID

ROS_DOMAIN_ID是ROS 2中用于改变ROS 2进程用于通信的端口的环境变量。这有效地使我们能够将不同的ROS 2进程从同一网络上的通信中分离出来。有关详细说明,请单击此处 here

我们可以通过为每个机器人分配一个唯一的ROS_DOMAIN_ID来利用这一点。这将确保机器人之间不会发生通信。 ROS_DOMAIN_ID可以设置为0和101之间的任何值(包括0和101)。

设置环境变量

有四个位置必须设置ROS_DOMAIN_ID环境变量:

  • Create® 3

  • RPi4 Terminal

  • RPi4 Robot Upstart Job

  • User PC

SSH连接到您的TurtleBot 4并运行turtlebot4设置工具:

turtlebot4-setup

导航到“ROS设置”菜单中的“Bash设置”,然后更改您的 ROS_DOMAIN_ID。保存设置,然后在主菜单中应用设置。

domain_id.gif
Setting the ROS_DOMAIN_ID

这将把新的 ROS_DOMAIN_ID应用于Create®3、RPi4终端和RPi4 Robot Upstart作业。

在用户电脑上,在setup.bash文件中设置 ROS_DOMAIN_ID并获取它。有关更多详细信息,请参阅Installing ROS 2

Create®3应用程序重新启动后,请尝试在PC和RPi4上调用 ros2 topic list,以确保所有主题都可见。

Namespacing

名称间距是一种在主题名称中添加前缀以对某些主题进行分组或使其唯一的方法。通过命名TurtleBot 4上的所有主题,我们可以为该机器人提供一整套独特的主题。这允许我们在同一 ROS_DOMAIN_ID上运行多个机器人。

通常使用robot的名称作为名称空间。例如,如果我们有一个名为 robot1的机器人,则名称空间的主题看起来如下:

ubuntu@ubuntu:~$ ros2 topic list /parameter_events /robot1/battery_state /robot1/cmd_audio /robot1/cmd_lightring /robot1/cmd_vel /robot1/diagnostics /robot1/dock_status /robot1/function_calls /robot1/hazard_detection /robot1/imu /robot1/interface_buttons /robot1/ip /robot1/ir_intensity /robot1/ir_opcode /robot1/joint_states /robot1/joy /robot1/joy/set_feedback /robot1/kidnap_status /robot1/mobility_monitor/transition_event /robot1/mouse /robot1/odom /robot1/robot_description /robot1/robot_state/transition_event /robot1/scan /robot1/slip_status /robot1/static_transform/transition_event /robot1/stop_status /robot1/tf /robot1/tf_static /robot1/wheel_status /robot1/wheel_ticks /robot1/wheel_vels /rosout
  • 要设置robot名称空间,请将SSH连接到TurtleBot 4中,然后运行turtlebot4设置工具:

    turtlebot4-setup

    导航至“ROS设置”菜单中的“Bash设置”,然后更改ROBOT_NAMESPACE设置。保存设置,然后在主菜单中应用设置。

    namespace
    Setting the robot namespace

    这将把新的名称空间应用于Create®3、RPi4 Terminal和RPi4 Robot Upstart作业。

    在用户电脑上, turtlebot4_desktop启动文件可以使用 namespace参数来查看特定的机器人:

    ros2 launch turtlebot4_viz view_model.launch.py namespace:=/robot1