在 ROS 2 中使用 Gmapping 进行 2D SLAM(即时定位与地图构建) 的完整指南如下:
Gmapping 是经典的 基于粒子滤波的 2D SLAM 算法,依赖:
ROS 2 现状:
官方gmapping
仅支持 ROS 1,但可通过 ROS 1 Bridge 或 替代方案(如 Cartographer) 在 ROS 2 中使用。
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
若必须使用 Gmapping:
rosrun gmapping slam_gmapping
ros1_bridge
转发话题:ros2 run ros1_bridge dynamic_bridge
/scan
、/map
)。slam_toolbox
是 ROS 2 原生支持的 SLAM 工具包,兼容 Gmapping 功能:
sudo apt install ros-<distro>-slam-toolbox
启动命令:
ros2 launch slam_toolbox online_async_launch.py
Nav2 内置 SLAM 功能:
ros2 launch nav2_bringup tb3_simulation_launch.py slam:=True
功能 | ROS 1 (Gmapping) | ROS 2 (slam_toolbox) |
---|---|---|
激光话题 | /scan |
/scan |
里程计话题 | /odom |
/odom |
输出地图 | /map |
/map |
算法类型 | 粒子滤波 | 图优化 |
<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
slam_toolbox
或 cartographer
。ros2 topic echo /scan --no-arr
/odom
已发布。robot_localization
包融合 IMU + 轮速计)。方法 | 适用场景 | 安装命令 |
---|---|---|
slam_toolbox | ROS 2 原生 | sudo apt install ros- |
Cartographer | 大场景高精度 | sudo apt install ros- |
ROS 1 Bridge | 兼容旧代码 | 需配置 ros1_bridge |
推荐优先使用 slam_toolbox 或 Cartographer,如需进一步帮助可提供具体机器人配置!