RTAB-Map 安装与部署:从依赖到跑通第一个数据库
二、安装与部署:从依赖到跑通第一个数据库
RTAB-Map 有两条安装路径:独立版(带 Qt 图形界面,不依赖 ROS)和 ROS 包。若最终要跑在机器人上,直接走 ROS 路线,避免之后重复配置。
- 安装 ROS 与基础依赖。以 Ubuntu 20.04 + ROS Noetic 为例,核心依赖是 PCL 点云库、OpenCV、以及可选的 g2o 与 GTSAM(用于位姿图优化):
sudo apt update sudo apt install -y ros-noetic-rtabmap-ros \ ros-noetic-rtabmap \ libpcl-dev libopencv-dev libsqlite3-dev - 验证安装是否完整。RTAB-Map 在首次运行时会自动下载并生成视觉词典,如果网络受限会卡在这一步:
rospack find rtabmap_ros ls ~/.ros/rtabmap.db 2>/dev/null || echo "首次运行后才会生成" - 准备 RGB-D 相机或数据集。若用真实相机,先确认驱动能发布深度与彩色图像;若手头没有硬件,用 rosbag 或已录好的数据集先跑通流程。
roslaunch realsense2_camera rs_camera.launch align_depth:=true - 启动建图节点。下面这条命令是最常用的最小配置,
--delete_db_on_start表示每次启动清空旧数据库重新建图,调参阶段一定要带上,否则旧地图会干扰观察:roslaunch rtabmap_ros rtabmap.launch \ rtabmap_args:="--delete_db_on_start" \ depth_topic:=/camera/aligned_depth_to_color/image_raw \ rgb_topic:=/camera/color/image_raw \ camera_info_topic:=/camera/color/camera_info \ approx_sync:=true \ frame_id:=base_link - 观察输出。RViz 中应当能看到逐步累积的点云与轨迹;终端里会打印回环检测日志,形如
Loop closure detected。首次运行会在~/.ros下生成相当体积的词典缓存,耐心等待。 - 保存与复用地图。程序退出时数据库会自动保存在
~/.ros/rtabmap.db。想换路径或改名,用database_path参数指定。之后做纯定位时不要再加--delete_db_on_start,并打开定位模式:roslaunch rtabmap_ros rtabmap.launch \ localization:=true \ database_path:=$HOME/maps/site_a.db \ rtabmap_args:="--Mem/IncrementalMemory false"
常见报错与排查。
| 报错现象 | 根因 | 处理方式 |
|---|---|---|
Did not receive data since 5 seconds | 话题名不匹配,或图像与深度未同步 | 用 rostopic list 核对话题名;approx_sync:=true 放宽时间同步 |
| RViz 里点云是散的、不贴合 | 缺少里程计或 TF 链断裂 | 检查 odom 到 base_link 的 TF 是否在发布 |
| 回环检测一直不触发,地图逐渐漂移 | 场景纹理重复,或特征类型不适合 | 切换特征类型,调低相似度门限,或依赖邻近检测 |
| 启动即报 Qt 插件缺失 | 独立版与 ROS 版混装,或缺少 libqt5 组件 | 统一用一个发行版;补装缺失的 Qt 运行库 |
| PCL 相关未定义符号 | PCL 版本与编译期不一致 | 用 apt 版 PCL,避免手工编译版本污染 LD_LIBRARY_PATH |
| 内存持续增长直到被系统杀掉 | 长期记忆与点云缓存过大 | 限制工作记忆大小,开启点云降采样 |
| 数据库文件巨大 | 保存了每一帧的原始点云 | 调整存储策略,只保留关键帧点云 |
工具链方面,RTAB-Map 附带几个非常实用的命令行工具。rtabmap-databaseViewer 可以打开 db 文件,查看节点、回环、点云,甚至手工删除错误的回环约束;rtabmap-report 能输出运行过程中的耗时统计;rtabmap-export 可以把数据库导出成点云文件。这三个工具在排查"地图为什么错位"时几乎是必需品——大多数时候问题出在一条错误的回环约束上,在 viewer 里删掉它,地图立刻就正了。

