RTAB-Map 使用方式与典型场景
四、使用方式与典型场景
RTAB-Map 的典型用法有四种:纯 RGB-D 建图、RGB-D 加激光、纯激光、以及纯定位。下面给两个可直接运行的例子。
示例一,RGB-D 相机加轮式里程计的完整建图,适合室内服务机器人。这条命令把里程计作为运动先验,能显著提升快速移动时的稳定性:
roslaunch rtabmap_ros rtabmap.launch \
rgb_topic:=/camera/color/image_raw \
depth_topic:=/camera/aligned_depth_to_color/image_raw \
camera_info_topic:=/camera/color/camera_info \
odom_topic:=/odom \
frame_id:=base_link \
approx_sync:=true \
queue_size:=30 \
rtabmap_args:="--delete_db_on_start \
--Rtabmap/DetectionRate 2 \
--RGBD/AngularUpdate 0.1 \
--RGBD/LinearUpdate 0.1 \
--RGBD/ProximityBySpace true \
--Reg/Strategy 1 \
--Mem/RehearsalSimilarity 0.55 \
--Grid/CellSize 0.05 \
--Grid/RangeMax 4.0" \
rviz:=true
示例二,用 rtabmap.launch 之外的单节点方式启动,便于把参数写进独立的 YAML 文件做版本管理。这种方式在生产部署中更常见,因为参数可以进代码仓库:
rosrun rtabmap_slam rtabmap \
--delete_db_on_start \
--Rtabmap/DetectionRate 1 \
--Mem/IncrementalMemory true \
--database_path $HOME/maps/site_b.db \
-d /camera/aligned_depth_to_color/image_raw \
-rgb /camera/color/image_raw \
-odom /odom
示例三,纯定位模式。机器人执行重复作业时不再建图,只估计位姿,资源占用大幅下降,定位稳定性也更高:
roslaunch rtabmap_ros rtabmap.launch \
localization:=true \
database_path:=$HOME/maps/site_b.db \
rgb_topic:=/camera/color/image_raw \
depth_topic:=/camera/aligned_depth_to_color/image_raw \
camera_info_topic:=/camera/color/camera_info \
rtabmap_args:="--Mem/IncrementalMemory false --Mem/InitWMWithAllNodes true"
适用性对照如下。
| 场景 | 是否合适 | 说明 |
|---|---|---|
| 室内服务机器人建图导航 | 非常合适 | RTAB-Map 的主场,输出栅格图可直接导航 |
| 需要长时间重复运行并定位 | 合适 | 记忆管理机制保证长时间实时 |
| 手持设备三维扫描重建 | 合适 | 输出稠密点云,可导出做后期 |
| 室外大范围场景 | 有限 | RGB-D 相机有效距离短,室外强光下深度失效 |
| 高速运动平台 | 不合适 | 帧率与视野限制,快速运动导致匹配失败 |
| 纹理极少的白墙走廊 | 需辅助 | 视觉回环失效,需依赖激光或邻近检测 |
| 需要厘米级绝对精度 | 需配合其他手段 | 图优化存在累积误差,关键工位建议加反光柱或二维码 |
特别提醒一点:RTAB-Map 输出的点云质量高度依赖深度相机的有效距离。结构光相机在强光下几乎无法工作,飞行时间相机在近距离有盲区,双目深度相机在弱纹理表面上又会大面积空洞。选相机时要先明确场景的光照条件与距离范围,这一步选错,后面算法怎么调都补不回来。

