目录
一、SLAM概述与技术体系
1.1 什么是SLAM
1.2 SLAM的传感器类型
1.3 SLAM系统的完整框架
二、前端里程计:点云配准算法(点云配准 / 扫描匹配)
2.1 配准的核心定义与数学原理
2.2 迭代最近点算法(ICP算法)
2.3 正态分布变换(NDT算法)
2.4 ICP vs NDT 对比
2.5 配准的两阶段策略
2.6 基于特征的配准方法
2.7 深度学习方法
三、后端优化:滤波与图优化
3.1 基于滤波的方法
3.1.1 卡尔曼滤波器(KF)
3.1.2 扩展卡尔曼滤波器(EKF)
3.1.3 无迹卡尔曼滤波器(UKF)
3.1.4 粒子滤波器(PF)
3.2 基于图优化的方法
3.2.1 图优化的核心思想
3.2.2 因子图优化
3.2.3 主流图优化库
3.2.4 g2o的使用流程
3.2.5 iSAM2:增量优化的革命
3.2.6 滤波与图优化的对比
四、IMU预积分
4.1 背景:为什么需要IMU预积分
4.2 预积分的核心思想
4.3 IMU的传感器模型
4.4 预积分量的数学定义
4.5 零偏处理与一阶近似
4.6 IMU预积分在SLAM系统中的应用
五、回环检测
5.1 回环检测的核心意义
5.2 回环检测的核心挑战
5.3 基于视觉特征的方法:词袋模型(BoW)
5.4 基于激光雷达的方法:Scan Context
5.5 深度学习方法
5.6 回环检测与后端优化的关系
六、地图构建
6.1 常见地图类型
6.2 建图的关键问题
七、各技术模块的协同关系
八、主流开源 SLAM 完整框架分类与介绍
8.1 视觉 SLAM 框架(纯相机,单目 / 双目 / RGB-D)
8.2 视觉惯性 VIO 融合框架(相机 + IMU)
8.3 2D 激光 SLAM 框架(室内扫地机、底盘小车)
8.4 3D 激光惯性 LIO 融合框架(室外机器人、无人机测绘)
8.5 多传感器融合前沿框架(视觉 + 激光 + IMU)
8.6 通用后端优化工具库(所有 SLAM 底层依赖)
8.7 框架选型速查表
九、SLAM 全链路高频问题
9.1 SLAM 基础概念简答题
9.2 前端点云配准专项题(ICP/NDT 高频)
9.3 后端优化:滤波类简答题(KF/EKF/UKF/ 粒子滤波)
9.4 后端优化:图优化 & 因子图高频题
9.5 IMU 预积分核心问题
9.6 回环检测全套问题
9.7 地图构建类问答题
9.8 工程故障排查题
一、SLAM概述与技术体系
1.1 什么是SLAM
SLAM全称Simultaneous Localization and Mapping,即同时定位与地图构建。它是指移动机器人在未知环境中,通过搭载的传感器,一边估计自身的运动轨迹(定位),一边构建环境的地图(建图)。
SLAM面临的核心困难在于定位与建图的耦合关系:精确定位需要准确的地图,而构建准确地图又需要精确定位——这是一个“鸡生蛋蛋生鸡”的问题。没有准确的定位与地图,扫地机就无法在房间自主地移动,只能随机乱碰。
1.2 SLAM的传感器类型
SLAM的实现方式与传感器的形式和安装方式密切相关,主要分为激光雷达和视觉两大类。
激光雷达(LiDAR)是最古老、研究也最多的SLAM传感器。它以很高精度测出机器人周围障碍点的角度和距离,精度可达厘米级。主流的2D激光传感器扫描一个平面内的障碍物,适用于平面运动的机器人(如扫地机)。激光的优点是精度高、速度快、计算量不大,容易做成实时SLAM;缺点是价格昂贵。
视觉SLAM主要分为单目、双目(或多目)、RGBD三类。单目相机成本极低,但无法确切地得到深度信息,存在尺度不确定性问题。双目和RGBD相机可以获得深度信息,但计算量更大。
此外,IMU(惯性测量单元)常与视觉或激光雷达结合使用,形成视觉-惯性系统(VIO)或激光-惯性系统(LIO),是当前研究热点之一。
1.3 SLAM系统的完整框架
一个完整的SLAM系统通常包含五个核心模块:
传感器数据获取:采集原始数据,包括激光扫描数据、视频图像数据、点云数据等
前端(里程计/配准):提取特征、进行特征匹配或点云配准,估计设备的初始位姿
后端优化:利用滤波或图优化方法对轨迹和地图进行全局优化,消除累计误差
回环检测:识别是否回到历史位置
地图构建:生成可用于导航的栅格地图、点云地图等
二、前端里程计:点云配准算法(点云配准 / 扫描匹配)
前端里程计的核心任务是估计相邻帧之间的运动。对于激光SLAM来说,最核心的问题就是点云配准——找到两个点云之间的最佳变换矩阵
2.1 配准的核心定义与数学原理
点云配准是求解两个点云之间的刚性变换(旋转矩阵 R 和平移向量 T),使源点云经过变换后与目标点云重合。
(1)刚性变换方程:P′ = R·P + T
P′:变换后的源点云
R:3×3旋转矩阵(满足 RᵀR = I,det(R) = 1)
T:3×1平移向量
P:源点云顶点坐标矩阵(3×N)
(2)目标函数(最小二乘):min_{R,T} Σᵢ ||R·pᵢ + T - qᵢ||²
pᵢ:源点云第 i 个顶点
qᵢ:目标点云对应的匹配顶点
N:匹配点对数量
2.2 迭代最近点算法(ICP算法)
ICP是最简单且易于实现的匹配算法,它用迭代的方法不断地最小化传感器数据和参考环境地图之间的点到点的欧几里得距离。
通俗地讲:ICP算法像拼图时把两块拼图上的点一个一个对齐:先找最近的点配对,算一个变换让它们更靠近,再重新配对,再算变换……反复迭代直到对齐。拼得越准,效果越好;但要是初始位置差太远,可能拼到错误的位置去。
(1)ICP的核心步骤:
寻找对应点:在每一步中,选择离每个扫描点最近的参考点
求解变换:用最小化距离平方和来分别计算旋转和平移
迭代更新:将求解出的变换应用到源点云,重复上述过程直到收敛
(2)ICP的SVD求解方法:
计算源点云和目标点云匹配点对的质心 p̄、q̄
计算协方差矩阵 H = Σᵢ (pᵢ − p̄)(qᵢ − q̄)ᵀ
对 H 进行 SVD 分解,得 H = UΣVᵀ
求解旋转矩阵 R = VUᵀ,平移向量 T = q̄ − R·p̄
(3)算法流程
输入:源点云 P,目标点云 Q,最大迭代次数 max_iter,收敛阈值 ε
输出:旋转矩阵 R,平移向量 t
- 1. 初始化变换矩阵 T(通常设为单位矩阵或使用里程计初值)
- 2. while k < max_iter:
- 3. 对源点云 P 中的每个点,在目标点云 Q 中寻找最近邻点,形成对应点对
- 4. 剔除错误的对应点对(距离阈值、法向量夹角等)[reference:5]
- 5. 基于保留的点对,用 SVD 或四元数法求解最优变换 (R, t)[reference:6]
- 6. 将变换应用到源点云:P = R * P + t
- 7. 计算误差变化量,如果小于阈值 ε,终止迭代
- 8. k = k + 1
- 9. return R, t
(4)ICP的优缺点:
优点:概念简单,易于理解和实现
缺点:
对初始值敏感:如果初始位姿相差太大,容易收敛到局部最优
最近邻搜索耗时(可用KD-Tree加速)
要求两个点云有较大的重叠区域
(5)ICP的变体
Point-to-Plane ICP:误差度量从点到点改为点到平面,收敛更快
GICP(广义ICP):将Point-to-Point和Point-to-Plane统一到概率框架下
VGICP:引入体素化加速
2.3 正态分布变换(NDT算法)
NDT,全称Normal Distributions Transform(正态分布变换),是一种与ICP思路截然不同的点云配准算法。
NDT不像ICP那样使用点云的各个点,而是将位于三维像素内的3D数据点转换为正态分布,把环境用局部概率密度函数(PDF)建模成一个平滑表面。
通俗地讲:NDT算法像看地图而不是看具体房子:先把目标区域划分成网格,统计每个网格里点的分布规律(像天气预报的概率分布),然后看源点云落在哪里概率最高,调整位置让概率最大化。不用一个个点配对,速度快,对噪声不敏感。
(1)NDT的核心步骤:
建立栅格地图:将第一帧点云划分为固定大小的三维像素网格
计算正态分布:对每个网格内的点计算正态分布参数(均值和协方差)
概率最大化:用牛顿法迭代,使得第二帧点云投影至栅格地图得到的概率最大化
(2)算法流程
输入:源点云 P,目标点云 Q,初始变换 T0,最大迭代次数
输出:最优变换 T
- 1. 将目标点云 Q 划分为网格(体素)
- 2. 对每个有效网格(点数 ≥ 3),计算均值 μ 和协方差 Σ,拟合高斯分布 N(μ, Σ)[reference:19]
- 3. 初始化变换 T = T0
- 4. while 未收敛:
- 5. 将源点云 P 通过变换 T 投射到网格中
- 6. 对每个变换后的点,找到其所在网格的高斯分布,计算概率得分[reference:20]
- 7. 用牛顿法优化评分函数,计算变换更新量 ΔT[reference:21]
- 8. T = T + ΔT
- 9. 如果 ΔT 小于阈值,终止迭代
- 10. return T
(3)NDT的优点:
无需最近邻搜索:只需在初始化时计算一次网格分布,后续高效
对初始值要求相对宽松:收敛域通常比ICP更宽
天然抗噪:用分布描述区域,对离群点和噪声不敏感
评分函数连续可微,可用牛顿法等高效优化
(4)NDT的缺点:
网格大小是超参数:太大精度下降,太小计算量增加
在空旷或结构化程度低的场景中效果差
2.4 ICP vs NDT 对比
2.5 配准的两阶段策略
点云配准通常分为粗配准和精配准两个阶段:
粗配准:在点云相对位姿完全未知的情况下,找到一个可以让两块点云相对近似的变换矩阵,为精配准提供良好的初始值
精配准:在粗配准的基础上,让点云之间的空间位置差异最小化
常见的组合策略是先用NDT进行粗估计,再用ICP进行精配准校正。
2.6 基于特征的配准方法
通过从扫描点云中提取角点、平面点等特征来提高计算效率。典型方法包括提取SIFT、FPFH等特征描述子,进行特征匹配后用RANSAC剔除异常点,最后求解变换。这类方法不依赖初始姿态,但特征提取耗时较长。
2.7 深度学习方法
深度学习技术在点云配准领域也展现出巨大潜力,出现了多种基于深度学习的点云配准网络,在配准精度和计算效率方面不断取得突破。
三、后端优化:滤波与图优化
后端优化的角色是接收前端带噪声的数据,结合全局历史信息,通过优化算法将局部误差抹平,得出全局最优的轨迹和地图。
3.1 基于滤波的方法
基于滤波的方法源于贝叶斯估计理论,将SLAM问题建模为状态估计问题,通过预测-更新两步递推地估计机器人位姿。
3.1.1 卡尔曼滤波器(KF)
卡尔曼滤波适用于线性高斯系统,通过贝叶斯推断或最大后验估计(MAP)两种方式推导。其经典五大公式包括:运动方程、观测方程、卡尔曼增益因子、估值预测方程、更新预测状态误差。
3.1.2 扩展卡尔曼滤波器(EKF)
EKF通过线性化来处理非线性系统——在估计点处对非线性函数f和h做线性化逼近。EKF-SLAM在激光SLAM早期研究中应用广泛,其理论已经非常成熟。
EKF-SLAM的缺点:
不易表示回环
线性化误差严重
必须维护路标点的协方差矩阵,导致较大的空间与时间开销
3.1.3 无迹卡尔曼滤波器(UKF)
UKF与EKF不同,它不是对非线性方程做线性化逼近,而是用无迹变换在估计点附近确定采样点(Sigma点),用这些采样点表示的高斯密度来近似状态的概率密度函数。这种方法在某些情况下比EKF具有更高的精度。
3.1.4 粒子滤波器(PF)
粒子滤波适用于非线性非高斯系统,用一组带权重的随机样本(粒子)来近似状态的后验概率分布。FastSLAM是粒子滤波在SLAM中的典型代表,它将SLAM问题分解为定位(用粒子滤波)和建图(用EKF)两个子问题。
基于滤波的方法的总体评价:在室内或小范围场景中效果不错,但只考虑当前位姿状态和当前观测,不具有回环检测能力,存在线性化误差以及更新效率低等问题。
3.2 基于图优化的方法
图优化已成为现代SLAM后端的主流范式。通俗地讲:图优化像在纸上画一张“关系网”:每个位姿是一个点(顶点),每两个位姿之间的约束是一条线(边),线的长短表示误差大小。目标就是调整所有点的位置,让整张网的总变形量最小。g2o、Ceres、GTSAM就是不同牌子的“绘图工具”。
3.2.1 图优化的核心思想
图优化SLAM用节点和边形成的图来表示一系列的移动机器人位姿和约束:
节点(顶点):代表待估计的状态变量(如各时刻的位姿、速度、IMU零偏等)
边(因子):代表传感器测量对状态形成的约束(如预积分约束、位姿先验约束、帧间位姿约束等)
图优化SLAM的本质可以转换为非线性最小二乘问题进行求解。
3.2.2 因子图优化
因子图是图优化的一种重要形式,它将SLAM问题表示为一个因子图,其中节点表示变量(如相机位姿和路标),边表示因子(如观测和运动约束)。
因子图优化的核心优势在于增量式优化:每次加入新的观测或运动数据时,只对新增部分进行优化,而不需要重新计算整个图,显著减少计算量。
iSAM(增量平滑与建图)是因子图优化的重要实现,其内部使用基于概率的贝叶斯树,每次增加约束时,只调整和当前节点“关系比较密切”的节点,既保障了精度,也使得耗时不会随问题规模增大而增大。
3.2.3 主流图优化库
g2o(General Graph Optimization):德国波恩大学开发,基于图优化框架
GTSAM(Georgia Tech Smoothing and Mapping):佐治亚理工学院开发,基于因子图和贝叶斯网络
Ceres:Google开发的通用非线性优化引擎
iSAM/iSAM2:支持实时增量优化
GTSAM与g2o/Ceres的根本区别:Ceres和g2o采用传统的图优化框架,而GTSAM基于因子图和贝叶斯推断。
3.2.4 g2o的使用流程
g2o在数学上主要分为四个求解步骤:
- 1. 创建线性求解器 LinearSolver
- 2. 创建 BlockSolver,用线性求解器初始化
- 3. 创建总求解器 Solver,从 GN/LM/DogLeg 中选择迭代策略
- 4. 创建稀疏优化器 SparseOptimizer
- 5. 定义图的顶点(优化变量)和边(误差项),添加到优化器中
- 6. 设置优化参数,执行优化
使用g2o的核心:记住节点为优化变量,边为误差项。
3.2.5 iSAM2:增量优化的革命
通俗地讲:iSAM2像在纸上画关系网时,每次新增一个点只调整周围受影响的部分,而不是把整张网全部重新画一遍。这让SLAM可以实时处理大规模地图。
传统图优化每次都要重新求解整个问题,计算量随地图规模增长而爆炸。iSAM2(增量平滑与建图)解决了这个问题。
核心思想:
使用贝叶斯树数据结构,只更新受新观测影响的变量
支持增量式变量重排序和流体重线性化,实现亚秒级的大规模环境更新
特别适合实时SLAM系统,如LeGO-LOAM等
3.2.6 滤波与图优化的对比
基于图优化的方案考虑了移动载体历程中全部的位姿状态和环境观测信息,可独立出前端实现并行计算,是一种更为高效和普适的优化方法。
四、IMU预积分
4.1 背景:为什么需要IMU预积分
IMU(惯性测量单元)输出频率极高(通常100-500Hz),而激光雷达或相机频率较低(通常10-20Hz)。如果在两个关键帧之间对IMU数据进行传统积分,会产生大量冗余的状态变量(每个IMU时刻都有一个状态),计算量巨大。
IMU预积分由Lupton和Sukkarieh于2012年提出,后由Forster等人(2015, 2017)进一步发展。
4.2 预积分的核心思想
预积分的核心思想是:将两个关键帧之间的所有IMU测量值积分到一个相对的运动增量(ΔR, Δv, Δp)上。这个增量与两帧之间的绝对状态(位姿、速度)无关,只与状态变量中的零偏有关。
这种设计的巨大优势在于:当对状态进行优化调整时,无需重新积分所有IMU数据,只需根据偏差的变化对预积分量进行一阶近似修正即可。
用比喻来说:传统IMU积分像是每吃一口饭都记录一次状态,而预积分像是把一顿饭的总热量一次性算好。
4.3 IMU的传感器模型
IMU的传感器模型由三部分组成:
IMU真值:真实的加速度和角速度
零偏(bias):传感器的系统性偏差
噪声:测量中的随机误差
IMU通过对加速度对时间双重积分计算位移量,对角速度时间积分得到旋转量,从而估计位姿。
4.4 预积分量的数学定义
在时间间隔 [tₖ, tₖ₊₁] 内,对多个IMU测量值进行积分,得到三个预积分量:
旋转预积分 ΔRᵢⱼ:两帧之间的相对旋转
速度预积分 Δvᵢⱼ:两帧之间的相对速度变化
位置预积分 Δpᵢⱼ:两帧之间的相对位移
这些量定义在机器人坐标系(通常是IMU坐标系)下的相对增量。
4.5 零偏处理与一阶近似
预积分量是在假设偏差不变的情况下计算的。但在优化过程中,偏差是会被微调估计的。
关键技巧:当偏差变化了 δb 时,不需要重新积分,而是使用一阶线性近似来更新预积分量:
雅可比矩阵 ∂ΔR/∂b、∂Δv/∂b、∂Δp/∂b 可以在积分过程中通过递推得到
利用这些雅可比矩阵,可以用零偏残差对预积分量进行快速修正
这正是预积分理论高效的核心所在。
4.6 IMU预积分在SLAM系统中的应用
IMU预积分通常作为因子被插入到因子图优化框架中。以LIO-SAM为例:
来源:两个激光雷达关键帧之间的所有IMU数据
数学形式:构建一个残差项,表示预积分测量值与状态预测值之间的差异
作用:紧耦合IMU数据,提供帧间高频率的平滑运动约束,并在线估计IMU的偏差
在GTSAM中,从4.0版本开始就内置了IMU预积分相关的接口。预积分前需要事先知道IMU的噪声、重力方向等参数。
五、回环检测
5.1 回环检测的核心意义
通俗地讲,回环检测就是机器人两次经过同一个场景时,能够识别出这是同一个场景。(像一个人走了一大圈后突然发现“咦,这棵树我好像见过!”——通过比较当前看到的场景和历史记录,判断是否回到了老地方。一旦确认,就能把之前累积的“走路误差”一次性修正过来。)
回环检测在SLAM中扮演着“全局数据关联”的角色,其重要意义在于:
构建全局一致的地图:有了时隔更加久远的约束,可以消除累计漂移
重定位:在跟踪丢失的时候,可以通过回环检测重新定位
形象的比喻:回环检测就像把一根已经被拉长的弹簧,拉回到更贴近真实位置的状态。
5.2 回环检测的核心挑战
回环检测面临两个核心问题:
感知偏差(假阳性):把不同的场景判断为同一个(误检测)
感知变异(假阴性):把同一个场景判断为不同(漏检测)
评价指标包括:
准确率(Precision)= TP / (TP + FP):检测正确的数量 / 检测的总数量
召回率(Recall)= TP / (TP + FN):实际检测出来的数量 / 理应检测出来的数量
通常准确率和召回率呈矛盾关系,一般对准确率的要求更高,这是回环检测的严格性导致的。
5.3 基于视觉特征的方法:词袋模型(BoW)
词袋模型是视觉SLAM中最主流的回环检测方法。
(1)字典的构建:
字典实际就是对所有图片中的特征进行提取(如“人”、“车”等),这些是单词
对全部图像特征提取所有单词后构成一个字典
(2)词袋的表示:
词袋说的是一帧图像中能够提取出来的单词
例如,字典 D = [x₁, x₂, x₃, x₄],一帧图像有2个x₁和1个x₃
该图像的词袋向量为 A = [2, 0, 1, 0]
(3)相似度计算:
s(a, b) = 1 − (1/W)·||a − b||₁
通过比较两帧图像词袋向量之间的距离来判断相似度
具体实现时,通常预先加载一个词袋字典树,通过这个字典树将图像中的每一局部特征点的描述子转换为一个单词,统计整张图像的词袋向量。
5.4 基于激光雷达的方法:Scan Context
Scan Context是一种基于3D点云的全局描述子,近年来在激光雷达SLAM的回环检测中表现出色。
(1)核心思想:
将3D空间划分为多个同心圆环和扇形区域
统计每个区域内点的高度分布信息
形成一种二维的直方图表示,即Scan Context
(2)主要优势:
旋转不变性:通过环形划分和高度统计,有效消除了点云旋转对特征表示的影响
计算效率高:计算过程简洁,适合实时应用
鲁棒性强:对点云的密度变化、噪声干扰等具有一定的容忍度
(3)在回环检测中的实现流程:
历史帧存储:在SLAM过程中,存储关键帧的Scan Context描述子及其位姿信息
当前帧匹配:将当前点云转换为Scan Context描述子,与历史帧进行相似度比较(如余弦相似度)
回环确认:当相似度超过阈值时,进一步通过几何验证(如ICP算法)确认回环的准确性
位姿图优化:利用确认的回环信息对位姿图进行优化,消除累积误差
其他基于激光雷达的方法还包括基于局部描述子(如FPFH)、基于分割的方法(如SegMatch、SegMap)等。
5.5 深度学习方法
近年来,深度学习在回环检测中得到了广泛应用,例如使用SuperPoint等深度特征提取网络替代传统手工特征、采用EigenPlaces网络提取图像的全局特征、基于孪生胶囊网络的回环检测方法等。
5.6 回环检测与后端优化的关系
回环检测为后端优化提供全局约束。当检测到回环时,系统会在因子图中添加一个回环因子,将当前帧与历史关键帧之间的位姿约束加入优化问题。通过图优化来修正整个轨迹的累计误差,最终生成全局一致的地图。
六、地图构建
通俗地讲:建图像用收集到的所有照片和位置信息,拼出一张完整的地图。可以是简单的2D格子图(栅格地图)、精细的3D点云图,或者是省内存的八叉树地图。
地图构建模块根据处理后的数据生成环境地图。
6.1 常见地图类型
6.2 建图的关键问题
稠密度 vs 内存:稠密点云地图信息丰富但内存占用大,八叉树地图通过递归划分平衡了精度和内存
语义信息:传统地图缺乏语义信息,近年来越来越多的工作结合深度学习构建语义地图
动态物体处理:动态场景中需要剔除动态物体的影响
七、各技术模块的协同关系
SLAM的完整技术体系可以概括为以下协同关系:
这六大模块相互配合,配准提供局部约束,IMU预积分提供高频运动约束,回环检测提供全局约束,后端优化整合所有约束求解全局最优轨迹,共同构成了现代SLAM系统的完整技术体系。
八、主流开源 SLAM 完整框架分类与介绍
前文完整讲解了 SLAM 五大核心模块(前端配准、后端优化、IMU 预积分、回环检测、建图),各类开源 SLAM 框架正是基于上述理论搭建的工程化系统,按照传感器类型分为四大类:视觉 VSLAM、视觉惯性 VIO、激光 SLAM、激光惯性 LIO,同时配套通用图优化工具库。
8.1 视觉 SLAM 框架(纯相机,单目 / 双目 / RGB-D)
(1)ORB-SLAM3(行业基准)
- 传感器:单目 / 双目 / RGB-D + IMU,室内外通用
- 核心技术:ORB 特征点法、DBoW3 词袋回环、全局 BA 光束平差、多地图重定位
- 后端优化:g2o、LM 迭代;支持纯视觉 / 视觉惯性紧耦合
- 优势:鲁棒性强、回环完善、跟踪丢失可重定位,学术标准评测基准
- 适用:AR/VR、手持 RGB-D(D435i)、小型机器人定位
(2)DSO(Direct Sparse Odometry)
- 传感器:纯单目相机
- 核心技术:直接法,最小化像素光度误差,不提取特征点
- 优势:无纹理环境也能跟踪;缺点:无完整回环模块,纯里程计,漂移累积严重
(3)OpenVSLAM
- 轻量化 ORB-SLAM 衍生框架,支持鱼眼全景相机,代码更轻量化,嵌入式部署友好
8.2 视觉惯性 VIO 融合框架(相机 + IMU)
(1)VINS-Mono / VINS-Fusion
- 传感器:单目 / 双目 / RGB-D + IMU,支持多相机融合
- 核心技术:IMU 预积分、滑动窗口紧耦合优化、DBoW 回环检测
- 后端:滑动窗口非线性最小二乘(LM)
- 优势:单目解决尺度模糊,无人机、室内机器人主流方案;VINS-Fusion 支持激光融合
- 短板:大规模场景全局优化弱,长距离漂移大于 ORB-SLAM3
(2)OKVIS
- 早期经典 VIO,多关键帧全局 BA,适合小范围高精度定位
8.3 2D 激光 SLAM 框架(室内扫地机、底盘小车)
(1)Cartographer(谷歌工业级)
- 传感器:2D/3D 激光雷达,支持 IMU 融合
- 核心技术:子图匹配、NDT 粗配准 + ICP 精配准、全局图优化、内置回环检测
- 优势:ROS 原生适配、闭环修正能力极强、支持超大场景建图,仓储机器人标配
- 后端:基于图优化,增量式优化,适配 iSAM2 增量思想
(2)Gmapping(基于粒子滤波 FastSLAM)
- 早期经典滤波方案,仅 2D 激光,依赖轮式里程计;小房间效果好,大场景粒子退化严重
(3)Hector-SLAM
- 无里程计依赖,仅依靠激光扫描匹配;无回环模块,长时间漂移大,适合短距离场景
8.4 3D 激光惯性 LIO 融合框架(室外机器人、无人机测绘)
(1)LOAM / LeGO-LOAM(3D 激光里程计开山)
- LOAM:点线 / 点面 ICP 配准,分离高频里程计与低频全局优化
- LeGO-LOAM:增加地面分割、特征分类,去除地面无效点,低算力嵌入式可用
(2)LIO-SAM(因子图优化标杆)
- 传感器:3D 激光 + IMU 紧耦合
- 核心:IMU 预积分 + GTSAM 因子图增量优化、Scan Context 激光回环
- 优势:室内外通用、动态环境鲁棒、回环修正漂移效果极强,自动驾驶 / 无人机主流
(3)FAST-LIO2
- 基于迭代卡尔曼滤波(IESKF),ikd-Tree 加速点云搜索,轻量化、实时性极强,低端嵌入式可跑
8.5 多传感器融合前沿框架(视觉 + 激光 + IMU)
(1)FAST-LIVO2:激光 + 视觉 + IMU 三传感器紧耦合,兼顾几何精度与纹理特征
(2)LVI-SAM:LIO-SAM+VINS-Mono 融合,激光负责几何、视觉辅助回环与尺度约束
8.6 通用后端优化工具库(所有 SLAM 底层依赖)
不属于完整 SLAM 系统,但所有框架的优化核心:
- g2o:通用图优化库,支持 GN/LM/DogLeg 三种迭代策略,ORB-SLAM、VINS 底层使用
- GTSAM:基于因子图、贝叶斯估计,LIO-SAM、iSAM2 增量优化原生依赖
- Ceres Solver:Google 通用非线性最小二乘库,BA、PnP、ICP 通用求解器
8.7 框架选型速查表
| 框架 | 传感器组合 | 核心优势 | 适用场景 |
|---|---|---|---|
| ORB-SLAM3 | RGB-D+IMU(D435i深度相机) | 回环完善、全局精度高 | 室内长期定位、AR、稠密重建 |
| VINS-Fusion | RGB-D+IMU | 轻量、单目尺度稳定 | 无人机、小型移动机器人 |
| Cartographer | 2D 激光 | 2D 栅格导航、ROS 友好 | 室内底盘机器人自主导航 |
| LIO-SAM | 3D 激光 + IMU | 室外大范围、抗动态物体 | 室外巡检、测绘机器人 |
九、SLAM 全链路高频问题
9.1 SLAM 基础概念简答题
(1)什么是 SL?定位与建图为什么互相耦合?
答:
SLAM 全称同步定位与地图构建,机器人在未知环境依靠传感器同时估算自身位姿、构建环境地图。 耦合矛盾:精准定位需要完整地图做匹配;精准建图需要准确机器人位姿还原环境,二者互相依赖,只能迭代求解。
(2)SLAM 五大核心模块分别是什么,各自职责?
答:
- 传感器数据预处理:去畸变、去噪、时间同步、点云裁剪 / 图像均衡;
- 前端里程计:帧间运动估计,输出局部位姿,带来累计漂移;
- 后端优化:融合多帧约束全局修正轨迹,分滤波、图优化两大路线;
- 回环检测:识别历史场景,添加远距离全局约束消除长期漂移;
- 地图管理:生成 / 存储 / 更新栅格、点云、八叉树、语义地图。
(3)激光 SLAM 与视觉 SLAM 核心优缺点对比?
答:
- 激光 LiDAR:测距精度厘米级,不受光照影响;成本高,无纹理语义信息,室内室外通用。
- 视觉相机:成本极低,可提取纹理、语义;单目存在尺度不确定性,强光 / 黑暗 / 无纹理场景失效。
- 主流方案:激光 + IMU(LIO)、视觉 + IMU(VIO)融合取长补短。
(4)紧耦合、松耦合多传感器融合区别?
答:
- 松耦合:先单独运行激光 / 视觉里程计,输出位姿再送入滤波融合,计算简单,误差易累积;
- 紧耦合:原始激光点 / 图像特征 + IMU 预积分共同作为优化残差,联合求解所有状态,精度更高、算力消耗更大。
(5)什么是累计漂移?如何抑制?
答:
前端仅依靠相邻帧匹配,微小误差逐帧叠加,长时间轨迹严重偏移; 抑制手段:后端全局优化、回环检测、高频 IMU 约束、多传感器融合。
9.2 前端点云配准专项题(ICP/NDT 高频)
(1)ICP 完整迭代步骤,两大致命缺陷?
答:
- 步骤:近邻匹配→剔除远距离外点→SVD 求解 R/T→变换源点云→迭代至收敛;
- 缺陷:①极度依赖良好初始位姿,初值差极易陷入局部最优;②重叠区域不足、噪声大时失效。
(2)Point-to-Point ICP vs Point-to-Plane ICP,哪个精度更高?
答:
Point-to-Plane 利用点到平面距离做误差,平面场景收敛更快、精度更高,激光 SLAM 主流使用;Point-to-Point 仅适合稀疏离散点。
(3)NDT 正态分布变换核心思路,对比 ICP 优势?
答:
将目标点云栅格化,每个栅格拟合三维高斯分布;最大化源点落在栅格分布的概率求解变换。 优势:无需逐点近邻搜索、收敛范围更大、对噪声 / 低重叠鲁棒,可直接粗配准。
(4)粗配准 + 精配准标准流水线,为什么不能只用 ICP?
答:
先用 FPFH 特征 / RANSAC/NDT 粗配准得到初始变换,再用 Point-to-Plane ICP 精修; 仅 ICP 无可靠初值,两帧偏移大时直接发散,无法收敛到正确位姿。
(5)基于特征的配准(FPFH)流程,适用场景?
答:
提取点云 FPFH33 维描述子→汉明距离匹配→RANSAC 剔除外点求解变换;适合两帧完全无重叠初值、大场景远距离配准,缺点特征提取耗时。
9.3 后端优化:滤波类简答题(KF/EKF/UKF/ 粒子滤波)
(1)EKF-SLAM 核心弊端,现在很少使用的原因?
答:
- 一阶泰勒线性化引入误差,强非线性旋转场景持续漂移;
- 协方差矩阵随路标数量爆炸,内存、算力开销巨大;
- 天然难以处理回环约束,每次回环需要全量更新状态。
(2)粒子滤波 FastSLAM 核心思想,适用场景?
答:
将 SLAM 拆分为定位(粒子滤波)+ 每粒子独立地图;每个粒子携带自身轨迹与局部地图,适合小规模室内 2D 栅格建图(Gmapping);缺点大规模场景粒子数量暴增,实时性差。
(3)滤波方法和图优化本质区别?
答:
- 滤波:仅保留当前时刻状态,只利用历史到当前的递推观测,无法全局修正旧轨迹;
- 图优化:保存全部历史位姿,所有帧间、回环、IMU 约束联合全局优化,能一次性消除长期漂移,现代 SLAM 主流。
9.4 后端优化:图优化 & 因子图高频题
(1)图优化顶点、边分别代表什么?
答:
- 顶点(变量):机器人各时刻 SE (3) 位姿、IMU 零偏、速度、相机内参;
- 边(残差约束):帧间配准约束、IMU 预积分约束、回环约束、GPS 观测约束。
(2)g2o、Ceres、GTSAM 三者选型区别?
答:
- g2o:通用图优化框架,自定义边灵活,激光 SLAM 常用;
- Ceres:通用非线性最小二乘,BA 视觉优化友好,无原生因子图;
- GTSAM:基于贝叶斯因子图,内置 IMU 预积分、回环模块,增量优化 iSAM2 原生支持。
(3)iSAM2 增量优化相比传统批量图优化优势?
答:
批量优化每次新增帧都全量重算,地图越大越卡;iSAM2 依靠贝叶斯树,仅更新受新观测影响的局部变量,大规模场景实时可用,LIO-SAM、VINS 广泛使用。
(4)LM、GN、DogLeg 三种迭代策略区别?
答:
- 高斯牛顿法(GN):忽略海森对角,收敛快,初始误差大易发散;
- 列文伯格 - 马夸尔特算法(LM):添加自适应阻尼 λ,误差大时梯度下降、误差小时高斯牛顿,鲁棒通用;
- 狗腿算法(DogLeg):分别计算梯度、GN 步长,择优更新,收敛稳定性优于 LM。
9.5 IMU 预积分核心问题
(1)为什么必须做 IMU 预积分,直接逐帧积分有什么问题?
答:
IMU 频率 100~500Hz,激光 / 相机仅 10~20Hz;两关键帧间数百组 IMU,直接全部放入优化变量维度爆炸。 预积分把区间内全部 IMU 累积为 ΔR、Δv、Δp 单一相对增量,仅作为一条约束加入图,大幅降维。
(2)预积分如何处理 IMU 零偏 bias 更新?
答:
预积分计算时假设 bias 固定;优化后 bias 发生微小变化,依靠积分过程递推得到的雅可比矩阵一阶近似修正预积分量,不需要重新遍历所有 IMU 数据。
(3)IMU 预积分在 SLAM 中起到什么作用?
答:
- 高频平滑帧间运动,填补激光 / 相机低帧率间隙;
- 提供旋转约束,解决点云退化、单目尺度模糊;
- 作为强约束抑制里程计漂移,动态场景稳定跟踪。
(4)预积分残差如何构建,属于哪种图优化边?
答:
残差 = 预积分测量增量 - 由两帧位姿速度推算出的理论增量;在 GTSAM/g2o 中自定义 IMU 预积分因子边。
9.6 回环检测全套问题
(1)回环检测核心价值,没有回环会出现什么问题?
答:
识别机器人重返历史场景,添加远距离位姿约束,全局抹平长期累计漂移;无回环时长时间行走地图严重撕裂、轨迹偏移。
(2)视觉词袋 BoW 原理,优缺点?
答:
提取图像 ORB 特征聚类生成单词,用词袋向量表征图像,向量相似度判断回环;优点检索快,弱纹理场景失效,易出现感知混淆(假阳性)。
(3)激光 Scan Context 回环描述子核心逻辑?
答:
将 3D 点云划分为同心扇形栅格,统计每个栅格高度分布生成二维直方图;天然旋转不变,纯激光场景首选,不受光照影响。
(4)回环两大误差:假阳性、假阴性怎么权衡?
答:
- 假阳性(误判同一场景):添加错误约束,地图直接崩坏,工程优先牺牲召回率保证高准确率;
- 解决方案:粗匹配后 ICP 几何校验、多帧连续验证再添加回环因子。
(5)回环检测完整流水线?
答:
提取全局描述子(BoW/Scan Context)→历史库相似度检索候选帧→几何匹配验证(ICP/PnP)→计算两帧相对变换→向图中添加回环约束→后端全局优化修正轨迹。
9.7 地图构建类问答题
(1)四种主流地图适用场景?
答:
- 栅格地图(2D):扫地机、室内机器人导航,存储占用小;
- 稀疏点云地图:SLAM 定位匹配用,只保留特征点;
- 稠密点云 / 网格地图:测绘、可视化,内存巨大;
- 八叉树地图:平衡精度与内存,支持占据查询,导航避障通用。
(2)动态物体如何处理,避免地图污染?
答:
- 前端过滤:聚类剔除短时移动障碍物;
- 时序滤波:多次观测才标记为占据,瞬时动态点舍弃;
- 语义分割:深度学习识别行人、车辆直接剔除。
(3)高精地图与 SLAM 实时地图区别?
答:
SLAM 实时地图边跑边建,允许小幅漂移;高精地图离线多轮优化、全局无漂移,用于自动驾驶定位先验
9.8 工程故障排查题
(1)前端配准频繁发散,排查顺序?
答:
- 传感器时间不同步,激光与 IMU 时间戳偏移;
- 初始位姿初值偏差过大,缺少粗配准;
- 场景平面单一、退化环境,缺少旋转约束;
- 点云预处理噪声过多,未做滤波裁剪。
(2)长时间建图地图撕裂,根本解决手段?
答:
漂移累积→启用回环检测;IMU 噪声过大→调高预积分权重、标定 IMU 零偏;缺少全局约束→增大后端优化窗口。
(3)IMU 与激光外参不准会出现什么现象?
答:
帧间运动估计扭曲,配准误差持续增大,轨迹快速漂移,回环匹配成功率大幅下降。
(4)回环检测经常漏检(召回率低)优化方案?
答:
扩大描述子检索库、降低相似度阈值、多尺度生成描述子、结合 IMU 里程缩小检索范围。