是什么
- 当 SLAM 系统再次看到“以前走过的地方”并确认这是同一地点时,就称为发生了“回环”。系统会在当前关键帧与过去某个关键帧之间添加一条约束(边)。
为什么要做
- 长时间运动会累积漂移(位置、姿态,单目还会有尺度漂移)。回环用“以前的真实参照”把整条轨迹拉回到一致的全局形状,纠正漂移,让地图闭合、轨迹更直、更准。
怎么做(以 ORB-SLAM3 为例的典型流程)
- 地点识别:用词袋(DBoW2)在所有旧关键帧中检索“看起来相似”的候选帧。
- 几何验证:对候选帧做特征匹配,估计两帧间的相似变换 Sim3(含旋转、平移、尺度),用 RANSAC 等剔除误匹配。
- 图优化:把这条“回环边”加入位姿图(Essential Graph),做全局位姿图优化;必要时再跑一次全局 BA 精修点和位姿。单目尤其依赖 Sim3 来修正尺度漂移。
和”重定位”的区别
- 回环:跟踪正常时发现“我回到旧地方了”,以此全局纠偏并优化整图。
- 重定位:跟踪丢失时,用地点识别找回在旧地图中的姿态,恢复跟踪;不一定会触发全局优化。
何时能触发/容易失败的情况
- 需要有足够视角与纹理重叠的“相似观察”;强光照变化、模糊、动态物体、走廊等重复纹理会降低成功率。
- 为避免误检,系统会做严格几何验证和一致性检查;阈值太松可能引入错误约束。
对不同模式的意义
- 单目:回环能一把“定”尺度和全局形状,作用最大。
- 视觉惯性(VIO):IMU 降低短期漂移,但长时间仍会累积误差;回环可以做全局一致性校正。
工程上如何”帮它成功回环”
- 让轨迹有计划地“重访”已看过区域或布置固定标志板(AprilTag)。
- 控制曝光/快门,减少模糊;保证有足够纹理和特征点数。
- 在 ORB-SLAM3 中确保词典加载(建议二进制 ORBvoc.bin)、回环线程开启、关键帧策略不过度稀疏。
一句类比
- 你绕着街区走了一圈回到出发点,回环就是“认出这是起点”,然后把你手绘的路线图拉直拉准。
加约束边是什么意思,图优化是什么意思
直白版理解
- 加约束边是什么意思
- 把一次“测量关系”写进一张图里,用一条“边”把相关的“节点”连起来。
- 节点(点/顶点)是你要估计的变量,比如相机位姿、地图点(路标)、速度/IMU 偏置等。
- 约束边(因子/观测)代表传感器给出的信息,比如:
- 相邻两帧之间的里程计/IMU 约束(位姿 - 位姿边)
- 某关键帧看到某地图点的重投影约束(位姿 - 路标边)
- 回环时当前关键帧与历史关键帧之间的相似变换约束(位姿 - 位姿的 Sim3 边)
- 外部传感器(GPS/里程计/AprilTag/手眼先验等)给的位姿或相对位姿约束
- “加边”的本质:把“我量到了 A 和 B 应该满足某种关系”这条信息放进统一的因子图里。
- 图优化是什么意思
- 把整张“图”(节点 + 约束边)一起求解,调整所有节点的数值,使所有约束“尽可能被同时满足”。
- 形式上是最小二乘:最小化所有残差的加权平方和
- 残差 r = 测量 z − 预测 h(x)(x 是所有待估计变量)
- 权重由测量协方差/信息矩阵决定,常配鲁棒核(Huber 等)抗外点
- 用的算法一般是非线性最小二乘(Gauss-Newton / Levenberg-Marquardt),常见库:g2o、Ceres、GTSAM。
- 结果:得到更一致的位姿轨迹和地图点,漂移被抑制、冲突信息被折中。
形象类比
- 把每个位姿/地图点看成木板上的小钉子(节点),每条测量是连接钉子之间的橡皮筋(边),橡皮筋有自己的“理想长度/方向”(测量值)和“硬度”(置信度)。图优化就是同时拉扯这些钉子,直到所有橡皮筋都“最不憋屈”。
在 ORB-SLAM3 里的常见节点与边
- 节点
- 关键帧位姿(必要时还含速度、IMU 偏置)
- 地图点(3D 点)
- 约束边(因子)
- 重投影因子:关键帧位姿 ↔ 地图点(最小化像素误差)
- IMU 预积分因子:相邻关键帧状态(位姿/速度/偏置)之间
- 回环因子:两关键帧之间的 Sim3/SE3 约束
- 先验/锚定因子:固定或弱约束某个参考位姿,消除自由度漂移(比如全局平移/旋转/尺度)
- 图的几种形态(别名)
- Covisibility Graph:挑邻居的“共视图”,更多是数据结构,不直接做全局优化
- Essential Graph:稀疏化后的“骨干图”(生成树 + 强边 + 回环边),用于全局位姿图优化
- Bundle Adjustment(BA):位姿 + 地图点一起优化(局部/全局)
- Pose Graph Optimization:只优化位姿(点固定或忽略),回环后常用来快速纠偏
为什么“加边”能变准
- 每一条新边都是“独立的信息来源”,会限制解的自由度,减少漂移的不确定性。
- 例如回环边告诉系统“现在的这个地方其实和很久以前的那个地方是同一个”,优化后整条轨迹被“拉回去”,闭合成一致的环。
- 再比如加 AprilTag 测量边,能把轨迹锚定在外部基准坐标系里,显著降低全局漂移。
一个极简例子(文字版)
- 三个位姿节点 P0, P1, P2;两条里程计边约束 P0→P1, P1→P2。
- 由于噪声,P2 会有累积漂移。若此时识别到回到了起点附近,给 P2↔P0 加一条回环边。
- 做图优化后,P0,P1,P2 同时移动,最终环被“闭合”,整体轨迹更一致。
与你项目的关系(两臂要有精准相对关系)
- 每条臂各自跑 VIO/SLAM,得到各自的位姿节点序列。想让它们在同一世界系下“对得齐”,就需要“跨臂的约束边”把两套轨迹连起来:
- 共享静态地图的回环边(两臂都能重定位到同一张地图)
- 共同观测的 AprilTag/ArUco 板(世界系锚定边)
- 已知的手眼/基座先验(轻微权重的先验边)
- 把这些边加入同一因子图,做一次图优化(maplab/Kimera/GTSAM 等),两臂轨迹就会在同一坐标系下被“拉到一致”,相对关系更准。
实操提示
- 任何你“信得过”的测量,都可以变成一条边:相机观测、IMU 预积分、里程计、GPS、Tag、激光、甚至人工测量的相对位姿。
- 权重要合理:置信度高的测量边更“硬”,对结果影响更大;不确定或可能有外点的测量要配鲁棒核或小权重。
- 先验/锚定必不可少:至少固定一个参考位姿或方向(比如重力方向),避免“自由漂”。
一句话总结
- 加约束边:把“测到了谁和谁应该怎么对齐”的信息写进图里。
- 图优化:同时调整所有位姿/地图点,让整张图的所有测量误差总和最小,得到一致、低漂移的轨迹与地图。