SLAM图优化:批量优化、滑动窗口优化和增量式优化总结
摘要 本文系统分析了图优化的三种模式:全批处理优化、滑动窗口优化和增量式优化。全批处理优化全局一致性好但计算量大,适合离线场景;滑动窗口优化计算量固定但会丢失窗口外信息,适合实时系统;增量式优化效率高且能保持长期一致性,但实现复杂。实际系统常采用混合策略,如ORB-SLAM3结合局部滑动窗口和全局优化。选择优化模式需权衡精度、实时性和计算资源,不同场景如三维重建、无人机导航等各有最适合的方案。
目录
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=1∑T−1∥et,t+1(xt,xt+1)∥2+回环∑∥eloop∥2
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{边缘化先验}} xT−N+1,...,xTmin∑∥e∥2+边缘化先验
∥xT−N+1−xprior∥Λ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. 总结
图优化不一定优化所有历史数据,你可以选择:
-
全批处理优化:像写回忆录,一次性优化所有历史
- 优点:精度最高
- 缺点:离线,计算量大
- 适用:三维重建、离线建图
-
滑动窗口优化:像金鱼只有7秒记忆,只优化最近N帧
- 优点:实时性好,计算量固定
- 缺点:无法修正窗口外的误差
- 适用:无人机、手机AR、实时SLAM
-
增量式优化:像聪明人,谁动了就改谁
- 优点:兼顾精度和效率
- 缺点:实现复杂
- 适用:大规模SLAM、长期运行
最终建议:
如果你是做产品,选滑动窗口(简单稳定);如果你是做研究,可以尝试增量式(前沿);如果你是做离线重建,全批处理是你的好朋友。而现代SLAM系统往往是"滑动窗口日常运行 + 回环触发全局优化"的混合体,既保证了实时性,又能在关键时刻修正历史。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)