Contents — find the section you need

里程计的漂移会随着行进距离的增加而略微增大,总漂移量也会不断增加。当机器人绕房间一周并返回起点时,即使其当前位置与起点相差数十厘米,仅查看最新帧的系统也无法察觉到这种误差。回环检测发现当前视图与之前的视图相匹配,并利用这种“同一位置”的约束将整个环路的轨迹重新拼接起来。

0. 30 秒概要

  • 回环检测分为两个阶段:检索位置候选点,并通过几何方法确认它们是否确实是同一位置。

  • 词袋模型、全局图像描述符和基于学习的位置识别能够快速检索候选点;特征重匹配和 RANSAC 算法随后会去除误报。

  • 检测到的约束被添加到位姿图中,SE(2)/SE(3) 图优化能够平滑地校正过去的位姿。局部地图保留了重投影误差。

季节、光照、家具移动以及外观相似的走廊都会造成误判,从而产生错误的环路。验证时需考虑多个因素:时间间隔、行进距离、内点数量以及地图一致性。

环路闭合并非“能让地图瞬间修正的魔法”。接受错误检测会导致整个地图出现错误,因此保守的阈值和可逆的设计至关重要。

1. 将环路约束写成方程

Diagram 1 · Use the button to switch views
在校正前,由于里程计漂移而留下的开放姿态图,在添加已验证的环路约束后,在其初始位置和重访姿态处进行了协调

图 1 — 位置识别提出候选位置,几何验证允许存在环路边缘,鲁棒姿态图优化将累积漂移分布到整个轨迹上。红色候选位置并非无条件接受。

设时间 i 的姿态为 T_i\in SE(3),时间 j 重访同一位置时的相对姿态观测值为 Z_{ij}。环路约束的残差可以写成:

r_{ij}=\mathrm{Log}\left(Z_{ij}^{-1}T_i^{-1}T_j\right)\in\mathbb{R}^6

\mathrm{Log} 是一个对数映射,它将刚体变换转换为 6 维无穷小旋转和平移。结合里程计边 \mathcal E_o 和环路边 \mathcal E_l,姿态图优化变为:

\min_{\{T_i\}}\sum_{(i,j)\in\mathcal E_o\cup\mathcal E_l} \rho\left(r_{ij}^{\mathsf T}\Omega_{ij}r_{ij}\right)

其中 \Omega_{ij} 是信息矩阵,\rho 是鲁棒损失函数,例如 Huber 损失函数。即使只添加一条环路边,也能将长轨迹上累积的误差分散到整个图中。

2. 寻找候选对象:将图像转换为“词袋”

词袋 (BoW) 将局部描述符量化为视觉词的直方图,并使用逆文档频率 (IDF) 计算与过去关键帧的相似度。ORB-SLAM 系列系统将轻量级 ORB 描述符与词汇树相结合,无需比较每一帧即可将候选对象缩小到少数几个。与整张地图进行比较。

全局描述符将整幅图像压缩成一个向量,用于检索外观相似的场景。诸如 NetVLAD、CosPlace 和 EigenPlaces 等基于学习的方法能够学习对光照和视角变化具有鲁棒性的表示,但它们在与训练区域不同的建筑物、农田或工厂等场景中性能会发生变化。候选检索负责速度,几何验证负责准确性——你不应该单独依赖其中任何一种。

3. 几何验证:外观相似不足以闭合闭环

从候选图像中重新匹配描述符以获得对应关系。对于单目相机,使用 RANSAC 估计基本矩阵;如果存在已知的地图点,则使用 PnP;对于平面纹理,使用单应性矩阵。检查内点数量、重投影误差、深度是否为正以及视角差异是否在物理上合理,可以提高对候选点是否确实是同一地点的置信度。

错误的闭环很危险,因为图优化会扭曲……即使基于错误的观测,也难以将地图映射到与该观测一致的形状上。两条相似的走廊、一排窗户、田地里的沟壑或工厂里的货架,仅凭词袋模型(BoW)很难区分。应从候选帧中排除时间过于接近的帧,并要求多个连续关键帧之间保持一致的匹配,且与独立传感器(IMU/LiDAR/GNSS)的结果一致。

4. 更新位姿图和地图

添加环路边缘后,首先仅通过位姿图优化关键帧位姿,并使地图点跟随这些位姿。对于大尺度地图,将局部地图与全局位姿分离,而不是每次都对每个点运行捆绑调整,更容易保持实时性能。优化完成后,更新当前的 map→odom 变换,并设计 odom→base_link(优先考虑连续性),使其不会突然跳变。

在 ROS 2 TF2 术语中,局部里程计发布odom→base_link,SLAM 的全局校正调整 map→odom。对校正进行时间平滑处理,以避免机器人本体在闭环瞬间出现瞬移现象。然而,过度平滑以掩盖地图与真实世界之间的差距会导致导航持续使用过时的位置,因此需要记录校正幅度及其应用时间。

5. 易出错的环境

条件 难点 缓解措施
季节/昼夜变化 颜色、阴影、植被变化 学习到的描述符、结构特征、激光雷达融合
动态的人员/车辆 同一地点,不同布局 动态物体掩蔽,仅匹配静态背景
重复的模式 错误的位置看起来也相似 几何验证、距离约束、多帧确认
长走廊/货架 低视差和区分度 IMU、人工标记、UWB
光照变化剧烈 亮度描述符偏移 HDR/曝光校正、学习位置识别
急转弯/模糊 对应点减少 IMU预测、调整关键帧间隔

6. 实现清单

  1. 存储每个关键帧的图像、时间戳、位姿和特征描述符。

  2. 从候选帧中排除最近的帧,并通过词袋模型/全局描述符检索少量过去的候选帧。

  3. 通过几何方法验证对应关系,并对内点计数、重投影误差和正深度进行阈值处理。

  4. 确认同一候选帧在不同时间的多帧中均有效。

  5. 将循环边添加到位姿图中并运行鲁棒优化。

  6. 记录校正幅度、拒绝原因和计算时间。使错误的循环可逆。

7. 研究方向

目前的研究方向是通过大规模自监督学习来提高图像检索的鲁棒性。学习、跨激光雷达、相机和事件相机模式共享描述符,并按季节更新长期地图。此外,还有人尝试使用诸如 NeRF 和 3D 高斯散射等新的场景表示方法进行地点识别,但推理速度、内存占用、动态对象、许可和可复现性等问题仍需进一步验证。

在工厂和农田等重复出现形状相同的通道或沟渠的地方,仅使用图像进行回环检测往往效果不佳。利用农机具路径、惯性测量单元 (IMU)、车轮里程计、实时全球导航卫星系统 (RTK-GNSS) 和已绘制的工作边界作为先验知识来约束候选搜索范围,可以减少误检。将研究原型部署到现场时,应从一开始就建立一套操作流程:如果检测到误环,则冻结地图并手动重新初始化。

8. 结论

回环检测是一个三阶段过程:图像检索,用于回忆过去的场景;几何验证,用于证明是同一地点;以及优化,用于分配信息。整个地图上的误差。不要仅仅依靠词袋模型 (BoW) 或学习到的描述符得分来闭合回路——还要确认对应关系、传感器一致性和时间连续性。如果处理得当,闭环可以校正整个地图上的里程计漂移,并保持长时间运行的机器人的自定位一致性。

检查你的理解
视觉上相似的图像是否足以闭合回路?

外观可能会产生错误的匹配。在添加约束之前验证几何形状;错误的回路可能会扭曲整个地图。

参考资料

What to read next

Review the backgroundVO/VIO入门——利用摄像头和IMU估计运动的实用基础Continue the series视觉SLAM入门——摄像头如何学习“我在哪里”"Explore another aspect of this field图像亮度 Lab — 曝光、伽马与裁剪