基于ROS2机器人建图工具包Gmapping

ROS 2 中使用 Gmapping 进行 2D SLAM(即时定位与地图构建) 的完整指南如下:


1. Gmapping 简介

Gmapping 是经典的 基于粒子滤波的 2D SLAM 算法,依赖:

  • 激光雷达(LiDAR)数据
  • 机器人里程计(Odometry)
  • 适用于低计算资源的场景

ROS 2 现状
官方 gmapping 仅支持 ROS 1,但可通过 ROS 1 Bridge替代方案(如 Cartographer) 在 ROS 2 中使用。


2. ROS 2 中的替代方案

(1)使用 Cartographer(推荐)

Cartographer 是 Google 开发的 跨 ROS 1/ROS 2 的 SLAM 算法,支持 2D/3D:

sudo apt install ros-<distro>-cartographer ros-<distro>-cartographer-ros

启动示例:

ros2 launch cartographer_ros demo_backpack_2d.launch.py

(2)通过 ROS 1 Bridge 运行 Gmapping

若必须使用 Gmapping:

  1. 在 ROS 1 中运行 Gmapping
    rosrun gmapping slam_gmapping
    
  2. 通过 ros1_bridge 转发话题
    ros2 run ros1_bridge dynamic_bridge
    
  3. 在 ROS 2 中订阅/发布相关话题(如 /scan/map)。

3. 纯 ROS 2 实现方案

方案 1:slam_toolbox(官方推荐)

slam_toolbox 是 ROS 2 原生支持的 SLAM 工具包,兼容 Gmapping 功能:

sudo apt install ros-<distro>-slam-toolbox

启动命令:

ros2 launch slam_toolbox online_async_launch.py

方案 2:使用 Nav2 + SLAM

Nav2 内置 SLAM 功能:

ros2 launch nav2_bringup tb3_simulation_launch.py slam:=True

4. 关键话题与参数

功能 ROS 1 (Gmapping) ROS 2 (slam_toolbox)
激光话题 /scan /scan
里程计话题 /odom /odom
输出地图 /map /map
算法类型 粒子滤波 图优化

5. 代码示例(slam_toolbox)

Launch 文件配置

<launch>
  <node pkg="slam_toolbox" type="async_slam_toolbox_node" name="slam_toolbox">
    <param name="base_frame" value="base_link"/>
    <param name="odom_frame" value="odom"/>
    <param name="map_frame" value="map"/>
    <param name="scan_topic" value="/scan"/>
  node>
launch>

手动保存地图

ros2 run nav2_map_server map_saver_cli -f ~/map

6. 常见问题

Q1:ROS 2 没有原生 Gmapping?

  • 原因:Gmapping 未正式移植到 ROS 2。
  • 解决方案:使用 slam_toolboxcartographer

Q2:地图不更新?

  • 检查激光数据是否正常:
    ros2 topic echo /scan --no-arr
    
  • 确保里程计话题 /odom 已发布。

Q3:建图漂移严重?

  • 优化里程计(如使用 robot_localization 包融合 IMU + 轮速计)。

7. 总结

方法 适用场景 安装命令
slam_toolbox ROS 2 原生 sudo apt install ros--slam-toolbox
Cartographer 大场景高精度 sudo apt install ros--cartographer
ROS 1 Bridge 兼容旧代码 需配置 ros1_bridge

推荐优先使用 slam_toolboxCartographer,如需进一步帮助可提供具体机器人配置!

你可能感兴趣的:(机器人,自动驾驶,人工智能)