具体描述
《视觉SLAM十四讲:从理论到实践》系统介绍了视觉SLAM(同时定位与地图构建)所需的基本知识与核心算法,既包括数学理论基础,如三维空间的刚体运动、非线性优化,又包括计算机视觉的算法实现,例如多视图几何、回环检测等。此外,还提供了大量的实例代码供读者学习研究,从而更深入地掌握这些内容。
《视觉SLAM十四讲:从理论到实践》可以作为对SLAM 感兴趣的研究人员的入门自学材料,也可以作为SLAM 相关的高校本科生或研究生课程教材使用。
作者简介
高翔,2008年就读清华大学自动化系,2012年免试进入清华大学自动化系攻读博士学位。研究课题为视觉SLAM,兴趣包括计算机视觉与机器学习。曾撰写过与SLAM相关的论文和技术博客。
张涛,清华大学自动化系教授、党委书记、副系主任。1995年9月至1999年9月在清华大学自动化系检测技术与自动化装置专业学习,获博士学位。1999年10月至2002年9月在日本国立佐贺大学大学院工学系研究科系统控制专业学习,获博士学位。研究课题包括机器人、航空航天、计算机视觉等。
刘毅,华中科技大学图像与人工智能研究所在读博士,本科毕业于武汉理工大学数学系。读博期间专注于图像处理、三维重建、视觉SLAM,以及传感器融合研究和应用,读博期间先后于深圳市大疆创新公司,英特尔中国研究院等单位实习。
颜沁睿,比利时荷语鲁汶大学人工智能硕士,电子工程学士(GroupT)。电子科技大学信息显示与光电技术学士。长期致力于研究人工智能技术在机器人领域的应用,包括计算机视觉、机器学习和SLAM。现担任地平线机器人公司智能驾驶部算法工程师。
目录信息
1.1 本书讲什么1
1.2 如何使用本书3
1.2.1 组织方式3
1.2.2 代码5
1.2.3 面向的读者6
1.3 风格约定6
1.4 致谢和声明7
第2 讲初识SLAM 9
2.1 引子:小萝卜的例子11
2.2 经典视觉SLAM 框架17
2.2.1 视觉里程计17
2.2.2 后端优化19
2.2.3 回环检测20
2.2.4 建图21
2.3 SLAM 问题的数学表述22
2.4 实践:编程基础 25
2.4.1 安装Linux 操作系统25
2.4.2 Hello SLAM27
2.4.3 使用cmake28
2.4.4 使用库30
2.4.5 使用IDE32
第3 讲三维空间刚体运动37
3.1 旋转矩阵39
3.1.1 点和向量,坐标系39
3.1.2 坐标系间的欧氏变换40
3.1.3 变换矩阵与齐次坐标42
3.2 实践:Eigen 44
3.3 旋转向量和欧拉角48
3.3.1 旋转向量48
3.3.2 欧拉角50
3.4 四元数51
3.4.1 四元数的定义51
3.4.2 四元数的运算53
3.4.3 用四元数表示旋转55
3.4.4 四元数到旋转矩阵的转换55
3.5 * 相似、仿射、射影变换56
3.6 实践:Eigen 几何模块57
3.7 可视化演示60
第4 讲李群与李代数62
4.1 李群与李代数基础 64
4.1.1 群64
4.1.2 李代数的引出65
4.1.3 李代数的定义 67
4.1.4 李代数so(3) 67
4.1.5 李代数se(3)68
4.2 指数与对数映射69
4.2.1 SO(3) 上的指数映射69
4.2.2 SE(3) 上的指数映射.70
4.3 李代数求导与扰动模型72
4.3.1 BCH 公式与近似形式72
4.3.2 SO(3) 李代数上的求导73
4.3.3 李代数求导74
4.3.4 扰动模型(左乘)75
4.3.5 SE(3) 上的李代数求导76
4.4 实践:Sophus76
4.5 * 相似变换群与李代数.79
4.6 小结81
第5 讲相机与图像82
5.1 相机模型 84
5.1.1 针孔相机模型84
5.1.2 畸变87
5.1.3 双目相机模型 90
5.1.4 RGB-D 相机模型92
5.2 图像93
5.3 实践:图像的存取与访问95
5.3.1 安装OpenCV95
5.3.2 操作OpenCV 图像96
5.4 实践:拼接点云99
第6 讲非线性优化104
6.1 状态估计问题106
6.1.1 最大后验与最大似然106
6.1.2 最小二乘的引出 108
6.2 非线性最小二乘109
6.2.1 一阶和二阶梯度法110
6.2.2 高斯牛顿法111
6.2.3 列文伯格—马夸尔特方法113
6.2.4 小结114
6.3 实践:Ceres115
6.3.1 Ceres 简介 116
6.3.2 安装Ceres116
6.3.3 使用Ceres 拟合曲线 117
6.4 实践:g2o121
6.4.1 图优化理论简介121
6.4.2 g2o 的编译与安装122
6.4.3 使用g2o 拟合曲线123
6.5 小结128
第7 讲视觉里程计1130
7.1 特征点法132
7.1.1 特征点132
7.1.2 ORB 特征134
7.1.3 特征匹配137
7.2 实践:特征提取和匹配138
7.3 2D−2D: 对极几何141
7.3.1 对极约束141
7.3.2 本质矩阵143
7.3.3 单应矩阵146
7.4 实践:对极约束求解相机运动148
7.5 三角测量153
7.6 实践:三角测量154
7.6.1 三角测量代码154
7.6.2 讨论156
7.7 3D−2D:PnP157
7.7.1 直接线性变换158
7.7.2 P3P159
7.7.3 Bundle Adjustment 161
7.8 实践:求解PnP165
7.8.1 使用EPnP 求解位姿165
7.8.2 使用BA 优化166
7.9 3D−3D:ICP172
7.9.1 SVD 方法173
7.9.2 非线性优化方法 175
7.10 实践:求解ICP176
7.10.1 SVD 方法176
7.10.2 非线性优化方法178
7.11 小结180
第8 讲视觉里程计2182
8.1 直接法的引出184
8.2 光流(Optical Flow)185
8.3 实践:LK 光流187
8.3.1 使用TUM 公开数据集187
8.3.2 使用LK 光流188
8.4 直接法(Direct Method)192
8.4.1 直接法的推导 192
8.4.2 直接法的讨论195
8.5 实践:RGB-D 的直接法196
8.5.1 稀疏直接法196
8.5.2 定义直接法的边197
8.5.3 使用直接法估计相机运动 199
8.5.4 半稠密直接法200
8.5.5 直接法的讨论 202
8.5.6 直接法优缺点总结 203
第9 讲实践:设计前端205
9.1 搭建VO 框架 206
9.1.1 确定程序框架207
9.1.2 确定基本数据结构208
9.1.3 Camera 类210
9.1.4 Frame 类212
9.1.5 MapPoint 类 213
9.1.6 Map 类 213
9.1.7 Config 类 214
9.2 基本的VO:特征提取和匹配216
9.2.1 两两帧的视觉里程计216
9.2.2 讨论224
9.3 改进:优化PnP 的结果 224
9.4 改进:局部地图 227
9.5 小结233
第10 讲后端1 235
10.1 概述237
10.1.1 状态估计的概率解释237
10.1.2 线性系统和KF239
10.1.3 非线性系统和EKF242
10.1.4 EKF 的讨论243
10.2 BA 与图优化245
10.2.1 投影模型和BA 代价函数 245
10.2.2 BA 的求解247
10.2.3 稀疏性和边缘化248
10.2.4 鲁棒核函数255
10.2.5 小结256
10.3 实践:g2o257
10.3.1 BA 数据集257
10.3.2 g2o 求解BA258
10.3.3 求解262
10.4 实践:Ceres 264
10.4.1 Ceres 求解BA 265
10.4.2 求解267
10.5 小结269
第11 讲后端2 270
11.1 位姿图(Pose Graph)271
11.1.1 Pose Graph 的意义271
11.1.2 Pose Graph 的优化272
11.2 实践:位姿图优化274
11.2.1 g2o 原生位姿图 274
11.2.2 李代数上的位姿图优化278
11.2.3 小结284
11.3 * 因子图优化初步285
11.3.1 贝叶斯网络285
11.3.2 因子图286
11.3.3 增量特性288
11.4 * 实践:gtsam 289
11.4.1 安装gtsam 4.0289
11.4.2 位姿图优化290
第12 讲回环检测297
12.1 回环检测概述299
12.1.1 回环检测的意义299
12.1.2 方法 300
12.1.3 准确率和召回率301
12.2 词袋模型303
12.3 字典 305
12.3.1 字典的结构305
12.3.2 实践:创建字典306
12.4 相似度计算309
12.4.1 理论部分309
12.4.2 实践:相似度的计算310
12.5 实验分析与评述314
12.5.1 增加字典规模314
12.5.2 相似性评分的处理316
12.5.3 关键帧的处理316
12.5.4 检测之后的验证317
12.5.5 与机器学习的关系317
第13 讲建图319
13.1 概述320
13.2 单目稠密重建322
13.2.1 立体视觉322
13.2.2 极线搜索与块匹配323
13.2.3 高斯分布的深度滤波器325
13.3 实践:单目稠密重建328
13.4 实验分析与讨论339
13.4.1 像素梯度的问题339
13.4.2 逆深度340
13.4.3 图像间的变换 341
13.4.4 并行化:效率的问题342
13.4.5 其他的改进343
13.5 RGB-D 稠密建图343
13.5.1 实践:点云地图344
13.5.2 八叉树地图347
13.5.3 实践:八叉树地图350
13.6 *TSDF 地图和Fusion 系列352
13.7 小结356
第14 讲SLAM:现在与未来357
14.1 当前的开源方案358
14.1.1 MonoSLAM358
14.1.2 PTAM359
14.1.3 ORB-SLAM361
14.1.4 LSD-SLAM363
14.1.5 SVO 364
14.1.6 RTAB-MAP366
14.1.7 其他367
14.2 未来的SLAM 话题367
14.2.1 视觉+ 惯性导航SLAM367
14.2.2 语义SLAM369
14.2.3 SLAM 的未来 370
附录A 高斯分布的性质371
A.1 高斯分布371
A.2 高斯分布的运算371
A.2.1 线性运算371
A.2.2 乘积372
A.2.3 复合运算372
A.3 复合的例子372
附录B ROS 入门374
B.1 ROS 是什么374
B.2 ROS 的特点375
B.3 如何快速上手ROS375
参考文献377
· · · · · · (收起)
读后感
用户评价
我必须强调,这本书在内容的广度与深度上达到了一个令人惊叹的平衡点。它的覆盖面非常广,从早期的基于滤波器的EKF SLAM,到后来的基于优化的BA(Bundle Adjustment)框架,再到对深度学习在位姿估计和语义SLAM中的初步探索,都有所涉猎。这种全面的视野,使得读者可以跳出单一技术路线的局限,对整个领域的发展脉络有一个宏观的把握。尤其值得称赞的是,作者在介绍不同技术栈时,总是能清晰地指出它们的优势和局限性,避免了对任何单一技术的神化。例如,在讨论基于线束平差(Bundle Adjustment)的局限性时,他们会自然地引出如何通过稀疏化、多尺度策略来提高计算效率,这体现了作者对实际计算资源约束的深刻理解。对于我这种需要交叉研究不同模态数据(比如结合激光雷达数据或惯性测量单元)的科研人员来说,这本书提供了一个极佳的参照框架,让我能够快速理解如何将新的传感器信息“缝合”进现有的视觉SLAM管道中,而不会破坏其核心的几何一致性。
这本关于视觉SLAM的著作,确实是业界和学术界都翘首以盼的一部力作。我作为一名长期关注机器人视觉和导航领域的工程师,拿到这本书后立刻被它严谨的体系结构所吸引。首先,它并非仅仅罗列算法公式,而是将整个SLAM(即时定位与地图构建)的理论基础,从最核心的几何学原理,到现代基于优化的后端处理,都做了深入浅出的阐述。初学者可能会被那些繁复的数学推导吓倒,但作者的叙述方式非常巧妙,他们总能找到一个恰当的比喻或者一个直观的几何图像来解释复杂的概念,比如对对极几何、本质矩阵、基本矩阵的讲解,简直是教科书级别的清晰。这种由浅入深、层层递进的组织方式,使得即便是初次接触SLAM的读者,也能逐步建立起对场景几何理解的框架。我特别欣赏它在回顾经典方法时所展现出的历史观,这让我们明白当前最先进的技术是如何一步步演化而来的,而不是孤立地看待某一个特定算法的优劣。对于我们这些需要将理论应用于实际工程项目的人来说,这种对基础的夯实至关重要,它能让我们在面对新的传感器数据或复杂环境时,具备快速调试和优化系统的底层能力。整本书的逻辑流畅得如同一次精心规划的机器人路径,每走一步都有清晰的指示和坚实的立足点。
从排版和阅读体验上来说,这本书的质量也属上乘。图文并茂的呈现方式,极大地降低了理解复杂三维几何概念的门槛。许多关键的数学推导过程,都配有清晰的二维投影图或三维空间示意图,这在阅读涉及坐标系变换、位姿外参标定等内容时尤其重要。我发现,很多时候,仅仅通过看图就能瞬间领悟到困扰我许久的某个几何直觉问题。此外,书中对于术语的界定非常严谨,几乎每一个专业名词都有明确的定义,这对于需要撰写规范性技术文档或进行学术交流的读者来说,是极大的便利。整体的语言风格是那种严谨而不失温度的学术叙事,作者似乎在努力避免让读者在阅读过程中产生“知识断层”,总是在关键节点进行回顾和衔接。这种对细节的关注,不仅体现在内容本身,也体现在装帧和印刷质量上,确保了长时间阅读的舒适度,让人愿意反复翻阅和查阅。
读完这套书,我最大的感受是它为读者搭建了一座从概念到实践的坚固桥梁,而不仅仅是停留在理论的象牙塔中。书中对各种主流SLAM系统的实现细节探讨得尤为深入,特别是对前端视觉测量的处理,涵盖了从传统的特征点提取匹配,到后来的直接法(Direct Methods)的演进。作者没有回避那些在实际操作中极易出错的工程细节,比如,对于不同光照条件下的鲁棒性处理,对于纹理稀疏场景的应对策略,以及如何有效地进行回环检测和全局一致性优化。这些内容在许多教材中往往被一笔带过,但在这本书里,它们被赋予了足够的篇幅来详细解析其内在的机制和工程上的权衡取舍。我印象深刻的是其中关于因子图优化(Factor Graph Optimization)的章节,它不仅仅是讲解了理论模型,更是在介绍如何将其转化为实际可求解的优化问题,这对于想深入了解 Ceres Solver 或 g2o 内部工作原理的读者来说,简直是如获至宝。这种对工程实践的重视,使得这本书的价值远超一般的学术参考书,更像是一位经验丰富的导师在手把手地指导你如何把实验室里的想法变成一个能在真实世界中稳定运行的系统。
这本书对于那些希望将理论知识转化为实际项目经验的人,无疑是一个高效的催化剂。它不仅仅告诉你“是什么”,更重要的是教你“如何做”以及“为什么这样做”。书中穿插的实例分析,虽然没有直接给出完整的源代码,但其对关键算法流程的伪代码式描述,清晰到足以指导读者快速搭建起自己的实验平台。特别是关于后端优化的章节,它深入探讨了如何处理数据关联、如何构建最小化误差项以及如何选择合适的迭代求解器,这些都是实际项目中决定系统性能的关键因素。我个人认为,这本书的价值在于它成功地将计算机视觉领域(特别是几何部分)的最新进展,以一种高度结构化的、易于消化的方式呈现出来。它不是那种读完一遍就束之高阁的快餐读物,而更像是一本工具书,随着我在SLAM领域研究的深入,我发现每次重读某些章节时,都会有新的理解和感悟,这是衡量一本优秀技术著作的黄金标准。
考虑转行的时候读过呀,算是比较笼统的介绍了Slam的方方面面。有了些感性的认识,不过好玩的是我接下来做的东西和Slam并没有关系。
支持高博!
SLAM 入门必备,知乎上影响过来的~
slam入门必修课,唯一不足之处是书中存在一些错误,毕竟是第一版😂
希望多一些这样的书和老师