是什么

  • 当 SLAM 系统再次看到“以前走过的地方”并确认这是同一地点时,就称为发生了“回环”。系统会在当前关键帧与过去某个关键帧之间添加一条约束(边)。

为什么要做

  • 长时间运动会累积漂移(位置、姿态,单目还会有尺度漂移)。回环用“以前的真实参照”把整条轨迹拉回到一致的全局形状,纠正漂移,让地图闭合、轨迹更直、更准。

怎么做(以 ORB-SLAM3 为例的典型流程)

  1. 地点识别:用词袋(DBoW2)在所有旧关键帧中检索“看起来相似”的候选帧。
  2. 几何验证:对候选帧做特征匹配,估计两帧间的相似变换 Sim3(含旋转、平移、尺度),用 RANSAC 等剔除误匹配。
  3. 图优化:把这条“回环边”加入位姿图(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、激光、甚至人工测量的相对位姿。
  • 权重要合理:置信度高的测量边更“硬”,对结果影响更大;不确定或可能有外点的测量要配鲁棒核或小权重。
  • 先验/锚定必不可少:至少固定一个参考位姿或方向(比如重力方向),避免“自由漂”。

一句话总结

  • 加约束边:把“测到了谁和谁应该怎么对齐”的信息写进图里。
  • 图优化:同时调整所有位姿/地图点,让整张图的所有测量误差总和最小,得到一致、低漂移的轨迹与地图。