回环验证:召回可激进,进图须保守
从词袋召回到 PnP/ICP 几何验证与 Chi2,分析误回环如何摧毁位姿图及 switchable constraints 防御。

1. 一次误回环叠两层墙
回环不是「又匹配成功了一次」。它是往因子图插入长程、高信息量相对位姿约束。约束对了,全局漂移被钉死;错了,整张地图可能被掰成不可恢复的形状——对称仓库里误回环让 Nav2 地图叠两层墙,AMCL 永远收敛到错误模式。
核心原则:召回可激进,接纳进图必须保守。 误回环一次造成的位姿图扭曲,往往需要删边重优化或整图重建才能恢复——比漏检十次真回环的代价大一个数量级。对称结构场景里,召回层 top-10 候选常含多个几何相似帧,几何验证必须逐对独立做,不能「第一个过就停」。
2. 回环在估计里的角色
里程计因子链 ≈ 软弹簧,累积误差。回环因子把相距很远的两个位姿用短硬弹簧连接:
错时,优化宁可拧弯整条轨迹也要满足——长程约束杠杆极大。分开报 Recall@K(召回层)和 precision@geometry(几何验证后),不要只报一个「回环成功率」。
3. 召回层
DBoW2:描述子 → visual word → 倒排索引;快、对视角变化有一定鲁棒;感知混叠(perceptual aliasing)——相似会议室得分都高。
学习型全局描述子(NetVLAD / MixVPR):复杂外观下召回更强,「长得像 ≠ 同一地点」仍在。LiDAR:Scan Context、Iris——走廊/隧道重复结构同样混叠。
用里程计 drift covariance + 空间索引门控 impossible pairs,减少进入几何验证的候选——详见回环位姿先验专文。
4. 几何验证:唯一可信门禁
视觉候选 须通过:
- 特征匹配 + ratio test(Lowe 0.7–0.8)
- 本质矩阵 / 单应 RANSAC(视场景平面性)
- PnP + RANSAC →
- 内点率 > 30–50%,重投影 RMSE < 2–3 px
- Chi2 检验:
激光:初始位姿粗对齐 → ICP/NDT,限制 max correspondence distance → fitness score、overlap ratio、退化方向 uncertainty。验证失败 → 丢弃,不要「差不多 optimize 看看」。
5. 优化层防御
几何通过仍可能是相似结构下的幸运内点:
- 鲁棒核:Cauchy / Geman-McClure on loop edges
- Switchable constraints:优化器可关边()
- 渐进接纳:先 PGO 试探,局部 consistency OK 再 Global BA
- Conservative information:初始 小,Chi2 收敛后收紧
- 时间/拓扑一致性:短 time 内矛盾回环 → suspend
ORB-SLAM3 Atlas:不确定时新建 map,确认后 merge——产品级策略。
6. 感知混叠典型场景
| 场景 | 风险 | 缓解 |
|---|---|---|
| 对称走廊 | 激光/视觉混叠 | 序列约束、空间 prior |
| 重复工位/货架 | 外观高相似 | 更大基线、更多内点 |
| 玻璃反射 | 视觉假特征 | 深度/laser 交叉验证 |
| 日夜变化 | 召回降 | 多 session descriptor |
压力测试:数据集中插入相似场景片段,故意制造混叠。实现上候选生成、几何验证、优化接纳三模块应独立可单测——阈值按 sensor noise 标定,错误回环要能复盘 frame pair、matches、、chi2,否则现场「成功回环」无法区分是算法进步还是阈值放松。
7. 验收
- 正确回环 / 应回环机会;误回环数单列
- 误回环后 ATE 恶化量
- 拒绝原因分布(匹配 / ransac / chi2 / switch)
- 候选 / 几何 / 优化接纳三模块独立可单测
- 错误回环可复盘(frame pair、matches、、residual、chi2)
- 回环后限制高速导航直到定位 stable
回环深度在四层:召回 → 先验门控 → 几何验证 → 优化拒绝 + 可复盘日志。缺任何一层,系统会在最像「成功」的时刻把地图写坏——我宁愿漏,也不想要一次错误约束。KPI 评审时误回环数必须和正确回环数并列,只报 recall 会鼓励团队放松几何门槛。
相关
也可以看看
johan's blog