视觉SLAM十四讲:全攻略 —— 逻辑脉络、学习路线与Ubuntu 18.04实践准备

📚 视觉SLAM十四讲:全攻略 ------ 逻辑脉络、学习路线与Ubuntu 20.04实践准备

🎯 写在前面

本文是《视觉SLAM十四讲》的深度导读。我们将彻底解析全书的逻辑结构,拆解"数学基础"与"SLAM技术"两大模块的内在联系,并通过完整的流程图绘制 ,帮你建立起SLAM系统的整体认知。同时,针对选择 Ubuntu 20.04 作为学习环境的初学者,提供第一天必须完成的环境准备与思维导图。

📑 目录

  • [1. 背景](#1. 背景)
  • [2. 全书逻辑架构图](#2. 全书逻辑架构图)
  • [3. 经典视觉SLAM框架详解(附完整流程图)](#3. 经典视觉SLAM框架详解(附完整流程图))
    • [3.1 传感器信息读取](#3.1 传感器信息读取)
    • [3.2 前端视觉里程计(VO)](#3.2 前端视觉里程计(VO))
    • [3.3 后端优化(Optimization)](#3.3 后端优化(Optimization))
    • [3.4 回环检测(Loop Closure)](#3.4 回环检测(Loop Closure))
    • [3.5 建图(Mapping)](#3.5 建图(Mapping))
  • [4. 相机模型与传感器(附分类对比图)](#4. 相机模型与传感器(附分类对比图))
  • [5. 数学基础与工程实践的映射关系](#5. 数学基础与工程实践的映射关系)
  • [6. Ubuntu 20.04 环境搭建全流程](#6. Ubuntu 20.04 环境搭建全流程)
  • [7. 总结与学习建议](#7. 总结与学习建议)

1. 背景

在机器人及自动驾驶领域,SLAM(Simultaneous Localization and Mapping,同时定位与地图构建) 技术被誉为"皇冠上的明珠"。然而,对于初学者而言,SLAM 的门槛往往不在于单一的知识点,而在于如何将 数学理论(李群、优化)工程实践(C++、Linux、OpenCV) 融会贯通。

高翔等人所著的《视觉SLAM十四讲》正是这样一本"神书",它打破了理论与实践的壁垒。但是,面对书中庞大的知识体系,很多读者在翻开第一页时就迷失了方向。

今天,作为学习的第一天,我们不做繁琐的公式推导,而是站在高处,俯瞰全貌 。我会带您串联全书的目录结构,理清每一讲在SLAM系统中的"生态位",并基于 Ubuntu 20.04 给出最稳妥的起手式。

2. 全书逻辑架构图

《视觉SLAM十四讲》的结构非常清晰,就像是在组装一个智能机器人 。全书分为两大核心篇章:数学基础篇(第1~6讲)SLAM技术篇(第7~14讲)

下面是我绘制的全书逻辑架构图,清晰地展示了每一讲在整个SLAM系统中的位置和作用:
第二部分:SLAM技术篇
第一部分:数学基础篇
第1讲:前言
第2讲:初识SLAM
第3讲:三维空间刚体运动

旋转矩阵/四元数/Eigen
第4讲:李群与李代数

Sophus/求导模型
第5讲:相机与图像

针孔模型/OpenCV/点云
第6讲:非线性优化

状态估计/Ceres/g2o
第7讲:视觉里程计1-特征点法

ORB/对极几何/PnP/ICP
第8讲:视觉里程计2-直接法

光流/直接法/稀疏稠密
第9讲:实践章-设计前端

VO框架搭建/数据结构
第10讲:后端1-BA优化

Bundle Adjustment/g2o求解
第11讲:后端2-位姿图

Pose Graph/gtsam
第12讲:回环检测

词袋模型/DBoW3/相似度计算
第13讲:建图

单目稠密重建/八叉树地图
第14讲:现在与未来

开源方案对比/深度学习结合

2. 学习路线图(修正版)

第三阶段:进阶拓展
第二阶段:核心技术(第7-13讲)
第一阶段:基础入门(第1-6讲)
第1-2讲

SLAM概述
第3讲

刚体运动/Eigen
第4讲

李代数/Sophus
第5讲

相机模型/OpenCV
第6讲

非线性优化/Ceres/g2o
第7-8讲

前端VO

特征点法+直接法
第9讲

实践:设计前端
第10-11讲

后端优化

BA+位姿图
第12讲

回环检测
第13讲

建图
第14讲

开源方案/未来
ORB-SLAM2/3

源码阅读
视觉惯性SLAM

VINS/ORB-SLAM3

【流程图解读】

  • 粉色部分(第1-2讲):SLAM的概述和入门,让你知道学什么、为什么学
  • 蓝色部分(第3-6讲):数学基础,打造SLAM的"兵器库"------包括刚体运动描述(第3讲)、优化求导工具(第4讲)、相机模型(第5讲)、非线性优化方法(第6讲)
  • 绿色部分(第7-13讲) :SLAM核心技术,按照前端→后端→回环→建图的经典流程展开
  • 橙色部分(第14讲):展望未来,了解行业前沿

3. 经典视觉SLAM框架详解(附完整流程图)

经典视觉SLAM框架包含五个核心模块:传感器信息读取、前端视觉里程计、后端优化、回环检测、建图。下面这张完整的SLAM框架流程图,清晰地展示了各模块之间的关系和数据流向:
建图
回环检测
后端优化
前端VO
传感器层
相机

单目/双目/RGB-D
预处理

畸变校正/灰度化
IMU

惯性测量单元
特征提取

ORB/SIFT/FAST
特征匹配

相邻帧关联
运动估计

PnP/ICP/对极几何
局部地图

构建与维护
图优化框架

g2o/Ceres/GTSAM
回环约束
全局位姿优化

Bundle Adjustment
词袋模型

DBoW3字典
相似度计算
回环验证

几何一致性检查
稀疏地图

路标点云
稠密地图

深度估计/八叉树
语义地图

目标识别+SLAM

下面我们逐一拆解每个模块:

3.1 传感器信息读取

视觉SLAM的输入源主要包括:

  • 单目相机(Monocular) :结构简单、成本低,但存在尺度不确定性,无法确定物体的真实大小
  • 双目相机(Stereo):通过基线估计深度,类似人眼,但计算量大,需要GPU/FPGA加速
  • 深度相机(RGB-D):通过ToF或结构光直接测量深度,室内效果好,但易受日光干扰
  • IMU(惯性测量单元):测量角速度和加速度,与视觉互补,提高鲁棒性

预处理步骤包括:图像畸变校正、灰度化、去噪、时间戳对齐等。

3.2 前端视觉里程计(VO)

VO的任务是估算相邻图像间相机的运动 ,以及建立局部地图。它包含以下子步骤:

  1. 特征提取:从图像中提取关键特征点(如ORB、SIFT、FAST)
  2. 特征匹配:在连续帧或多视角间进行特征匹配,获取相对运动信息
  3. 运动估计 :利用匹配的特征点对,估计摄像头的相对位姿变化,常用方法包括PnP算法、EPnP、对极几何、ICP

VO只计算相邻时刻的运动,不关心历史信息,因此必然存在累积漂移------你会发现原本直的走廊变成了斜的,原本90°的直角变成了歪的。为消除漂移,我们需要回环检测和后端优化。

3.3 后端优化(Optimization)

后端接收前端估计的相机位姿和回环检测信息,通过非线性优化得到全局一致的轨迹和地图。主要工作包括:

  • 图优化:将位姿和地图点作为图的节点,通过优化算法(如最小二乘)最小化重投影误差
  • 关键帧选择与管理:为了提高计算效率,后端会选择关键帧进行优化,管理地图点的添加、删除
  • Bundle Adjustment(BA):同时优化相机位姿和地图点位置

后端处理的是带噪声的数据,目标是估计整个系统的状态及其不确定性------这被称为最大后验概率估计。

3.4 回环检测(Loop Closure)

回环检测的核心是判断机器人是否到达过先前的位置 。它的作用:当检测到回环时,将信息提供给后端,后端把轨迹和地图调整到符合回环检测结果的样子,从而彻底消除累积漂移

实现方法:

  • 场景识别 :通过图像描述子(如词袋模型Bag of Words、深度学习特征)识别当前帧是否与历史帧对应同一场景
  • 全局优化:一旦检测到闭环,通过全局图优化修正累计的定位误差

3.5 建图(Mapping)

根据估计的轨迹,建立与任务要求对应的地图。地图类型包括:

  • 度量地图 :强调精确表示位置关系
    • 稀疏地图:由路标组成,计算量小,适合定位
    • 稠密地图:建模所有看到的东西,可用于导航,但存储量大
  • 拓扑地图:强调元素之间的关系(节点和边),不适用于复杂结构
  • 语义地图:将语义分割结果融入SLAM,构建带语义标签的地图

4. 相机模型与传感器(附分类对比图)

相机是视觉SLAM的"眼睛"。下面这张相机分类对比图,直观展示了不同类型相机的特点:
其他类型
深度相机特点
双目特点
单目特点
相机类型
视觉SLAM相机
单目相机 Monocular
双目相机 Stereo
深度相机 RGB-D
其他类型
优点:结构简单/成本低
缺点:尺度不确定性

无法确定真实深度
原理:通过运动形成视差
优点:可测深度/室内外通用
缺点:计算量大/标定复杂
原理:基线估计深度
优点:直接测量深度/计算量小
缺点:范围窄/易受日光干扰
原理:ToF/结构光
全景相机

360°视野
事件相机

像素变化触发/响应快
红外相机

夜视/多传感器融合

相机标定是必不可少的一步:

  • 内参标定:内参数矩阵,将相机坐标系3D点映射到2D成像平面
  • 外参标定:外参数矩阵,将相机坐标系映射到世界坐标系
  • 常用方法:张正友标定法、OpenCV、kalibr

5. 数学基础与工程实践的映射关系

很多读者觉得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 基础环境配置

bash 复制代码
# 1. 更新系统包
sudo apt-get update
sudo apt-get upgrade -y

# 2. 安装基础编译工具
sudo apt-get install -y build-essential cmake git pkg-config

# 3. 安装常用工具
sudo apt-get install -y vim htop net-tools terminator

# 4. 创建工作目录(整洁的环境是好习惯)
mkdir -p ~/projects/slambook_code
cd ~/projects/slambook_code

# 5. 验证安装
gcc --version
cmake --version
git --version

6.2 安装Eigen3(第3讲必备)

bash 复制代码
# Eigen3 可以通过 apt 直接安装(推荐)
sudo apt-get install -y libeigen3-dev

# 验证安装
dpkg -l | grep eigen
# 头文件位置:/usr/include/eigen3/

6.3 安装Sophus(第4讲必备)

bash 复制代码
# Sophus 需要从源码编译
cd ~/projects/slambook_code
git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout a621ff  # 切换到稳定版本

# 创建构建目录
mkdir build && cd build
cmake ..
make -j4
sudo make install

# 验证安装
ls /usr/local/include/sophus/

6.4 安装OpenCV(第5讲必备)

bash 复制代码
# 安装OpenCV依赖
sudo apt-get install -y libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install -y python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev

# 下载OpenCV 3.4.16(推荐版本)
cd ~/projects/slambook_code
wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.16.zip
unzip opencv.zip
cd opencv-3.4.16

# 编译安装
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
sudo make install

# 验证安装
pkg-config --modversion opencv

6.5 安装Ceres Solver(第6讲必备)

bash 复制代码
# 安装依赖
sudo apt-get install -y liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev

# 下载Ceres 1.14.0
cd ~/projects/slambook_code
wget -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.0

# 编译安装
mkdir build && cd build
cmake ..
make -j4
sudo make install

# 验证安装
ls /usr/local/lib/libceres.so

6.6 克隆《十四讲》配套代码

bash 复制代码
# 克隆第一版代码(推荐)
cd ~/projects/slambook_code
git clone https://github.com/gaoxiang12/slambook.git

# 或者克隆第二版代码
git clone https://github.com/gaoxiang12/slambook2.git

# 查看目录结构
ls slambook/

6.7 测试第一个程序(第2讲示例)

bash 复制代码
cd ~/projects/slambook_code/slambook/ch2

# 编译libHelloSLAM
cmake .
make

# 运行测试
./helloSLAM

如果看到"Hello SLAM"输出,恭喜你,环境配置成功!

7. 总结与学习建议

7.1 学习路线图

第三阶段:进阶拓展
第二阶段:核心技术(第7-13讲)
第一阶段:基础入门(第1-6讲)
第1-2讲

SLAM概述
第3讲

刚体运动/Eigen
第4讲

李代数/Sophus
第5讲

相机模型/OpenCV
第6讲

非线性优化/Ceres/g2o
第7-8讲

前端VO

特征点法+直接法
第9讲

实践:设计前端
第10-11讲

后端优化

BA+位姿图
第12讲

回环检测
第13讲

建图
第14讲

开源方案/未来
ORB-SLAM2/3

源码阅读
视觉惯性SLAM

VINS/ORB-SLAM3

7.2 学习建议

  1. 理论与实践交替进行:每学完一讲的数学理论,立刻运行配套代码,看代码如何实现理论
  2. 亲手调试代码:不要只运行成功就完事,试着改参数、加注释、看报错,这是最好的学习方式
  3. 建立知识图谱:学完一章后,画出这一章在SLAM框架中的位置和作用
  4. 善用工具:使用Excalidraw、ProcessOn等工具绘制流程图,加深理解
  5. 多问为什么:比如"为什么旋转矩阵不能用加法?""为什么需要李代数?"

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 版权协议,转载请附上原文出处链接和本声明。

相关推荐
Betelgeuse762 小时前
DjangoBlog学习案例:掌握Django MVT架构与多应用协作实践
学习·架构·django
默|笙2 小时前
【Linux】进程间通信(2)_进程池
linux
李昊哲小课2 小时前
NumPy 完整学习笔记
笔记·python·学习·数据分析·numpy
nonono2 小时前
深度学习——SETR(Segmentation Transformer)学习(2020.12)
深度学习·学习·transformer
项目工程打工马2 小时前
Ubuntu 上 Redis 安装和使用详细指南(新手友好版)
linux·redis·ubuntu
醉酒柴柴2 小时前
word创建样式以后应用于所有新文件
开发语言·学习·c#·word
蛋白界小百灵2 小时前
【卡梅德】生物带您学习分子钓鱼术:噬菌体展示技术实验操作解析
学习
糖果店的幽灵3 小时前
【大模型】大模型学习总结之机器学习 - 1.基础知识
人工智能·学习·机器学习
生活很暖很治愈3 小时前
Linux——HTTP协议
linux·服务器·c++·网络协议·ubuntu·http