< >
Home » ROS2版Turbot3-Multi仿真教程 » ROS2版Turbot3-Multi仿真教程-2台机器人边建图边导航

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
  • 效果图

请输入图片描述

演示视频

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

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


标签: ros2版turbot3-multi仿真教程