1、课程导入:SLAM问题概述、因子图与非线性优化的关系、课程目标与学习路径

SLAM(Simultaneous Localization and Mapping,同步定位与建图)是移动机器人与自动驾驶领域的核心基础技术。它解决的核心问题是:一个搭载传感器的移动平台,在未知环境中如何同时估计自身位姿并构建环境地图。传统SLAM系统通常被拆解为前端(Front-end)与后端(Back-end)两个模块:前端负责数据关联与帧间位姿估计,后端则负责全局状态优化与误差消除。本课程聚焦于后端优化的数学本质——因子图(Factor Graph)与非线性优化(Nonlinear Optimization),这是现代SLAM系统(如ORB-SLAM3、LIO-SAM、VINS-Fusion)的公共基石。理解这一层,意味着你不再只是“调参工程师”,而是能够设计、改进甚至重构SLAM系统的核心算法工程师。

SLAM 后端核心:因子图与非线性优化关系图 SLAM 系统链路 传感器数据 IMU / 相机 / LiDAR / 轮速计 前端 (Front-end) 特征提取 / 数据关联 / 初始位姿 后端 (Back-end) 因子图构建 + 非线性优化 输出 全局一致轨迹 + 稠密/稀疏地图 闭环检测 (Loop Closure) 回环约束 → 消除累积漂移 触发后端全局优化 因子图与非线性优化核心 因子图 (Factor Graph) x₁ x₂ x₃ 里程计 里程计 回环约束 节点 = 待估计变量 (位姿/路标) 边 = 约束因子 (观测/运动/回环) 非线性优化 目标函数: min Σ‖eᵢ‖² eᵢ = 残差 (观测-预测) 高斯-牛顿 / LM 算法 稀疏矩阵求导 / Schur 消元 课程学习路径 数学基础 李群/李代数 因子图建模 贝叶斯网络 优化求解 GN/LM/稀疏求解 工程实践 g2o / GTSAM / Ceres 前沿扩展 多传感器融合 / 学习型SLAM

1.1 SLAM问题概述:从概率估计到图模型

核心原理:SLAM的数学本质

SLAM问题的标准数学描述是:给定传感器观测序列 \( z_{1:T} \) 和控制输入 \( u_{1:T} \),估计机器人位姿 \( x_{1:T} \) 与环境路标 \( m \) 的联合后验概率 \( P(x_{1:T}, m | z_{1:T}, u_{1:T}) \)。直接求解这个高维联合分布极其困难,因此工程上通常将其转化为最大后验估计(MAP)问题,即寻找使后验概率最大的状态变量取值。由于传感器噪声通常建模为高斯分布,MAP问题进一步转化为最小化负对数后验——一个非线性最小二乘问题。这正是因子图与非线性优化结合的切入点。

因子图的引入动机

因子图是一种二分图模型,由变量节点(Variable Nodes)和因子节点(Factor Nodes)组成。变量节点表示待估计的状态量(如位姿、路标位置),因子节点表示变量之间的约束关系(如运动模型、观测模型、回环约束)。相比传统的协方差矩阵表示,因子图具有三个显著优势:稀疏性自然表达——每个因子只连接少量变量,对应雅可比矩阵的稀疏结构;增量式更新友好——新增观测只需在图中添加因子,无需重建全局结构;模块化设计——不同传感器(IMU、相机、LiDAR)的约束可以独立建模为不同类型的因子,便于多传感器融合。

对比维度 传统滤波方法 (EKF) 因子图 + 非线性优化
状态表示 均值 + 协方差矩阵(稠密) 稀疏图结构(变量 + 因子)
更新方式 递归预测-更新,仅保留当前状态 批量/增量优化,保留全部历史信息
回环处理 需要额外策略,易发散 天然支持,回环因子直接加入图
计算复杂度 O(n²) 协方差更新 O(n^1.5) ~ O(n²) 稀疏求解
多传感器融合 需要手工推导联合观测方程 各传感器独立因子,组合灵活

案例拆解:单目视觉SLAM中的因子图构建

以ORB-SLAM3为例,其因子图包含三类核心因子:IMU预积分因子连接相邻两帧位姿,约束相对运动;视觉重投影因子连接关键帧位姿与地图点,约束观测关系;回环因子连接当前帧与历史帧,消除累积漂移。当系统检测到回环时,新增一个回环因子,触发全局Bundle Adjustment(BA)优化。整个过程体现了因子图“增量构建、批量优化”的核心思想。实际工程中,因子图的规模可达数万个节点、数十万个因子,但得益于稀疏结构,现代求解器(如GTSAM、g2o)仍能实时运行。

经验提醒:初学者常混淆“因子图”与“贝叶斯网络”。因子图是贝叶斯网络的因子分解表示,两者在数学上等价,但因子图更便于表达优化问题中的残差项。在SLAM中,我们通常从贝叶斯网络出发,通过因子分解得到因子图,再转化为非线性最小二乘问题。

1.2 因子图与非线性优化的关系:从图到最小二乘

核心原理:因子图如何转化为优化问题

因子图本身只是概率模型的图形化表示,真正驱动SLAM后端运行的是其对应的非线性优化问题。每个因子 \( f_i(\theta_i) \) 对应一个残差项 \( e_i(\theta_i) \),其中 \( \theta_i \) 是因子连接的变量集合。假设噪声服从高斯分布,因子可写为:

f_i(θ_i) ∝ exp(-0.5 * ‖e_i(θ_i)‖²_Σi)

其中 \( Σ_i \) 是信息矩阵(噪声协方差的逆)。整个因子图的联合概率为所有因子的乘积,取负对数后得到优化目标:

min Σ_i ‖e_i(θ_i)‖²_Σi

这是一个典型的非线性最小二乘问题。求解该问题的核心步骤包括:线性化(在当前位置处对残差做一阶泰勒展开)、构建正规方程(\( J^TΣ^{-1}J Δx = -J^TΣ^{-1}e \))、求解稀疏线性系统(利用Cholesky分解或QR分解)。

判断方法:何时选择因子图优化而非滤波

在实际SLAM系统设计中,需要根据应用场景选择后端方案。以下情况优先选择因子图优化:存在回环检测需求(如室内机器人、自动驾驶);多传感器融合(IMU+视觉+LiDAR);计算资源充足(有GPU或高性能CPU);需要全局一致性(如建图精度要求高)。反之,若计算资源极度受限(如微型无人机)、传感器噪声模型简单、无回环需求,传统EKF滤波仍可胜任。

案例拆解:视觉惯性导航系统(VINS)中的因子图设计

以VINS-Fusion为例,其因子图包含:IMU预积分因子(约束相邻帧的相对位姿与速度)、视觉特征因子(约束关键帧与路标点)、回环因子(约束当前帧与历史帧)、边缘化因子(保留旧状态的信息)。在优化过程中,系统采用滑动窗口策略,仅优化窗口内的关键帧,窗口外的状态通过边缘化(Marginalization)转化为先验因子。这种设计在保证精度的同时控制了计算量。实际运行中,VINS-Fusion在嵌入式平台(如Jetson TX2)上可达到30Hz的优化频率,充分体现了因子图+稀疏优化的工程优势。

风险提示:因子图优化并非万能。当系统存在错误的回环匹配时,错误的回环因子会“污染”整个优化结果,导致地图漂移甚至发散。因此,工程中必须配合鲁棒核函数(如Huber核)和回环验证机制(如几何一致性检查)来降低误匹配风险。

1.3 课程目标与学习路径:从理论到工程落地

核心原理:本课程的知识体系架构

本课程共30章,按“数学基础 → 因子图建模 → 优化求解 → 工程实践 → 前沿扩展”五层递进设计。第一层(第1-5章)夯实数学基础,包括李群李代数、概率图模型、稀疏线性代数;第二层(第6-12章)深入因子图建模,涵盖视觉因子、IMU因子、回环因子、边缘化技术;第三层(第13-20章)讲解非线性优化算法,从高斯牛顿到LM算法,再到增量优化(iSAM2);第四层(第21-26章)聚焦工程实践,包括g2o/GTSAM/Ceres的使用、调试技巧、性能调优;第五层(第27-30章)探讨多传感器融合、语义SLAM、学习型SLAM等前沿方向。

学习路径与能力目标

完成本课程后,学习者应达到以下能力:理论层面——能够从概率角度推导SLAM后端的MAP问题,理解因子图与非线性优化的数学等价性;算法层面——能够手写高斯牛顿求解器,理解稀疏矩阵求导与Schur消元的原理;工程层面——能够基于GTSAM或g2o搭建完整的SLAM后端,处理实际传感器数据;创新层面——能够针对特定场景设计新的因子类型或优化策略。

学习阶段 核心内容 实践项目 产出物
基础期 (1-5章) 李代数、概率图、稀疏求解 实现李代数指数映射 数学推导笔记 + 代码
建模期 (6-12章) 视觉/IMU/回环因子 构建小型因子图 因子图可视化工具
优化期 (13-20章) GN/LM/iSAM2 实现稀疏BA求解器 自定义优化器
工程期 (21-26章) g2o/GTSAM/Ceres 跑通VINS-Fusion 完整SLAM后端
前沿期 (27-30章) 多传感器融合、学习型SLAM 设计融合方案 课程项目报告

案例拆解:从零搭建一个因子图SLAM后端

以一个简化的2D激光SLAM为例,展示因子图后端的完整流程。假设机器人搭载2D激光雷达,在平面环境中运动。第一步,定义变量节点:机器人位姿 \( x_i = (x, y, \theta) \),路标点 \( l_j = (x_j, y_j) \)。第二步,定义因子节点:里程计因子连接相邻位姿,约束相对运动;激光观测因子连接位姿与路标,约束距离与角度。第三步,构建优化问题:将所有残差平方和作为目标函数,使用高斯牛顿法迭代求解。第四步,加入回环因子:当机器人回到已知区域时,添加回环约束,重新优化。通过这个案例,可以直观理解因子图从建模到求解的完整链路。

课程学习建议:建议每章学习后完成两个任务:一是用Python/NumPy实现核心算法(如高斯牛顿迭代),二是用现成库(如GTSAM)跑通对应功能。理论推导与工程实现并重,才能真正掌握因子图与非线性优化的精髓。

常见误区与总结复盘

在学习本课程时,常见误区包括:误区一——将因子图优化等同于简单的梯度下降,忽略了稀疏结构利用的重要性;误区二——忽视李群李代数在优化中的关键作用,导致位姿更新方式错误;误区三——不理解边缘化的数学含义,在滑动窗口优化中错误地丢弃历史信息;误区四——过度依赖现成库,缺乏对底层原理的掌握,遇到问题无法定位。本课程将通过大量推导、代码实现和实验对比,帮助学习者避开这些陷阱,建立扎实的SLAM后端知识体系。