1. 课程导入

欢迎进入《单目视觉SLAM系统开发工程》的学习。在正式动手写代码之前,我们需要先建立一张“全局地图”:单目视觉SLAM到底解决什么问题?它从哪里来、现在发展到哪一步、被用在哪些真实产品里,以及这门课会带你走过哪些关键工程节点。只有先看清全局,后续的坐标系变换、特征匹配、后端优化、回环检测才不会变成孤立的知识碎片。

一、核心定义:用一只眼睛边定位边建图

SLAM 是 Simultaneous Localization and Mapping 的缩写,中文常译为“同时定位与建图”。它描述的是这样一个过程:一个运动载体在未知环境中移动,仅依靠自身携带的传感器,一边估计自己的运动轨迹和位姿,一边构建环境的地图。二者互为条件——没有地图就难以精确定位,没有准确定位也无法把观测拼成一致的地图。

单目视觉SLAM(Monocular Visual SLAM)特指仅使用一个普通摄像头作为主要外部传感器的方案。与双目、RGB-D、激光雷达相比,它的硬件成本最低、体积最小、功耗最友好,但代价是:单张图像无法直接恢复绝对尺度,必须通过运动、已知物体尺寸或惯性信息来估计尺度。这也是单目SLAM最本质的难点之一。

单目视觉SLAM的核心任务可以概括为:输入一段连续图像序列,输出相机在每一时刻的6自由度位姿(3个位置 + 3个姿态),并同时得到环境的三维结构(稀疏点云、半稠密或稠密地图)。

从数学上看,它本质上是一个状态估计问题:把相机位姿和地图点坐标作为待估状态,把图像中观测到的特征或像素亮度作为观测,通过最小化重投影误差或光度误差来求解。前端负责从图像中提取可跟踪的信息,后端负责在概率框架下优化状态,回环检测负责消除长期累积的漂移。

二、发展历程:从滤波到优化,从稀疏到稠密

单目视觉SLAM并非一蹴而就,它大致经历了四个阶段,每个阶段都对应着方法论上的跃迁。

  • 滤波时代(2000年前后):以EKF-SLAM为代表,把位姿和路标点放入同一个状态向量,用扩展卡尔曼滤波递推更新。优点是计算框架清晰,缺点是状态维度随路标点增长而爆炸,难以支撑大规模场景。
  • 关键帧与光束法平差时代(2007—2014):PTAM首次把跟踪与建图拆成两个线程,并提出关键帧机制,使实时BA成为可能。随后的ORB-SLAM系列把特征法单目SLAM推向工程成熟,加入回环检测、重定位和地图复用。
  • 直接法与半直接法时代(2014—2018):LSD-SLAM、DSO等不再依赖特征点,而是直接最小化像素光度误差,能够在弱纹理区域工作,并输出半稠密或稠密地图。SVO则用稀疏直接法实现高速跟踪。
  • 学习与多传感器融合时代(2018至今):深度学习方法被用于特征提取、深度估计、位姿回归和回环检测;同时单目与IMU融合(VIO)成为移动端和无人机的主流方案,显著提升了尺度可观测性和鲁棒性。

理解这条脉络的意义在于:你会在课程中同时接触到特征法、直接法和VIO的思想,而不是只学一种“过时”或“唯一正确”的方案。工程选型永远取决于场景、算力和精度要求。

三、应用场景:单目SLAM的真实落点

单目SLAM的价值在于“用最便宜的传感器做最通用的空间感知”。以下是几类典型场景:

应用领域典型任务对单目SLAM的关键要求
移动机器人/AGV室内导航、避障、自主巡逻实时性、尺度一致性、长期漂移可控
无人机室内悬停、轨迹规划、视觉定位轻量化、与IMU紧耦合、快速运动鲁棒
AR/VR头显6DoF跟踪、虚实配准低延迟、高精度、重定位与地图持久化
智能手机AR测量、室内导航、三维重建低功耗、单目+IMU、端侧实时运行
自动驾驶辅助低成本视觉里程计、泊车定位大场景、动态干扰、与GPS/轮速融合

可以看到,单目SLAM很少单独使用,它通常作为“视觉惯性里程计”或“多传感器定位系统”的核心模块。课程中我们会反复强调:单目提供的是相对几何信息,IMU提供的是高频运动先验,二者互补才能得到稳定可用的尺度与姿态。

四、课程整体学习路线:从原理到可运行系统

本课程共30章,整体遵循“先建立坐标系与几何直觉,再打通前端、后端、回环,最后完成系统集成与工程优化”的路线。你可以把它理解为一条从“看懂公式”到“跑通系统”的工程流水线。

单目视觉SLAM系统开发工程 · 学习路线 基础与几何 坐标系 · 相机模型 · 李群李代数 前端跟踪 特征提取 · 匹配 · 光流 · 位姿估计 后端优化 BA · 图优化 · 滑窗 · 边缘化 回环与地图 词袋 · 重定位 · 全局一致 单目+IMU 融合 预积分 · 尺度恢复 · 紧耦合VIO 系统集成与工程化 数据流 · 线程 · 标定 · 实时性 评测、排障与复盘 轨迹误差 · 漂移分析 · 失败案例 最终目标:构建一个可运行、可调试、可扩展的单目视觉SLAM系统 从图像输入 → 位姿输出 → 地图维护 → 精度评估的完整闭环

具体来说,课程会依次覆盖:相机成像模型与坐标系变换、特征点法与直接法的前端实现、非线性优化与图优化后端、回环检测与全局一致性、单目与IMU的融合、系统线程与数据流设计、标定与同步、轨迹精度评测以及典型故障排查。每一章都会尽量落到可运行的代码、可观察的日志和可复现的实验上。

五、常见误区与学习建议

误区一:把SLAM当成“纯算法”而忽视工程。真实系统里,时间同步、标定误差、线程竞争、内存增长往往比公式更容易让系统崩溃。
误区二:认为单目可以独立完成所有任务。单目存在尺度不可观、纯旋转退化、快速运动易丢失等问题,必须理解其边界。
误区三:只调参不分析。轨迹漂移、跟踪丢失、地图重影都有明确的几何或数据原因,盲目调参只会浪费时间。

建议的学习方式是:每学一个模块,都在同一段数据上跑通并观察输出;遇到失败先看数据质量、标定参数和时间戳,再回头看算法假设。课程中会提供一组贯穿始终的示例数据与配置,帮助你建立“输入—处理—输出—评估”的完整直觉。

# 典型单目SLAM系统的输入输出约定(课程示例)
输入: image_0/000000.png ... 000999.png   # 灰度图像序列
      calib.yaml                          # 相机内参、畸变系数
输出: trajectory.txt                      # 每帧位姿 T_wc (4x4)
      map_points.ply                      # 稀疏地图点云
      log.txt                             # 跟踪状态、耗时、内点率

当你完成本课程后,应当能够独立阅读主流单目SLAM开源代码,理解其数据流与优化目标,能够针对具体场景做参数调整与模块替换,并具备从零搭建一个简化版单目视觉SLAM系统的能力。接下来,我们就从最基础的坐标系与相机模型开始,一步步把这张路线图变成可运行的工程。