概念介绍:RTAB-Map 的定位与它解决的问题
一、概念介绍:RTAB-Map 的定位与它解决的问题
RTAB-Map 的全称是 Real-Time Appearance-Based Mapping,实时外观建图。它最初是一个独立的 C++ 库,后来发展出 ROS 包 rtabmap_ros,成为 RGB-D 相机加激光雷达做三维建图与定位的主流方案之一。它和 ORB-SLAM3 这类纯视觉里程计最大的差别在于:RTAB-Map 的目标是稠密的三维环境地图,而不是稀疏的特征点轨迹。
它要解决的问题是:机器人在室内环境中长时间运行,如何一边建立可用的三维地图,一边在这个地图里定位自己,并且保证回环检测的时间不会随着地图变大而无限增长。RTAB-Map 的答案是一个"记忆管理"机制——把地图节点分成短期记忆(STM)、工作记忆(WM)和长期记忆(LTM)。当前活跃的节点放在工作记忆中参与回环搜索,攒够一定数量后,最老的节点被转移到长期记忆里,不再参与实时回环搜索,只有在需要时才被重新"取回"。这个设计让回环检测的耗时近似恒定,是它能在几小时甚至几天的运行中保持实时的关键。
在外观匹配上,RTAB-Map 使用视觉词袋(Bag-of-Words)。每一帧图像提取特征(默认是 SURF 风格的局部特征,也可切换成 ORB、GFTT 等),量化成视觉单词,构成一个"签名"。回环检测就是在签名数据库里找最相似的候选,然后用几何验证(PnP 或 ICP)确认。这个思路和 ORB-SLAM3 的 DBoW2 类似,区别在于 RTAB-Map 支持更多传感器组合,而且把地图本身存成 SQLite 数据库,可以离线浏览和编辑。
和相邻方案的差别。ORB-SLAM3 精度高、轻量,但地图稀疏,需要导航用图时必须外接别的模块;RTAB-Map 直接输出栅格地图与点云,可直接喂给 move_base 或 nav2。OctoMap 只做三维占据栅格、不做回环和位姿估计,通常作为 RTAB-Map 或 SLAM 后端的补充。VINS-Fusion 是纯视觉惯性里程计,不带稠密建图。SLAM Toolbox 是二维方案,不产生三维点云。选型经验:如果项目要的是"能给导航用的三维地图 + 长时间稳定定位",RTAB-Map 是成本最低的起点;如果只是要无人机在室内确定自己的位置,ORB-SLAM3 更轻。
| 术语 | 含义 | 实际影响 |
|---|---|---|
| STM(短期记忆) | 最近若干帧节点,必定参与回环搜索 | 大小由 Mem/STMSize 控制 |
| WM(工作记忆) | 当前参与回环搜索的节点集合 | 大小由 Mem/WorkingMemorySize 控制,是实时的关键 |
| LTM(长期记忆) | 被转移出去、暂时不参与搜索的节点 | 需要时按相似度取回工作记忆 |
| Signature(签名) | 一帧图像的视觉单词直方图 | 回环检索的最小单位 |
| Loop Closure(回环) | 识别出曾经到过的位置 | 触发全局位姿图优化 |
| Proximity Detection | 基于空间距离的邻域约束 | 补偿视觉盲区时的定位连续性 |
| rtabmap.db | SQLite 格式的地图数据库 | 可用 rtabmap-databaseViewer 离线查看与编辑 |
| Grid Map | 从点云投影出的二维占据栅格 | 导航直接可用,参数在 Grid/* |
