3. 视觉SLAM入门

视觉SLAM(Simultaneous Localization and Mapping,同时定位与建图)要回答的核心问题是:一个搭载相机的移动平台,在未知环境中运动时,能否一边估计自己的位姿轨迹,一边构建环境的地图?这个问题的难点在于“鸡生蛋、蛋生鸡”——定位需要地图作为参照,建图又需要准确的位姿作为基准,两者互为条件、必须同时求解。

从概率角度看,SLAM 是在求解后验概率 P(轨迹, 地图 | 观测, 控制)。其中“轨迹”是相机在各时刻的位姿序列,“地图”是环境中的路标点或稠密结构,“观测”是图像中提取的特征或像素,“控制”是轮速计、IMU 等运动输入。所有视觉SLAM系统,本质上都是对这一后验概率的不同近似与分解方式。

一、SLAM 问题的数学定义

设离散时刻 t = 1, 2, …, K,记 xk 为 k 时刻相机位姿,yj 为第 j 个地图路标,uk 为 k-1 到 k 时刻的运动输入,zk,j 为 k 时刻对路标 j 的观测。SLAM 的运动方程与观测方程可写为:

x_k = f(x_{k-1}, u_k) + w_k      // 运动模型:位姿如何随运动变化
z_{k,j} = h(y_j, x_k) + v_{k,j}   // 观测模型:路标在图像中如何成像
// w_k, v_{k,j} 分别为运动噪声与观测噪声,通常假设为零均值高斯

这两个方程把 SLAM 变成了一个状态估计问题:已知 u 和 z,估计 x 与 y。若把全部待估量记为状态向量,问题就转化为大规模非线性最小二乘或滤波推断。

二、前端与后端:SLAM 的两大支柱

现代视觉SLAM普遍采用“前端 + 后端”的分工架构。前端负责从图像中提取可用的几何与运动信息,后端负责在概率框架下做全局一致的优化。

  • 前端(视觉里程计):提取特征点、做帧间匹配、估计相邻帧的相对位姿,并三角化出初始地图点。它决定系统的实时性与短期精度,但会累积漂移。
  • 后端(优化/滤波):接收前端给出的位姿与路标估计,结合回环检测结果,做全局或滑动窗口的位姿图优化、BA(Bundle Adjustment),消除累积误差。
  • 回环检测:判断相机是否回到曾经到过的位置,为后端提供“长程约束”,是消除漂移的关键。
  • 建图:把优化后的位姿与观测融合,输出稀疏点云、稠密地图或语义地图。
经典视觉SLAM系统流程与关键模块 传感器输入 RGB / RGB-D / IMU 前端:视觉里程计 特征提取 · 帧间匹配 位姿估计 · 三角化 后端:优化与滤波 位姿图优化 · BA 滑动窗口 · 边缘化 回环检测 词袋 / 描述子检索 相似性判断 地图表示 稀疏点云 / 稠密地图 栅格 / 语义地图 输出 相机轨迹 环境地图 位姿与地图反馈 关键数据流说明 ① 前端从连续图像中估计相对运动,输出初始位姿与地图点; ② 后端在优化框架下融合运动约束与回环约束,修正全局轨迹; ③ 回环检测提供长程约束,是消除累积漂移的关键; ④ 优化后的位姿与观测共同生成地图,地图又反哺定位与回环判断。

三、地图表示:从稀疏到稠密,从几何到语义

地图是 SLAM 的输出,也是定位的参照。不同任务对地图的需求差异很大,常见表示形式如下表:

地图类型数据结构典型用途优点局限
稀疏特征点地图三维路标点集合定位、BA优化轻量、实时性好无法直接用于导航避障
稠密点云/网格地图点云、TSDF、Mesh重建、避障几何完整存储与计算开销大
栅格占据地图二维/三维栅格路径规划便于规划算法使用分辨率与内存矛盾
语义地图带标签的对象/区域场景理解、人机交互高层语义信息依赖语义分割精度

四、经典视觉SLAM流程与关键模块

以 ORB-SLAM 系列为代表的经典视觉SLAM,通常包含以下模块:传感器数据读取与预处理、前端跟踪、局部建图、回环检测、全局优化与地图输出。各模块之间通过共享的位姿与地图点数据库耦合,形成闭环。

学习建议:初学阶段不必急于推导所有公式,先建立“前端负责短期相对运动、后端负责长期全局一致、回环负责消除漂移”的直觉,再逐步深入 BA、位姿图、边缘化等具体算法。

五、案例场景:室内机器人建图

假设一台搭载 RGB-D 相机的室内服务机器人,在房间中缓慢移动。前端从深度图中提取 ORB 特征并匹配,估计相邻帧位姿;后端维护一个滑动窗口,对最近若干帧做局部 BA;当机器人绕行一圈回到起点附近时,回环检测通过词袋模型识别出相似场景,后端加入回环约束并做全局位姿图优化,轨迹漂移被显著修正。最终输出一张稀疏点云地图与优化后的轨迹,供后续导航与语义标注使用。

六、常见误区与复盘

  • 误区一:把前端当全部。 只做视觉里程计而不做后端优化,误差会随时间无界累积,长距离运行必然漂移。
  • 误区二:忽视回环检测。 没有回环约束,后端只能在局部保持一致,无法消除全局漂移。
  • 误区三:地图越稠密越好。 地图表示应与任务匹配,导航任务用栅格或语义地图往往比原始稠密点云更实用。
  • 复盘要点: 遇到轨迹漂移时,先检查前端特征匹配质量与标定参数,再检查后端优化窗口与回环阈值,最后检查传感器时间同步与运动模型是否合理。
注意: 视觉SLAM对相机标定、时间同步和光照变化非常敏感。内参误差、卷帘快门畸变、曝光突变都可能导致前端跟踪失败,进而使整个系统崩溃。工程落地时,标定与数据预处理往往比算法本身更耗时。