ROS2与Turbot3-Multi多机协同教程-多机定点导航
文章说明
- 本教程主要介绍如何实现利用Turbot3-Multi套件进行多机导航
- 测试环境:
Ubuntu 24.04
+ROS2 Jazzy
相关设备
- Turbot3-Multi套件:采购地址
操作步骤
- [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_0
、tb3_1
和tb3_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
- 初始化位姿成功,就可以指定目标点进行导航了
演示视频
原位摆放
错位摆放
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号