时间:2026-03-13 10:35
人气:
作者:admin
因子图优化和图优化是SLAM(同步定位与地图构建)中常用的两种优化方法,它们在处理方式和应用场景上有显著区别。
图优化,也称为位姿图优化,是一种全局优化方法。它将所有的位姿点和观测数据构建成一个图,然后通过优化算法对整个图进行全局优化。每个节点代表一个位姿,每条边代表一个观测或运动约束。图优化的目标是通过调整节点的位置,使得所有边的误差最小化。这种方法适用于静态环境,但由于需要对整个图进行优化,计算量较大,处理速度较慢。
因子图优化是一种增量式的优化方法。它将SLAM问题表示为一个因子图,其中节点表示变量(如相机位姿和路标),边表示因子(如观测和运动约束)。因子图优化的核心思想是保留中间计算结果,每次加入新的观测或运动数据时,只对新增部分进行优化,而不需要重新计算整个图。这种方法可以显著减少计算量,提高处理速度,适用于动态环境。
因子图优化的一个重要特点是使用贝叶斯网络来表示概率关系,通过最大化后验概率来进行优化。具体来说,因子图优化通过构建误差模型和协方差矩阵,使用第三方库(如GTSAM)进行因子的添加、误差函数的构建和优化求解。
总结来说,图优化适用于静态环境,计算量大,处理速度慢;而因子图优化适用于动态环境,计算量小,处理速度快。选择哪种方法取决于具体的应用场景和需求。
这是SLAM初学者最容易混淆的概念之一。让我直接给出结论:
因子图是一种建模语言**(问题的表示方式)**
图优化是一种求解方法**(问题的求解方式)**
打个比方:
它们的关系:因子图经过转化后,可以用图优化来求解。
图优化是指将优化问题表示为图的形式,然后通过数值方法求解。这里的"图"指的是由节点和边组成的图结构。
图优化要解决的是非线性最小二乘问题:
min X ∑ i , j ∥ e i j ( x i , x j ) ∥ Λ i j 2 \min_{\mathbf{X}} \sum_{i,j} \| \mathbf{e}_{ij}(\mathbf{x}_i, \mathbf{x}_j) \|^2_{\boldsymbol{\Lambda}_{ij}} Xmini,j∑∥eij(xi,xj)∥Λij2
其中:
图优化的求解通常使用高斯-牛顿法或LM算法:
线性化:在当前估计值处对误差函数进行一阶泰勒展开
e i j ( X + Δ X ) ≈ e i j ( X ) + J i j Δ X \mathbf{e}_{ij}(\mathbf{X} + \Delta \mathbf{X}) \approx \mathbf{e}_{ij}(\mathbf{X}) + \mathbf{J}_{ij} \Delta \mathbf{X} eij(X+ΔX)≈eij(X)+JijΔX
构建正规方程:
H Δ X = − b \mathbf{H} \Delta \mathbf{X} = -\mathbf{b} HΔX=−b
其中 H = ∑ J i j T Λ i j J i j \mathbf{H} = \sum \mathbf{J}_{ij}^T \boldsymbol{\Lambda}_{ij} \mathbf{J}_{ij} H=∑JijTΛijJij, b = ∑ J i j T Λ i j e i j \mathbf{b} = \sum \mathbf{J}_{ij}^T \boldsymbol{\Lambda}_{ij} \mathbf{e}_{ij} b=∑JijTΛijeij
求解线性系统:利用矩阵的稀疏性加速求解
更新: X ← X + Δ X \mathbf{X} \leftarrow \mathbf{X} + \Delta \mathbf{X} X←X+ΔX
迭代直到收敛
因子图是一种概率图模型,用于表示概率分布的因子分解结构。它来自图论和概率论的交叉领域。
因子图由两种节点组成:
因子图表示的是联合概率分布的因子分解:
p ( X ∣ Z ) ∝ ∏ i f i ( X i ) p(\mathbf{X} | \mathbf{Z}) \propto \prod_i f_i(\mathbf{X}_i) p(X∣Z)∝i∏fi(Xi)
其中:
┌───┐ ┌───┐ ┌───┐
│ f1│ │ f2│ │ f3│
└─┬─┘ └─┬─┘ └─┬─┘
│ │ │
┌─▼─┐ ┌─▼─┐ ┌─▼─┐
│ x1│────│ x2│────│ x3│
└───┘ └───┘ └───┘
│ │ │
┌─▼─┐ ┌─▼─┐ ┌─▼─┐
│ g1│ │ g2│ │ g3│
└───┘ └───┘ └───┘
| 维度 | 因子图 | 图优化 |
|---|---|---|
| 层面 | 建模层(Representation) | 求解层(Solver) |
| 本质 | 概率图模型 | 数值优化方法 |
| 来源 | 图论 + 概率论 | 数值分析 + 优化理论 |
| 作用 | 描述变量间的关系 | 求解具体的数值解 |
因子图的"图":
图优化的"图":
因子图的求解:
图优化的求解:
让我用一个生活化的类比帮你理解:
因子图 = 建筑设计图 + 材料清单
图优化 = 施工队 + 施工方法
关系:
在SLAM系统中,两者的关系是这样的:
传感器数据 → 构建因子图(建模) → 转化为图优化问题 → 求解器求解 → 状态估计
↓
HΔx = -b 正规方程
↓
LM/高斯-牛顿迭代
以LIO-SAM为例:
因子图构建阶段:
// 添加IMU预积分因子
graph.add(imuFactor);
// 添加激光里程计因子
graph.add(laserFactor);
// 添加GPS因子
graph.add(gpsFactor);
转化求解阶段:
// 内部将因子图转化为优化问题
// 构建Hessian矩阵
// 调用LM算法求解
optimizer.optimize();
| 工具 | 类型 | 核心功能 | 代表算法 | 使用场景 |
|---|---|---|---|---|
| g2o | 图优化库 | 求解通用图优化问题 | LM、高斯-牛顿 | ORB-SLAM后端 |
| Ceres Solver | 优化库 | 求解非线性最小二乘 | LM、信赖域 | Cartographer、VINS |
| GTSAM | 因子图库 | 构建+求解因子图 | iSAM、贝叶斯树 | LIO-SAM、VINS-Fusion |
| iSAM | 增量平滑库 | 增量式求解因子图 | QR分解 | 大规模SLAM |
注意:GTSAM虽然主打"因子图",但它内部实现了从因子图到数值优化的完整转换。它既提供了建模语言(因子图API),也提供了求解器(优化算法)。
| 对比维度 | 因子图 | 图优化 |
|---|---|---|
| 本质定义 | 概率图模型,表示因子分解 | 数值优化方法,求解最小二乘 |
| 所属领域 | 图论 + 概率论 | 数值分析 + 优化理论 |
| 作用 | 描述"问题是什么" | 解决"怎么求解" |
| 节点类型 | 变量节点 + 因子节点(2种) | 只有变量节点(1种) |
| 数学基础 | 概率论、贝叶斯公式 | 线性代数、牛顿法 |
| 输出 | 概率分布表示 | 最优数值解 |
| 代表工具 | GTSAM、BayesTree | g2o、Ceres Solver |
| SLAM中角色 | 后端建模框架 | 后端求解引擎 |
一句话终极总结:
因子图是"剧本",图优化是"演员"——剧本规定了故事框架,演员负责把故事演出来。好的剧本(因子图)需要好的演员(图优化)才能呈现精彩的效果!