1. 课程导入
欢迎进入《单目视觉SLAM系统开发工程》的学习。在正式动手写代码之前,我们需要先建立一张“全局地图”:单目视觉SLAM到底解决什么问题?它从哪里来、现在发展到哪一步、被用在哪些真实产品里,以及这门课会带你走过哪些关键工程节点。只有先看清全局,后续的坐标系变换、特征匹配、后端优化、回环检测才不会变成孤立的知识碎片。
一、核心定义:用一只眼睛边定位边建图
SLAM 是 Simultaneous Localization and Mapping 的缩写,中文常译为“同时定位与建图”。它描述的是这样一个过程:一个运动载体在未知环境中移动,仅依靠自身携带的传感器,一边估计自己的运动轨迹和位姿,一边构建环境的地图。二者互为条件——没有地图就难以精确定位,没有准确定位也无法把观测拼成一致的地图。
单目视觉SLAM(Monocular Visual SLAM)特指仅使用一个普通摄像头作为主要外部传感器的方案。与双目、RGB-D、激光雷达相比,它的硬件成本最低、体积最小、功耗最友好,但代价是:单张图像无法直接恢复绝对尺度,必须通过运动、已知物体尺寸或惯性信息来估计尺度。这也是单目SLAM最本质的难点之一。
从数学上看,它本质上是一个状态估计问题:把相机位姿和地图点坐标作为待估状态,把图像中观测到的特征或像素亮度作为观测,通过最小化重投影误差或光度误差来求解。前端负责从图像中提取可跟踪的信息,后端负责在概率框架下优化状态,回环检测负责消除长期累积的漂移。
二、发展历程:从滤波到优化,从稀疏到稠密
单目视觉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章,整体遵循“先建立坐标系与几何直觉,再打通前端、后端、回环,最后完成系统集成与工程优化”的路线。你可以把它理解为一条从“看懂公式”到“跑通系统”的工程流水线。
具体来说,课程会依次覆盖:相机成像模型与坐标系变换、特征点法与直接法的前端实现、非线性优化与图优化后端、回环检测与全局一致性、单目与IMU的融合、系统线程与数据流设计、标定与同步、轨迹精度评测以及典型故障排查。每一章都会尽量落到可运行的代码、可观察的日志和可复现的实验上。
五、常见误区与学习建议
误区二:认为单目可以独立完成所有任务。单目存在尺度不可观、纯旋转退化、快速运动易丢失等问题,必须理解其边界。
误区三:只调参不分析。轨迹漂移、跟踪丢失、地图重影都有明确的几何或数据原因,盲目调参只会浪费时间。
建议的学习方式是:每学一个模块,都在同一段数据上跑通并观察输出;遇到失败先看数据质量、标定参数和时间戳,再回头看算法假设。课程中会提供一组贯穿始终的示例数据与配置,帮助你建立“输入—处理—输出—评估”的完整直觉。
# 典型单目SLAM系统的输入输出约定(课程示例)
输入: image_0/000000.png ... 000999.png # 灰度图像序列
calib.yaml # 相机内参、畸变系数
输出: trajectory.txt # 每帧位姿 T_wc (4x4)
map_points.ply # 稀疏地图点云
log.txt # 跟踪状态、耗时、内点率
当你完成本课程后,应当能够独立阅读主流单目SLAM开源代码,理解其数据流与优化目标,能够针对具体场景做参数调整与模块替换,并具备从零搭建一个简化版单目视觉SLAM系统的能力。接下来,我们就从最基础的坐标系与相机模型开始,一步步把这张路线图变成可运行的工程。