前言
RTAB-Map(全称 Real-Time Appearance-Based Mapping)是一个开源的 RGB-D SLAM 框架,主要用于机器人导航、3D 重建和环境建图。这个项目目前还在积极的维护和更新,也可以进行实际环境的部署。所以先学习一下相关的原理和论文,为之后的使用打下基础。

1.主要贡献
首先看一下该方法的主要贡献有哪些,现有一个基本的了解:
- **在线处理:**SLAM 模块的输出应该被限制在接收到传感器数据之后的最大延迟。特别是对于基于图的 SLAM,随着地图的增长,需要更多的处理时间来回环检测、图优化和构建地图。因此,具有限制计算负载的可能性对于避免与其它模块的滞后问题是有益的,并且甚至对于防止不安全的情况可能是必要的。
- **稳健且低漂移的里程计:**虽然回环检测可以校正大多数里程计漂移,但在现实世界的场景中,机器人通常不能在地图上正确地定位自己。这要么是因为它正在探索新的区域,要么是因为环境中缺乏区分特征。在这段时间内,里程计漂移应该被最小化,使得精确的自主导航仍然是可能的,直到定位可以发生,以避免不正确的地图区域(例如,在房间的入口处不正确地添加障碍物,例如使其成为封闭区域)。当环境中有足够的特征时,利用诸如相机和激光雷达的外部感受传感器来估计里程可以是非常准确的,但是仅使用一种感测模态可能是有问题的,并且如果它们在环境中的被跟踪特征不再可见,则易于定位失败。本体感受传感器和外部感受传感器的混合将增加对里程估计的鲁棒性。
- 鲁棒的定位: SLAM 方法必须能够识别当它正在重访过去的位置 (对于回环检测) 来校正地图。动态环境、光照变化、几何变化甚至重复环境都可能导致错误定位或定位失败,因此该方法应该对误报具有鲁棒性。
- **实际的地图生成和开发:**大多数流行的导航方法都是基于占位栅格的,因此开发可以提供 3D 或 2D 占位栅格的 SLAM 方法是有益的,以便于集成。另外,当环境大多是静态的时候,先做一个映射会话,然后切换到本地化,设置内存使用量,节省地图管理时间更具有实际意义。
- **多会话建图 (a.k.a.绑架机器人问题或初始状态问题):**当重新开启机器人时,机器人不知道其与先前创建的地图的相对位置,从而无法规划到先前访问过的位置的路径。为了避免机器人在开始建图之前将建图过程重新启动到零或在先前构建的地图中进行定位,多会话建图允许 SLAM 方法在启动时初始化一个具有自己参考点的新地图,当遇到先前访问过的位置时,可以计算两张地图之间的转换。这带来的好处是当只需要重新建图一小部分或者增加一个新的区域时,就可以避免重新创建整个环境。
2.关键内容
RTAB-Map 是一种基于图的 SLAM 方法,自 2013 年以来已集成到 ROS 中,作为 rtabmap_ros 包。下图显示了其主要 ROS 节点,称为 rtabmap。里程计是 RTAB-Map 的外部输入,这意味着 SLAM 可以使用任何类型的里程计,以适应特定应用和机器人。

在传感器同步后,短期记忆 (STM) 模块创建一个节点,用于存储里程计姿态、传感器的原始数据以及对后续模块有用的附加信息。节点以固定速率 Rtabmap/DetectionRate 创建,根据节点间数据重叠的程度设置该速率。如果机器人移动速度快且传感器范围小,则应增加检测速率以确保连续节点的数据重叠,但设置过高会不必要地增加内存使用和计算时间。当向图中添加新的循环闭合或邻近链接时,图优化会将计算误差传播到整个图中,以减少里程计漂移。在图优化后,可以组成并发布 OctoMap, Point Cloud, 2D Occupancy Grid 输出给外部模块。通过 /map→/odom 也提供里程计校正,以推导出机器人在地图坐标系中的定位。
RTAB-Map 的内存管理方法运行在图管理模块之上。它用于限制图的大小,从而在大环境中实现长期在线 SLAM。如果没有内存管理,随着图的增长,循环闭合和邻近检测、图优化以及全局地图组装的处理时间最终可能会超过实时约束,即处理时间可能大于节点采集周期时间。基本上,RTAB-Map 的内存分为工作记忆 (WM) 和长期记忆 (LTM)。当一个节点转移到 LTM 时,它不再对 WM 内的模块可用。当 RTAB-Map 的更新时间超过固定时间阈值 时,WM 中的一些节点会转移到 LTM 以限制 WM 的大小并减少更新时间。为了确定哪些节点转移到 LTM,使用权重机制识别比其他位置更重要的位置。为此,在创建新节点时,STM 将节点的权重初始化为 0,并通过视觉比较与图中的最后一个节点比较。如果它们相似,则新节点的权重增加 1 加上最后一个节点的权重。最后一个节点的权重重置为 0,如果机器人未移动,则丢弃最后一个节点以避免无用地增加图的大小。当达到时间或内存阈值时,最旧的最小权重节点首先转移到 LTM。当发生与 WM 中位置的循环闭合时,该位置的邻近节点可以从 LTM 带回 WM 以进行更多循环闭合和邻近检测。随着机器人在先前访问的区域移动,它可以逐步回忆过去的的位置,从而扩展当前组装的地图并使用过去的位置进行定位。









