turtlebot3-burger_150.png
turtlebot3-waffle-pi_150.png
turtlebot3-arm_150.png
walking-y2_150.png
turbot3-multi_150.png
turbot3-dl-ros1_150.png
turbot3-ai.png
turbot3-dl-ros2_150.png
turbot3-slam_150.png
turbot3-arm_150.png
turtlebot4-lite_150.png
turtlebot4-pro_150.png
turbot4-dl_150.png
turbot4-ai_150.png
aidriving-racebot_150.png
aidriving-autodrive_150.png
turtlebot-arm_150.png
openmanipulator-x_150.png
Home » ROS2与Turbot3-Multi多机协同教程 » ROS2与Turbot3-Multi多机协同教程-多机定点导航

ROS2与Turbot3-Multi多机协同教程-多机定点导航

纠错,疑问,交流: 请进入讨论区请点击进入页面,扫码加入微信群或Q群进行交流

获取最新文章: 扫一扫加入“创客智造”公众号

文章说明

  • 本教程主要介绍如何实现利用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

# 启动六台机器人 
$ ./multi_scripts/multi_robot6.sh

# 启动十台机器人 
$ ./multi_scripts/multi_robot10.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]首先需要将上个教程生成的地图文件编辑一下起始点
$ vim /home/ubuntu/map/multi.yaml
image: multi.pgm
mode: trinary
resolution: 0.05
# origin: [-16.8, -10.8, 0]
origin: [-10.0, -10.0, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25
  • 起始点改成origin: [-10.0, -10.0, 0]可以确保multi.yaml地图原点为建图时tb3_1机器人的位置,方便后面的脚本设置初始化位姿

  • [NUC] 新开终端,启动导航和rviz,默认使用上个教程建的地图 multi.yaml

$ ./multi_scripts/multi_nav.sh
  • 如果想更换加载的地图,替换multi_nav.sh上的/home/ubuntu/map/multi.yaml为想要更换的地图的路径
  • 程序会打开3个rviz分别被tb3_0tb3_1tb3_2所使用

请输入图片描述

  • 为了减少操作量,此处选择使用脚本一键加载各个机器人的导航时用的初始化位姿
  • 由于前面步骤将multi.yaml地图原点改为建图时tb3_1机器人的位置
  • 当前我们再在导航中将三台机器人摆放回建图时同样的位置同样的方向

请输入图片描述

  • 这样三台机器人的位置分别为(0.0, 2.4)、(0.0, 0.0)和(3.2, 0.0)
  • 使用命令发布机器人位姿的格式就应如下面代码所示
ros2 topic pub --once /tb3_0/initialpose geometry_msgs/PoseWithCovarianceStamped '{
  "header": {
    "stamp": {"sec": 1741946166, "nanosec": 922799866},
    "frame_id": "tb3_0/map"
  },
  "pose": {
    "pose": {
      "position": {"x": 0.0, "y": 2.4, "z": 0.0},
      "orientation": {"x": 0.0, "y": 0.0, "z": 0.0, "w": 1.0}
    },
    "covariance": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
                   0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
                   0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
                   0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
                   0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
                   0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
  }
}'

注意:根据这种方式,即使将机器人摆放在不同位置,也只需基于原建图时tb3_1的位置计算距离即可

  • 列举一个错位摆放的例子

请输入图片描述

  • [NUC] 新开终端,启动3台机器人的初始化位姿的脚本
$ ./multi_scripts/multi_nav_init_pose.sh
  • 初始化位姿成功,就可以指定目标点进行导航了

请输入图片描述

演示视频

原位摆放
<iframe height=498 width=100% src="//player.bilibili.com/player.html?isOutside=true&aid=114182141773165&bvid=BV1esX5YqEKp&cid=28928116747&p=1&high_quality=1&danmaku=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>
错位摆放
<iframe height=498 width=100% src="//player.bilibili.com/player.html?isOutside=true&aid=114182091508216&bvid=BV1ANX5YHEeB&cid=28927918082&p=1&high_quality=1&danmaku=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>

纠错,疑问,交流: 请进入讨论区请点击进入页面,扫码加入微信群或Q群进行交流

获取最新文章: 扫一扫加入“创客智造”公众号


标签: ros2与turbot3-multi多机协同教程