ROS2版Turbot3-Multi仿真教程-2台机器人边建图边导航
说明
- 介绍实现2台机器人的边建图边导航,并合并大地图
- 环境:ubuntu22.04 + ros2 humble
初始化机器人在仿真地图上的位置
- 初始化机器人在仿真地图上的位置, 打开robots_world_house_merge.json
vim ~/ros2_tb3_multi_ws/src/turtlebot3_multi/config/robots_world_house_merge.json
- 设置内容为
[
{
"name": "tb3_0",
"x_pose": 0.0,
"y_pose": 0.5,
"z_pose": 0.0,
"a": 0.0,
"roll": 0.0,
"pitch": 0.0,
"yaw": 0.0
},
{
"name": "tb3_1",
"x_pose": -3.0,
"y_pose": 1.5,
"z_pose": 0.0,
"a": 0.0,
"roll": 0.0,
"pitch": 0.0,
"yaw": 0.0
}
]
初始化机器人在合并地图上的位置
- 初始化机器人在合并地图上的位置, 打开map_merge_params.yaml
vim ~/ros2_tb3_multi_ws/src/turtlebot3_multi/config/map_merge_params.yaml
- 根据仿真坐标点设置合并后地图的初始化位置
- 公式如下
取两台机器人直线的中间位置为中心坐标点,X除于10,Y除于10, A坐标的都是正值,B坐标点都是负值。
比如 A:x=0.0,y=0.5 B:x=-3.0,y=1.5 得到的合并地图坐标。A:x=0.15,y=0.05 B:x=-0.15,y=-0.05
Xb1=(abs(X1-X2)/2)/10
Yb1=(abs(Y1-Y2)/2)/10
Xb2=-(abs(X1-X2)/2)/10
Yb2=-(abs(Y1-Y2)/2)/10
- 默认坐标
map_merge:
ros__parameters:
merging_rate: 4.0
discovery_rate: 0.5
estimation_rate: 0.5
estimation_confidence: 0.6
robot_map_topic: map
robot_map_updates_topic: map_udpates
robot_namespace: ""
merged_map_topic: map
world_frame: map
known_init_poses: true
# known_init_poses: false
# Define here robots' positions in the map if known_init_poses is true
/tb3_0/map_merge/init_pose_x: 0.15
/tb3_0/map_merge/init_pose_y: 0.05
/tb3_0/map_merge/init_pose_z: 0.0
/tb3_0/map_merge/init_pose_yaw: 0.0
/tb3_1/map_merge/init_pose_x: -0.15
/tb3_1/map_merge/init_pose_y: 0.05
/tb3_1/map_merge/init_pose_z: 0.0
/tb3_1/map_merge/init_pose_yaw: 0.0
- 通过这个方法合并后地图的width和height接近384*384,这样合并的地图拼合才会比较完好。
启动步骤
- 新开终端,启动gazebo
./multi_scripts/multi_gazebo_2.sh robots_world_house_merge.json turtlebot3_house.world
- 指定坐标点,指定仿真地图
- 效果图:
- 新开终端,启动2台小车的导航
./multi_scripts/multi_nav.sh 2
- 新开终端,启动2台小车的建图
./multi_scripts/multi_slam.sh 2
- 新开终端,启动rviz
./multi_scripts/multi_rviz.sh
- 新开终端,启动合并地图, 并指定合并后机器人的初始化坐标点
./multi_scripts/multi_map_merge.sh map_merge_params.yaml
- rviz显示机器人1地图
- rviz显示机器人2地图
- rviz显示合并地图
通过指点目标点导航建图
- 在rviz右边,设置2D Goal Pose的话题/tb3_0/goal_pose (默认为机器人1)
- 在rviz地图上,点击2D Goal Pose按钮,指定点并拉一个方向,机器人1就会自动导航到对应地点
- 在rviz右边,设置2D Goal Pose的话题/tb3_1/goal_pose (机器人2)
- 在rviz地图上,点击2D Goal Pose按钮,指定点并拉一个方向,机器人1就会自动导航到对应地点
- 完成导航后,同时也完成合并地图
- 导航中的效果图:
- 完成后的合并效果图
通过键盘控制建图
- 分别新开终端,启动键盘控制
./multi_scripts/multi_key.sh 0
- 通过数字来确定启动那台机器人的键盘控制, 分别是第一台数字为0或第二台数字为1
- 分别控制每台小车移动,实现相应建图
- 效果如图:
- 最后有一个合并的地图出现
保存地图
- 建图完成之后,保存地图
./multi_scripts/multi_save_map.sh
地图自动保存在~/ros2_tb3_multi_ws/src/turtlebot3_multi/map目录下,名为multi.yaml和multi.pgm
查看地图
eog ~/ros2_tb3_multi_ws/src/turtlebot3_multi/map/multi.pgm
- 效果图
演示视频
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号