猜你喜欢
视觉SLAM十四讲:从理论到实践(第2版)(限量签名 随机发放)

视觉SLAM十四讲:从理论到实践(第2版)(限量签名 随机发放)

书籍作者:高翔 ISBN:9787121369421
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:2396
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书系统介绍了视觉 SLAM(同时定位与地图构建)所需的基本知识与核心算法,既包括数学理论基础,如三维空间的刚体运动、非线性优化,又包括计算机视觉的算法实现,例如多视图几何、回环检测等。此外,我们还提供了大量的实例代码供读者学习研究,从而更深入地掌握这些内容。本书可以作为对 SLAM 感兴趣的研究人员的入门自学材料,也可以作为 SLAM 相关的高校本科生或研究生课程教材使用。

作者简介

高翔,清华大学自动化系博士,慕尼黑工业大学博士后。研究兴趣主要为计算机视觉、定位与建图、机器学习等,主要著、译作包括《视觉SLAM十四讲:从理论到实践》、《机器人学中的状态估计》,在RAS、Auto Robotics、IROS等期刊会议上发表论文,现从事自动驾驶车辆研发工作。

编辑推荐

高博个性签名限量!SLAM华语原创首著升级版!彩色插图|更多实例|更深内容|更完善的工程项目|更易懂的表达。余凯谭平等业内大咖力荐!



√ SLAM华语原创首著升级版

√ 彩色插图|更多实例|更深内容|更完善的工程项目|更易懂的表达



前言

《视觉 SLAM 十四讲:从理论到实践》出版已经两年多。两年来,这本书经历了 13 次重印,在 GitHub 上拥有 2500 个星星,也在业界引起了广泛的关注和讨论。大多数读者评价是正面的,当然,书中也有些地方不够令人满意。例如,这本书面向初学者,有些应该深入的地方讲得不够深入;书中的数学符号不够统一,有些地方容易令读者产生误解;工程实践章节内容不够丰富,介绍较浅,等等。实际上,我在 2016 年中期开始创作第 1 版,所有文字、图片和代码都是从零开始准备的,再加上当时在读博士,也是第一次写这么厚的书,错漏在所难免。2018 年,我在慕尼黑工大给学生讲 SLAM 课程,期间又积累了一些材料,所以本书从内容上更丰富、更合理。在第 1 版的基础上做了如下改动:

1. 更多的实例。增加了一些实验代码来介绍算法的原理。在第 1 版中,多数实践代码调用了各种库中的内置函数,现在我认为更深入地介绍底层计算会更好,所以本书中的许多代码,除了调用库函数,还提供了底层的实现。

2. 更深入的内容。主要是从第 7 讲至第 12 讲的部分,同时删除了一些泛泛而谈的边角料(比如 GTSAM 相关内容?)。对第 1 版大部分数学公式进行了审查,重写了那些容易引起误解的内容。

3. 更完善的工程项目。将第 1 版的第 9 讲移至第 13 讲。于是,我们可以在介绍了所有必要知识之后,向大家展现一个完整的 SLAM 系统是如何工作的。相比于第 1 版,我在本书的项目中将追求以精简的代码实现完整的功能,你会得到一个由几百行代码实现的、有完整前后端的 SLAM 系统。

4. 更通俗、简洁的表达。我觉得这是一本好书的标准,特别是当介绍一些看起来高深莫测的数学知识时。我重新制作了部分插图,使它们即使在黑白印刷条件下也能看起来很清楚。

当然,每讲前的简笔画我是不会改的!

总之,我尽量做到深入浅出,也希望本书能够给你带来更加舒适的阅读体验。


目录

第 1 讲 预备知识 1

1.1 本书讲什么 1

1.2 如何使用本书 3

1.2.1 组织方式 3

1.2.2 代码 5

1.2.3 面向的读者 6

1.3 风格约定 6

1.4 致谢和声明 8

第 1 部分 数学基础 10

第 2 讲 初识 SLAM 11

2.1 引子:小萝卜的例子 13

2.2 经典视觉 SLAM 框架 19

2.2.1 视觉里程计 20

2.2.2 后端优化 21

2.2.3 回环检测 22

2.2.4 建图 23

2.3 SLAM 问题的数学表述 24

2.4 实践:编程基础 27

2.4.1 安装 Linux 操作系统 27

2.4.2 Hello SLAM 29

2.4.3 使用 cmake 30

2.4.4 使用库 32

2.4.5 使用 IDE 35

第 3 讲 三维空间刚体运动 40

3.1 旋转矩阵 42

3.1.1 点、向量和坐标系 42

3.1.2 坐标系间的欧氏变换 43

3.1.3 变换矩阵与齐次坐标 46

3.2 实践:Eigen 47

3.3 旋转向量和欧拉角 53

3.3.1 旋转向量 53

3.3.2 欧拉角 54

3.4 四元数 56

3.4.1 四元数的定义 56

3.4.2 四元数的运算 57

3.4.3 用四元数表示旋转 59

3.4.4 四元数到其他旋转表示的转换 59

3.5 * 相似、仿射、射影变换 61

3.6 实践:Eigen 几何模块 62

3.6.1 Eigen 几何模块的数据演示 62

3.6.2 实际的坐标变换例子 64

3.7 可视化演示 66

3.7.1 显示运动轨迹 66

3.7.2 显示相机的位姿 69

第 4 讲 李群与李代数 71

4.1 李群与李代数基础 73

4.1.1 群 73

4.1.2 李代数的引出 74

4.1.3 李代数的定义 76

4.1.4 李代数 so(3) 76

4.1.5 李代数 se(3) 77

4.2 指数与对数映射 78

4.2.1 SO(3) 上的指数映射 78

4.2.2 SE(3) 上的指数映射 80

4.3 李代数求导与扰动模型 81

4.3.1 BCH 公式与近似形式 81

4.3.2 SO(3) 上的李代数求导 83

4.3.3 李代数求导 84

4.3.4 扰动模型(左乘)85

4.3.5 SE(3) 上的李代数求导 85

4.4 实践:Sophus 86

4.4.1 Sophus 的基本使用方法 86

4.4.2 例子:评估轨迹的误差 89

4.5 * 相似变换群与李代数 92

4.6 小结 93

第 5 讲 相机与图像 95

5.1 相机模型 97

5.1.1 针孔相机模型 97

5.1.2 畸变模型 100

5.1.3 双目相机模型 103

5.1.4 RGB-D 相机模型 104

5.2 图像 106

5.3 实践:计算机中的图像 107

5.3.1 OpenCV 的基本使用方法 107

5.3.2 图像去畸变 112

5.4 实践:3D 视觉 113

5.4.1 双目视觉 113

5.4.2 RGB-D 视觉 115

第 6 讲 非线性优化 119

6.1 状态估计问题 121

6.1.1 批量状态估计与最大后验估计 121

6.1.2 最小二乘的引出 123

6.1.3 例子:批量状态估计 125

6.2 非线性最小二乘 126

6.2.1 一阶和二阶梯度法 127

6.2.2 高斯牛顿法 128

6.2.3 列文伯格—马夸尔特方法130

6.3 实践:曲线拟合问题 132

6.3.1 手写高斯牛顿法 132

6.3.2 使用 Ceres 进行曲线拟合 136

6.3.3 使用 g2o 进行曲线拟合 141

6.4 小结 148

第 2 部分 实践应用 150

第 7 讲 视觉里程计 1 151

7.1 特征点法 153

7.1.1 特征点 153

7.1.2 ORB 特征 155

7.1.3 特征匹配 158

7.2 实践:特征提取和匹配 159

7.2.1 OpenCV 的 ORB 特征 159

7.2.2 手写 ORB 特征 162

7.2.3 计算相机运动 165

7.3 2D-2D:对极几何 165

7.3.1 对极约束 165

7.3.2 本质矩阵 168

7.3.3 单应矩阵 170

7.4 实践:对极约束求解相机运动 172

7.5 三角测量 177

7.6 实践:三角测量 178

7.6.1 三角测量代码 178

7.6.2 讨论 179

7.7 3D?2D:PnP 180

7.7.1 直接线性变换 180

7.7.2 P3P 182

7.7.3 最小化重投影误差求解 PnP 184

7.8 实践:求解 PnP 188

7.8.1 使用 EPnP 求解位姿 188

7.8.2 手写位姿估计 189

7.8.3 使用 g2o 进行 BA 优化 191

7.9 3D-3D:ICP 196

7.9.1 SVD 方法 196

7.9.2 非线性优化方法 198

7.10 实践:求解 ICP 199

7.10.1 实践:SVD 方法 199

7.10.2 实践:非线性优化方法 201

7.11 小结 203

第 8 讲 视觉里程计 2 205

8.1 直接法的引出 207

8.2 2D 光流 208

8.3 实践:LK 光流 210

8.3.1 使用 LK 光流 210

8.3.2 用高斯牛顿法实现光流 211

8.3.3 光流实践小结 218

8.4 直接法 218

8.4.1 直接法的推导 218

8.4.2 直接法的讨论 221

8.5 实践:直接法 221

8.5.1 单层直接法 221

8.5.2 多层直接法 226

8.5.3 结果讨论 227

8.5.4 直接法优缺点总结 230

第 9 讲 后端 1 232

9.1 概述 234

9.1.1 状态估计的概率解释 234

9.1.2 线性系统和 KF 236

9.1.3 非线性系统和 EKF 239

9.1.4 EKF 的讨论 241

9.2 BA 与图优化 242

9.2.1 投影模型和 BA 代价函数 242

9.2.2 BA 的求解 243

9.2.3 稀疏性和边缘化 245

9.2.4 鲁棒核函数 251

9.3 实践:Ceres BA 253

9.3.1 BAL 数据集 253

9.3.2 Ceres BA 的书写 253

9.4 实践:g2o 求解 BA 257

9.5 小结 263

第 10 讲 后端 2 265

10.1 滑动窗口滤波和优化 266

10.1.1 实际环境下的 BA 结构 266

10.1.2 滑动窗口法 267

10.2 位姿图 270

10.2.1 位姿图的意义 270

10.2.2 位姿图的优化 270

10.3 实践:位姿图优化 272

10.3.1 g2o 原生位姿图 272

10.3.2 李代数上的位姿图优化 277

10.3.3 小结 282

第 11 讲 回环检测 283

11.1 概述 285

11.1.1 回环检测的意义 285

11.1.2 回环检测的方法 286

11.1.3 准确率和召回率 287

11.2 词袋模型 289

11.3 字典 291

11.3.1 字典的结构 291

11.3.2 实践:创建字典 292

11.4 相似度计算 295

11.4.1 理论部分 295

11.4.2 实践:相似度的计算 296

11.5 实验分析与评述 300

11.5.1 增加字典规模 300

11.5.2 相似性评分的处理 302

11.5.3 关键帧的处理 302

11.5.4 检测之后的验证 303

11.5.5 与机器学习的关系 303

第 12 讲 建图305

12.1 概述 306

12.2 单目稠密重建 308

12.2.1 立体视觉 308

12.2.2 极线搜索与块匹配 309

12.2.3 高斯分布的深度滤波器 311

12.3 实践:单目稠密重建 314

12.3.1 实验分析与讨论 323

12.3.2 像素梯度的问题 324

12.3.3 逆深度 325

12.3.4 图像间的变换 326

12.3.5 并行化:效率的问题 327

12.3.6 其他的改进 327

12.4 RGB-D 稠密建图 328

12.4.1 实践:点云地图 328

12.4.2 从点云重建网格 333

12.4.3 八叉树地图 336

12.4.4 实践:八叉树地图 338

12.5 * TSDF 地图和 Fusion 系列 340

12.6 小结 343

第 13 讲 实践:设计 SLAM 系统 345

13.1 为什么要单独列工程章节 346

13.2 工程框架 347

13.3 实现 349

13.3.1 实现基本数据结构 349

13.3.2 前端 354

13.3.3 后端 357

13.4 实验效果 361

第 14 讲 SLAM:现在与未来 363

14.1 当前的开源方案 364

14.1.1 MonoSLAM 364

14.1.2 PTAM 365

14.1.3 ORB-SLAM 366

14.1.4 LSD-SLAM 369

14.1.5 SVO 370

14.1.6 RTAB-MAP 371

14.1.7 其他 372

14.2 未来的 SLAM 话题 372

14.2.1 视觉 + 惯性导航 SLAM 373

14.2.2 语义 SLAM 374

14.2.3 SLAM 的未来 375

附录 A 高斯分布的性质 377

附录 B 矩阵求导 380

附录 C ROS 入门 382

参考文献 385


产品特色