视觉SLAM十四讲:全攻略 —— 逻辑脉络、学习路线与Ubuntu 18.04实践准备 📚 视觉SLAM十四讲:全攻略 —— 逻辑脉络、学习路线与Ubuntu 20.04实践准备 🎯 写在前面 本文是《视觉SLAM十四讲》的深度导读。我们将彻底解析全书的逻辑结构,拆解“数学基础”与“SLAM技术”两大模块的内在联系,并通过完整的流程图绘制 ,帮你建立起SLAM系统的整体认知。同时,针对选择 Ubuntu 20.04 作为学习环境的初学者,提供第一天必须完成的环境准备与思维导图。
📑 目录 1. 背景 在机器人及自动驾驶领域,SLAM(Simultaneous Localization and Mapping,同时定位与地图构建) 技术被誉为“皇冠上的明珠”。然而,对于初学者而言,SLAM 的门槛往往不在于单一的知识点,而在于如何将 数学理论(李群、优化) 与 工程实践(C++、Linux、OpenCV) 融会贯通。
高翔等人所著的《视觉SLAM十四讲》正是这样一本“神书”,它打破了理论与实践的壁垒。但是,面对书中庞大的知识体系,很多读者在翻开第一页时就迷失了方向。
今天,作为学习的第一天,我们不做繁琐的公式推导,而是站在高处,俯瞰全貌 。我会带您串联全书的目录结构,理清每一讲在SLAM系统中的“生态位”,并基于 Ubuntu 20.04 给出最稳妥的起手式。
2. 全书逻辑架构图 《视觉SLAM十四讲》的结构非常清晰,就像是在组装一个智能机器人 。全书分为两大核心篇章:数学基础篇(第1~6讲) 和 SLAM技术篇(第7~14讲) 。
下面是我绘制的全书逻辑架构图,清晰地展示了每一讲在整个SLAM系统中的位置和作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 graph TD subgraph "第一部分:数学基础篇" A1["第1讲:前言"] --> A2["第2讲:初识SLAM"] A2 --> A3["第3讲:三维空间刚体运动<br>旋转矩阵/四元数/Eigen"] A3 --> A4["第4讲:李群与李代数<br>Sophus/求导模型"] A4 --> A5["第5讲:相机与图像<br>针孔模型/OpenCV/点云"] A5 --> A6["第6讲:非线性优化<br>状态估计/Ceres/g2o"] end subgraph "第二部分:SLAM技术篇" B1["第7讲:视觉里程计1-特征点法<br>ORB/对极几何/PnP/ICP"] --> B2["第8讲:视觉里程计2-直接法<br>光流/直接法/稀疏稠密"] B2 --> B3["第9讲:实践章-设计前端<br>VO框架搭建/数据结构"] B3 --> B4["第10讲:后端1-BA优化<br>Bundle Adjustment/g2o求解"] B4 --> B5["第11讲:后端2-位姿图<br>Pose Graph/gtsam"] B5 --> B6["第12讲:回环检测<br>词袋模型/DBoW3/相似度计算"] B6 --> B7["第13讲:建图<br>单目稠密重建/八叉树地图"] B7 --> B8["第14讲:现在与未来<br>开源方案对比/深度学习结合"] end A6 --> B1 B8 --> A1 style A1 fill:#f9f,stroke:#333,stroke-width:2px style A2 fill:#f9f,stroke:#333,stroke-width:2px style A3 fill:#bbf,stroke:#333,stroke-width:2px style A4 fill:#bbf,stroke:#333,stroke-width:2px style A5 fill:#bbf,stroke:#333,stroke-width:2px style A6 fill:#bbf,stroke:#333,stroke-width:2px style B1 fill:#bfb,stroke:#333,stroke-width:2px style B2 fill:#bfb,stroke:#333,stroke-width:2px style B3 fill:#bfb,stroke:#333,stroke-width:2px style B4 fill:#bfb,stroke:#333,stroke-width:2px style B5 fill:#bfb,stroke:#333,stroke-width:2px style B6 fill:#bfb,stroke:#333,stroke-width:2px style B7 fill:#bfb,stroke:#333,stroke-width:2px style B8 fill:#f96,stroke:#333,stroke-width:2px
2. 学习路线图(修正版) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 graph LR subgraph "第一阶段:基础入门(第1-6讲)" D1["第1-2讲<br>SLAM概述"] --> D2["第3讲<br>刚体运动/Eigen"] D2 --> D3["第4讲<br>李代数/Sophus"] D3 --> D4["第5讲<br>相机模型/OpenCV"] D4 --> D5["第6讲<br>非线性优化/Ceres/g2o"] end subgraph "第二阶段:核心技术(第7-13讲)" D5 --> E1["第7-8讲<br>前端VO<br>特征点法+直接法"] E1 --> E2["第9讲<br>实践:设计前端"] E2 --> E3["第10-11讲<br>后端优化<br>BA+位姿图"] E3 --> E4["第12讲<br>回环检测"] E4 --> E5["第13讲<br>建图"] end subgraph "第三阶段:进阶拓展" E5 --> F1["第14讲<br>开源方案/未来"] F1 --> F2["ORB-SLAM2/3<br>源码阅读"] F2 --> F3["视觉惯性SLAM<br>VINS/ORB-SLAM3"] end
【流程图解读】 :
粉色部分(第1-2讲) :SLAM的概述和入门,让你知道学什么、为什么学蓝色部分(第3-6讲) :数学基础,打造SLAM的“兵器库”——包括刚体运动描述(第3讲)、优化求导工具(第4讲)、相机模型(第5讲)、非线性优化方法(第6讲)绿色部分(第7-13讲) :SLAM核心技术,按照前端→后端→回环→建图 的经典流程展开橙色部分(第14讲) :展望未来,了解行业前沿3. 经典视觉SLAM框架详解(附完整流程图) 经典视觉SLAM框架包含五个核心模块:传感器信息读取、前端视觉里程计、后端优化、回环检测、建图 。下面这张完整的SLAM框架流程图,清晰地展示了各模块之间的关系和数据流向:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 graph TB subgraph 传感器层 S1[相机<br>单目/双目/RGB-D] --> P[预处理<br>畸变校正/灰度化] S2[IMU<br>惯性测量单元] --> P end subgraph 前端VO P --> F1[特征提取<br>ORB/SIFT/FAST] F1 --> F2[特征匹配<br>相邻帧关联] F2 --> F3[运动估计<br>PnP/ICP/对极几何] F3 --> F4[局部地图<br>构建与维护] end subgraph 后端优化 F4 --> B1[图优化框架<br>g2o/Ceres/GTSAM] B2[回环约束] --> B1 B1 --> B3[全局位姿优化<br>Bundle Adjustment] end subgraph 回环检测 F2 --> L1[词袋模型<br>DBoW3字典] L1 --> L2[相似度计算] L2 --> L3[回环验证<br>几何一致性检查] L3 --> B2 end subgraph 建图 B3 --> M1[稀疏地图<br>路标点云] B3 --> M2[稠密地图<br>深度估计/八叉树] B3 --> M3[语义地图<br>目标识别+SLAM] end style S1 fill:#f9f,stroke:#333,stroke-width:2px style S2 fill:#f9f,stroke:#333,stroke-width:2px style F1 fill:#bbf,stroke:#333,stroke-width:2px style F2 fill:#bbf,stroke:#333,stroke-width:2px style F3 fill:#bbf,stroke:#333,stroke-width:2px style B1 fill:#bfb,stroke:#333,stroke-width:2px style L1 fill:#f96,stroke:#333,stroke-width:2px style L2 fill:#f96,stroke:#333,stroke-width:2px style M1 fill:#ffc,stroke:#333,stroke-width:2px style M2 fill:#ffc,stroke:#333,stroke-width:2px
下面我们逐一拆解每个模块:
3.1 传感器信息读取 视觉SLAM的输入源主要包括:
单目相机(Monocular) :结构简单、成本低,但存在尺度不确定性 ,无法确定物体的真实大小双目相机(Stereo) :通过基线估计深度,类似人眼,但计算量大,需要GPU/FPGA加速深度相机(RGB-D) :通过ToF或结构光直接测量深度,室内效果好,但易受日光干扰IMU(惯性测量单元) :测量角速度和加速度,与视觉互补,提高鲁棒性预处理步骤包括:图像畸变校正、灰度化、去噪、时间戳对齐等。
3.2 前端视觉里程计(VO) VO的任务是估算相邻图像间相机的运动 ,以及建立局部地图 。它包含以下子步骤:
特征提取 :从图像中提取关键特征点(如ORB、SIFT、FAST)特征匹配 :在连续帧或多视角间进行特征匹配,获取相对运动信息运动估计 :利用匹配的特征点对,估计摄像头的相对位姿变化,常用方法包括PnP算法、EPnP、对极几何、ICP 等VO只计算相邻时刻的运动,不关心历史信息,因此必然存在累积漂移 ——你会发现原本直的走廊变成了斜的,原本90°的直角变成了歪的。为消除漂移,我们需要回环检测和后端优化。
3.3 后端优化(Optimization) 后端接收前端估计的相机位姿和回环检测信息,通过非线性优化 得到全局一致的轨迹和地图。主要工作包括:
图优化 :将位姿和地图点作为图的节点,通过优化算法(如最小二乘)最小化重投影误差关键帧选择与管理 :为了提高计算效率,后端会选择关键帧进行优化,管理地图点的添加、删除Bundle Adjustment(BA) :同时优化相机位姿和地图点位置后端处理的是带噪声的数据,目标是估计整个系统的状态及其不确定性 ——这被称为最大后验概率估计。
3.4 回环检测(Loop Closure) 回环检测的核心是判断机器人是否到达过先前的位置 。它的作用:当检测到回环时,将信息提供给后端,后端把轨迹和地图调整到符合回环检测结果的样子,从而彻底消除累积漂移 。
实现方法:
场景识别 :通过图像描述子(如词袋模型Bag of Words 、深度学习特征)识别当前帧是否与历史帧对应同一场景全局优化 :一旦检测到闭环,通过全局图优化修正累计的定位误差3.5 建图(Mapping) 根据估计的轨迹,建立与任务要求对应的地图。地图类型包括:
度量地图 :强调精确表示位置关系稀疏地图 :由路标组成,计算量小,适合定位稠密地图 :建模所有看到的东西,可用于导航,但存储量大拓扑地图 :强调元素之间的关系(节点和边),不适用于复杂结构语义地图 :将语义分割结果融入SLAM,构建带语义标签的地图4. 相机模型与传感器(附分类对比图) 相机是视觉SLAM的“眼睛”。下面这张相机分类对比图,直观展示了不同类型相机的特点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 graph TD subgraph 相机类型 A[视觉SLAM相机] --> B[单目相机 Monocular] A --> C[双目相机 Stereo] A --> D[深度相机 RGB-D] A --> E[其他类型] end subgraph 单目特点 B --> B1[优点:结构简单/成本低] B --> B2[缺点:尺度不确定性<br>无法确定真实深度] B --> B3[原理:通过运动形成视差] end subgraph 双目特点 C --> C1[优点:可测深度/室内外通用] C --> C2[缺点:计算量大/标定复杂] C --> C3[原理:基线估计深度] end subgraph 深度相机特点 D --> D1[优点:直接测量深度/计算量小] D --> D2[缺点:范围窄/易受日光干扰] D --> D3[原理:ToF/结构光] end subgraph 其他类型 E --> E1[全景相机<br>360°视野] E --> E2[事件相机<br>像素变化触发/响应快] E --> E3[红外相机<br>夜视/多传感器融合] end style B fill:#f9f,stroke:#333,stroke-width:1px style C fill:#bbf,stroke:#333,stroke-width:1px style D fill:#bfb,stroke:#333,stroke-width:1px style E fill:#f96,stroke:#333,stroke-width:1px
相机标定 是必不可少的一步:
内参标定 :内参数矩阵,将相机坐标系3D点映射到2D成像平面外参标定 :外参数矩阵,将相机坐标系映射到世界坐标系常用方法 :张正友标定法、OpenCV、kalibr5. 数学基础与工程实践的映射关系 很多读者觉得SLAM的数学难,是因为不知道这些数学工具在代码中到底怎么用。下面这张映射图,清晰地展示了每一讲数学知识对应的工程实践:
数学基础(书中章节) 对应的工程库/工具 在SLAM中的作用 第3讲:三维空间刚体运动 Eigen(几何模块) 表示相机位姿(旋转矩阵、四元数、变换矩阵) 第4讲:李群与李代数 Sophus 对旋转进行求导,用于优化问题 第5讲:相机与图像 OpenCV 相机模型实现、图像处理、特征提取 第6讲:非线性优化 Ceres、g2o、GTSAM 后端优化框架,最小化重投影误差 第12讲:回环检测 DBoW3 词袋模型实现,计算图像相似度 第13讲:建图 PCL(点云库)、OctoMap 点云处理、八叉树地图构建
学习建议 :不要孤立地学数学,而要带着“这个数学工具在代码里怎么写”的问题去学。例如,学完第3讲的四元数,立刻去Eigen里写几行代码,看看四元数如何初始化、如何旋转一个向量。
6. Ubuntu 20.04 环境搭建全流程 为什么选择Ubuntu 20.04?虽然现在Ubuntu 20.04/22.04已发布,但对于《视觉SLAM十四讲》(第一版及第二版的部分依赖)而言,Ubuntu 20.04是兼容性最广、遇到“坑”最少的选择 。许多旧版本库(如OpenCV 3、Ceres 1.13.0)在18.04上可通过apt或简单编译完美安装,而在更高版本上往往需要处理复杂的依赖冲突。
下面是第一天必须完成的环境初始化:
6.1 基础环境配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 sudo apt-get updatesudo apt-get upgrade -ysudo apt-get install -y build-essential cmake git pkg-configsudo apt-get install -y vim htop net-tools terminatormkdir -p ~/projects/slambook_codecd ~/projects/slambook_codegcc --version cmake --version git --version
6.2 安装Eigen3(第3讲必备) 1 2 3 4 5 6 sudo apt-get install -y libeigen3-devdpkg -l | grep eigen
6.3 安装Sophus(第4讲必备) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 cd ~/projects/slambook_codegit clone https://github.com/strasdat/Sophus.git cd Sophusgit checkout a621ff mkdir build && cd buildcmake .. make -j4 sudo make installls /usr/local/include/sophus/
6.4 安装OpenCV(第5讲必备) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 sudo apt-get install -y libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install -y python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-devcd ~/projects/slambook_codewget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.16.zip unzip opencv.zip cd opencv-3.4.16mkdir build && cd buildcmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. make -j4 sudo make installpkg-config --modversion opencv
6.5 安装Ceres Solver(第6讲必备) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 sudo apt-get install -y liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-devcd ~/projects/slambook_codewget -O ceres-solver.zip https://github.com/ceres-solver/ceres-solver/archive/1.14.0.zip unzip ceres-solver.zip cd ceres-solver-1.14.0mkdir build && cd buildcmake .. make -j4 sudo make installls /usr/local/lib/libceres.so
6.6 克隆《十四讲》配套代码 1 2 3 4 5 6 7 8 9 cd ~/projects/slambook_codegit clone https://github.com/gaoxiang12/slambook.git git clone https://github.com/gaoxiang12/slambook2.git ls slambook/
6.7 测试第一个程序(第2讲示例) 1 2 3 4 5 6 7 8 cd ~/projects/slambook_code/slambook/ch2cmake . make ./helloSLAM
如果看到”Hello SLAM”输出,恭喜你,环境配置成功!
7. 总结与学习建议 7.1 学习路线图 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 graph LR subgraph "第一阶段:基础入门(第1-6讲)" D1["第1-2讲<br>SLAM概述"] --> D2["第3讲<br>刚体运动/Eigen"] D2 --> D3["第4讲<br>李代数/Sophus"] D3 --> D4["第5讲<br>相机模型/OpenCV"] D4 --> D5["第6讲<br>非线性优化/Ceres/g2o"] end subgraph "第二阶段:核心技术(第7-13讲)" D5 --> E1["第7-8讲<br>前端VO<br>特征点法+直接法"] E1 --> E2["第9讲<br>实践:设计前端"] E2 --> E3["第10-11讲<br>后端优化<br>BA+位姿图"] E3 --> E4["第12讲<br>回环检测"] E4 --> E5["第13讲<br>建图"] end subgraph "第三阶段:进阶拓展" E5 --> F1["第14讲<br>开源方案/未来"] F1 --> F2["ORB-SLAM2/3<br>源码阅读"] F2 --> F3["视觉惯性SLAM<br>VINS/ORB-SLAM3"] end
7.2 学习建议 理论与实践交替进行 :每学完一讲的数学理论,立刻运行配套代码,看代码如何实现理论亲手调试代码 :不要只运行成功就完事,试着改参数、加注释、看报错,这是最好的学习方式建立知识图谱 :学完一章后,画出这一章在SLAM框架中的位置和作用善用工具 :使用Excalidraw、ProcessOn等工具绘制流程图,加深理解多问为什么 :比如“为什么旋转矩阵不能用加法?”“为什么需要李代数?”7.3 第一天总结 今天我们完成了《视觉SLAM十四讲》的逻辑脉络梳理 和环境搭建 。您不需要记住所有细节,但请务必记住这张 “大脑中的SLAM地图” :
**传感器(相机/IMU)**读取数据 → 前端VO 估计相邻帧运动 → 后端优化 全局调整轨迹 → 回环检测 消除累积漂移 → 建图 生成可用地图
而所有这些模块,都建立在第3-6讲的数学基础 之上。
下一步计划 : 从明天(第二天)开始,我们将正式进入【第2讲与第3讲:初识SLAM与三维空间数学】的实战解析。我们会手把手教你写第一段SLAM代码,并彻底弄懂旋转矩阵和Eigen库的使用。
如果您准备好了,请评论区留言“开工”,我们明天见!
📚 参考文献 [1] ProcessOn. 自主导航流程图[EB/OL]. 2026-02-05.
[2] Prototype___. 视觉SLAM学习路线[EB/OL]. CSDN博客, 2023-01-01.
[3] zfjbit. SLAM学习:视觉SLAM框架[EB/OL]. CSDN博客, 2019-07-11.
[4] 视觉SLAM学习路线[EB/OL]. CSDN文库.
[5] 高翔, 张涛, 等. 视觉SLAM十四讲:从理论到实践[M]. 电子工业出版社, 2017.
[6] 程小六. 视觉惯性SLAM:理论与源码解析[M]. 电子工业出版社, 2022.
[7] Stereolabs. VSLAM - Mapping Tutorial[EB/OL].
版权声明 :本文为原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。