< >
Home » ROS2与Turbot3-Multi多机协同教程 » ROS2与Turbot3-Multi多机协同教程-多机行为树导航

ROS2与Turbot3-Multi多机协同教程-多机行为树导航

文章说明

  • 本教程主要介绍如何实现利用Turbot3-Multi套件进行多机行为树导航
  • 测试环境:Ubuntu 24.04 + ROS2 Jazzy

相关设备

操作步骤

  • [NUC] 关闭此前打开的ros程序,以免造成冲突
$ ./multi_scripts/multi_kill.sh
$ ./multi_scripts/server_kill.sh
  • [NUC] 启动多台机器人
# 根据你当前机器人的数量选择对应的命令
# 默认是启动三台机器人 
$ ./multi_scripts/multi_robot.sh
  • [NUC] 检查机器人是否正常启动
$ ros2 topic list
/parameter_events
/rosout
/tb3_0/battery_state
/tb3_0/cmd_vel
/tb3_0/imu
/tb3_0/joint_states
/tb3_0/magnetic_field
/tb3_0/odom
/tb3_0/robot_description
/tb3_0/scan
/tb3_0/sensor_state
/tb3_1/battery_state
/tb3_1/cmd_vel
/tb3_1/imu
/tb3_1/joint_states
/tb3_1/magnetic_field
/tb3_1/odom
/tb3_1/robot_description
/tb3_1/scan
/tb3_1/sensor_state
/tb3_2/battery_state
/tb3_2/cmd_vel
/tb3_2/imu
/tb3_2/joint_states
/tb3_2/magnetic_field
/tb3_2/odom
/tb3_2/robot_description
/tb3_2/scan
/tb3_2/sensor_state
/tf
/tf_static
  • [NUC] 启动3台机器人的初始化位姿的脚本,脚本编辑方法可参阅此教程
$ ./multi_scripts/multi_nav_init_pose.sh
  • 设置3台机器人tb3_0tb3_1tb3_2的起始点分别为(0,-0.8)(2.4,-0.8)(4.8,-0.8),方向一致

  • [NUC] 启动3台机器人的行为树导航的脚本

$ ./multi_scripts/multi_send_goal_with_bt_tree.sh

请输入图片描述

  • [NUC] 查看加载的multi_bt_tree.xml配置文件,可知机器人会统一向右移动0.8米,然后tb3_0和tb3_2会交换回到对面的起始点,tb3_1则回到自己原来的起始点
      <RetryUntilSuccessful num_attempts="3">  <!-- Retry once fail -->
        <Parallel success_threshold="3">    <!-- threshold = number of robot -->
          <RetryUntilSuccessful num_attempts="3">
            <Fallback>
              <Sequence>
                <SubTree ID="MoveRobot" namespace="Robot0" target="Robot0_target1" />
                <SubTree ID="MoveRobot" namespace="Robot0" target="Robot2_position" />
              </Sequence>
              <SubTree ID="MoveRobot" namespace="Robot0" target="Robot0_Goal_backup" />
            </Fallback>
          </RetryUntilSuccessful>          

          <RetryUntilSuccessful num_attempts="3">
            <Fallback>
              <Sequence>
                <SubTree ID="MoveRobot" namespace="Robot1" target="Robot1_target1" />
                <SubTree ID="MoveRobot" namespace="Robot1" target="Robot1_position" />
              </Sequence>
              <SubTree ID="MoveRobot" namespace="Robot1" target="Robot1_Goal_backup" />
            </Fallback>
          </RetryUntilSuccessful>          

          <RetryUntilSuccessful num_attempts="3">
            <Fallback>
              <Sequence>
                <SubTree ID="MoveRobot" namespace="Robot2" target="Robot2_target1" />
                <SubTree ID="MoveRobot" namespace="Robot2" target="Robot0_position" />
              </Sequence>
              <SubTree ID="MoveRobot" namespace="Robot2" target="Robot2_Goal_backup" />
            </Fallback>
          </RetryUntilSuccessful>    
        </Parallel>
      </RetryUntilSuccessful>

演示视频

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: none