目录


1. 核心结论

图优化不一定优化所有历史数据,有三种模式:

模式 优化范围 通俗理解 典型代表
全批处理优化 所有历史数据 “翻旧账” 离线BA、三维重建
滑动窗口优化 最近N帧数据 “记性只有N秒” VINS-Mono、OKVIS
增量式优化 只更新受影响的变量 “谁动了就改谁” iSAM、GTSAM

一句话回答:图优化可以选择优化哪些数据——你可以选择优化所有历史(全批处理),也可以只优化最近一段(滑动窗口),还可以只优化被新信息影响的部分(增量式)。


2. 三种优化模式的直观理解

2.1 比喻:写日记的三种方式

全批处理优化 = 写回忆录

  • 每天都不写日记,等一年后一次性回忆全年发生的事
  • 优点:全局一致性好,能修正早期的错误记忆
  • 缺点:年底要回忆一整年,累死了(计算量大)

滑动窗口优化 = 记性只有7秒

  • 每天只记录最近一周的事,一周前的事就忘了
  • 优点:每天的工作量固定(只处理7天的日记)
  • 缺点:永远记不住一个月前的事(无法回环修正)

增量式优化 = 写日记+局部修改

  • 每天都写日记,但如果有新信息,只修改相关的几页
  • 优点:效率高,又能保持长期一致性
  • 缺点:日记本越来越厚,偶尔需要大扫除(定期优化)

2.2 三种模式的对比总览

模式 优化范围 计算量 精度 实时性 回环修正能力
全批处理 全部历史 (O(N^3)) 最高 最差(离线) ✅ 完全修正
滑动窗口 最近N帧 (O(N^3))固定 中等 好(在线) ⚠️ 仅窗口内
增量式 受影响变量 (O(\log N)) 好(在线) ✅ 可修正

3. 全批处理优化

3.1 原理

优化范围:所有历史数据(从时刻1到当前时刻)

3.2 数学形式

min ⁡ x 1 , x 2 , . . . , x T ∑ t = 1 T − 1 ∥ e t , t + 1 ( x t , x t + 1 ) ∥ 2 + ∑ 回环 ∥ e loop ∥ 2 \min_{\mathbf{x}_1, \mathbf{x}_2, ..., \mathbf{x}_T} \sum_{t=1}^{T-1} \| \mathbf{e}_{t,t+1}(\mathbf{x}_t, \mathbf{x}_{t+1}) \|^2 + \sum_{\text{回环}} \| \mathbf{e}_{\text{loop}} \|^2 x1,x2,...,xTmint=1T1et,t+1(xt,xt+1)2+回环eloop2

3.3 优缺点

优点 缺点
全局一致性最好 计算量随轨迹长度立方增长
能修正早期累积误差 无法实时运行(离线处理)
回环修正彻底 内存占用大

3.4 代表算法

  • COLMAP:三维重建中的全局BA
  • Theia SfM:运动恢复结构
  • ORB-SLAM3中的全局优化(触发时)

4. 滑动窗口优化

4.1 原理

优化范围:只优化最近N个关键帧(滑动窗口),窗口外的帧被边缘化(marginalization)为先验信息。

4.2 数学形式

窗口内:
min ⁡ x T − N + 1 , . . . , x T ∑ ∥ e ∥ 2 + ∥ x T − N + 1 − x prior ∥ Λ prior 2 ⏟ 边缘化先验 \min_{\mathbf{x}_{T-N+1}, ..., \mathbf{x}_T} \sum \| \mathbf{e} \|^2 + \underbrace{\| \mathbf{x}_{T-N+1} - \mathbf{x}_{\text{prior}} \|^2_{\boldsymbol{\Lambda}_{\text{prior}}}}_{\text{边缘化先验}} xTN+1,...,xTmine2+边缘化先验 xTN+1xpriorΛprior2

4.3 优缺点

优点 缺点
计算量恒定(只优化N帧) 窗口外信息丢失
适合实时系统 无法修正窗口外的误差
边缘化保留部分历史信息 边缘化引入线性化误差

4.4 代表算法

  • VINS-Mono:滑动窗口大小为10
  • OKVIS:滑动窗口优化
  • MSCKF:滑动窗口滤波器

5. 增量式优化

5.1 原理

优化范围:当新信息加入时,只更新受影响的变量(通常是回环附近的帧),其他变量保持不变。

5.2 数学形式

利用贝叶斯树(Bayes Tree)或QR分解的增量更新:

R Δ x = d 只更新R矩阵中受影响的部分 \mathbf{R} \Delta \mathbf{x} = \mathbf{d} \quad \text{只更新R矩阵中受影响的部分} RΔx=d只更新R矩阵中受影响的部分

5.3 优缺点

优点 缺点
效率高(只更新局部) 实现复杂
保持长期一致性 偶尔需要完全重优化
适合大规模场景 内存占用随时间增长

5.4 代表算法

  • iSAM(incremental Smoothing and Mapping)
  • iSAM2(基于贝叶斯树)
  • GTSAM中的增量更新

6. 三种模式的对比分析

6.1 信息利用方式

全批处理:
时刻1 ── 时刻2 ── 时刻3 ── ... ── 时刻T
  ↓        ↓        ↓              ↓
  └────────┴────────┴──────────────┘
          一起优化

滑动窗口:
时刻1  时刻2  [时刻3 ── 时刻4 ── 时刻5]  ← 窗口内优化
(边缘化) (边缘化)   ↓        ↓        ↓
                    └────────┴────────┘

增量式:
时刻1 ── 时刻2 ── 时刻3 ── 时刻4 ── 时刻5
  ↓        ↓        ↓        ↓        ↓
  └────────┴────────┘         └────────┘
  新回环只影响局部

6.2 计算复杂度

模式 时间复杂度 空间复杂度
全批处理 (O(T^3)) (O(T^2))
滑动窗口 (O(N^3)) 固定 (O(N^2)) 固定
增量式 (O(\log T)) 平均 (O(T))

6.3 精度对比

精度:全批处理 ≈ 增量式 > 滑动窗口
原因:全批处理和增量式都能利用所有信息,滑动窗口会丢失窗口外信息

6.4 实时性对比

实时性:滑动窗口 > 增量式 > 全批处理
原因:滑动窗口计算量恒定,增量式偶尔需要全优化

7. 实际系统中的选择策略

7.1 不同场景的最佳选择

场景 推荐模式 原因
离线三维重建 全批处理 精度优先,不计时间
无人机实时导航 滑动窗口 实时性要求高,计算资源有限
大规模自动驾驶建图 增量式 需要长期一致性,又不能太慢
手机AR应用 滑动窗口 资源受限,实时响应
考古遗址扫描 全批处理 精度最重要

7.2 混合策略

现代SLAM系统往往采用混合策略

LIO-SAM的策略:

正常情况下:滑动窗口优化(窗口大小15)
检测到回环时:触发全局位姿图优化

ORB-SLAM3的策略:

跟踪线程:只优化当前帧(类似滤波)
局部建图线程:滑动窗口优化(局部BA)
回环线程:全批处理优化(全局BA)

GTSAM/iSAM2的策略:

平时:增量式优化(只更新受影响变量)
定期:全优化(清理累积误差)

8. 开源算法采用的模式

算法 优化模式 具体实现
ORB-SLAM系列 混合 局部BA(滑动窗口)+ 全局BA(全批处理)
LIO-SAM 滑动窗口 因子图滑动窗口(15帧)
VINS-Mono 滑动窗口 滑动窗口大小为10
Cartographer 滑动窗口 子图内优化(滑动窗口)
GTSAM/iSAM2 增量式 贝叶斯树增量更新
COLMAP 全批处理 全局BA
FAST-LIO 不适用 用的是滤波,不是图优化

9. 总结

图优化不一定优化所有历史数据,你可以选择:

  1. 全批处理优化:像写回忆录,一次性优化所有历史

    • 优点:精度最高
    • 缺点:离线,计算量大
    • 适用:三维重建、离线建图
  2. 滑动窗口优化:像金鱼只有7秒记忆,只优化最近N帧

    • 优点:实时性好,计算量固定
    • 缺点:无法修正窗口外的误差
    • 适用:无人机、手机AR、实时SLAM
  3. 增量式优化:像聪明人,谁动了就改谁

    • 优点:兼顾精度和效率
    • 缺点:实现复杂
    • 适用:大规模SLAM、长期运行

最终建议

如果你是做产品,选滑动窗口(简单稳定);如果你是做研究,可以尝试增量式(前沿);如果你是做离线重建,全批处理是你的好朋友。而现代SLAM系统往往是"滑动窗口日常运行 + 回环触发全局优化"的混合体,既保证了实时性,又能在关键时刻修正历史。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐