1、SLAM技术概览:什么是SLAM?视觉SLAM的发展历程、主流方案对比、课程项目目标与整体架构
1.1 到底什么是SLAM?
SLAM,全称是 Simultaneous Localization and Mapping。中文叫“同步定位与地图构建”。
说白了,就是让一个机器人(或者手机、无人机)在完全陌生的环境里,一边走路,一边给自己定位,一边把周围的地图画出来。你想想看,这其实是个“先有鸡还是先有蛋”的问题——要知道自己在哪里,得先有地图;要建地图,又得先知道自己的位置。SLAM 就是同时解决这两个问题。
我个人习惯把 SLAM 比作“蒙眼走迷宫”。你蒙上眼睛,手里拿根棍子探路。每走一步,你都在估计自己走到了哪,同时也在脑子里更新迷宫的布局。视觉SLAM 就是用摄像头代替你的眼睛,用算法代替你的大脑。
核心三要素:
- 传感器数据:摄像头拍到的图像(或IMU数据)
- 状态估计:当前的位置和姿态(6自由度)
- 地图表示:稀疏点云、稠密点云、八叉树地图等
1.2 视觉SLAM的发展历程
视觉SLAM 不是一天建成的。我入行那会儿,大家还在用滤波方法,算力也跟不上。来,我带你快速过一遍关键节点。
| 时期 | 代表方法 | 特点 |
|---|---|---|
| 2000年代初期 | EKF-SLAM、FastSLAM | 基于滤波器,计算量小但精度有限,容易发散 |
| 2010年左右 | PTAM(Parallel Tracking and Mapping) | 首次将跟踪和建图分开并行,开创性工作 |
| 2015年 | ORB-SLAM、LSD-SLAM | 基于特征点/直接法的成熟方案,实时性大幅提升 |
| 2017年至今 | VINS-Mono、ORB-SLAM3、DROID-SLAM | 多传感器融合、深度学习加持、鲁棒性更强 |
我记得刚接触 PTAM 时,觉得它能把跟踪和建图分开跑,简直太聪明了。但 PTAM 有个致命问题——场景一大就容易丢。后来 ORB-SLAM 引入了“共视图”和“回环检测”,才真正解决了大场景下的漂移问题。
1.3 主流方案对比:ORB-SLAM、VINS、LSD-SLAM
这三个方案,可以说是视觉SLAM 领域的“三驾马车”。我每个都亲手调过,踩过不少坑。下面给你做个横向对比。
| 方案 | 核心思想 | 传感器 | 优点 | 缺点 |
|---|---|---|---|---|
| ORB-SLAM | 基于ORB特征点,三线程(跟踪、局部建图、回环检测) | 单目/双目/RGB-D | 精度高、回环检测强、代码规范 | 特征提取耗时、弱纹理场景易失败 |
| VINS-Mono | 视觉+IMU紧耦合,基于滑动窗口优化 | 单目+IMU | 对快速运动鲁棒、初始化快 | 需要IMU标定、计算量较大 |
| LSD-SLAM | 直接法,不提取特征点,直接对像素灰度操作 | 单目 | 能建半稠密地图、在纹理丰富场景效率高 | 对光照敏感、容易漂移 |
我的建议: 如果你是初学者,先从 ORB-SLAM2 入手。代码结构清晰,社区活跃,文档也多。我曾经在 ORB-SLAM2 上改了一个月,才把它的跟踪线程彻底搞明白。VINS 适合做无人机或手持设备,因为 IMU 能补足视觉的短板。LSD-SLAM 嘛,现在用得少了,但它的直接法思想对理解视觉里程计很有帮助。
1.4 课程项目目标
这门课,我们不搞“纸上谈兵”。目标是带着你从零搭建一个完整的视觉SLAM 工程。具体来说:
- 能跑起来:在真实数据集(如 TUM、EuRoC)上运行你的 SLAM 系统
- 能看懂代码:每一行核心代码,我都会拆开讲,包括为什么这么写
- 能自己改:学会调参、加模块、换传感器
- 能避坑:我会把我在项目中遇到的“血泪史”都告诉你
注意: 这门课不是“调包侠”教程。我们会手写前端(特征匹配、光流)、后端(图优化、BA)、回环检测(词袋模型)。你需要有 C++ 基础和基本的线性代数知识。如果这些还不熟,建议先补一下。
1.5 整体架构
整个课程分为 30 章,我把它画成了一张流程图。你看一眼,心里就有数了。
嗯,这张图就是咱们这 30 章的路线图。第一阶段打基础,第二阶段写核心代码,第三阶段做系统集成,第四阶段实战跑通。每一章我都会给出可运行的代码示例,以及我在实际项目中踩过的坑。
一句话总结: 学完这门课,你不仅能看懂 ORB-SLAM 的源码,还能自己写一个简化版。更重要的是,你会具备独立解决 SLAM 工程问题的能力。
好,第一章就到这里。下一章我们直接上手数学工具——李群和李代数。别怕,我会用最直观的方式讲清楚。