按照作者在读者寄语中的说法:我们得榨干这本书的知识。
带着问题
为了更好的学习,我们最好带着问题去探索。
第一:核心问题与基础知识
如上图:这本书介绍了SLAM相关的核心问题和基础知识。王谷博士给我们做了梳理:
- ESKF
- 预积分
- 卡尔曼滤波器
- 因子图优化
- 松耦合/紧耦合
- 激光SLAM
- 高精定位
- ......
- 点云处理
第二:复现与实践
这本书的另一个意义:我们直接读SLAM相关的论文,可能知道大概意思,但是工程实践很难。复现难,但是这本书提供了一个从论文到实现的指引。哪怕我们没有原论文源码,也可以基于其原理,写出自己的SLAM实现。这对大部分人是非常有价值和帮助的。
第三:带着问题去探索:
- 如何利用IMU产品手册设置IMU运动方程噪声参数
- NDT有什么高效直接的实现方法
- 松耦合/紧耦合的LIO
第四:不只自动驾驶,还可VR、AR
做VR或者AR也要用到SLAM。同样要用:卡尔曼滤波、预积分、子地图、回环检测等技术。
作者自己在github中阐述:
- 本书大概是您能找到的类似材料中,数学推导和代码实现最为简单的书籍。
- 在这本书里,您会复现许多激光SLAM中的经典算法和数据结构。
- 您需要自己推导、实现一个误差状态卡尔曼滤波器(ESKF),把IMU和GNSS的数据喂给它,看它如何推算自己的状态。
- 您还会用预积分系统实现一样的功能,然后对比它们的运行方式。
- 接下来您会实现一遍2D激光SLAM中的常见算法:扫描匹配、似然场、子地图,占据栅格,再用回环检测来构建一个更大的地图。这些都需要您自己来完成。
- 在激光SLAM中,您也会自己实现一遍Kd树,处理近似最近邻,然后用这个Kd树来实现ICP,点面ICP,讨论它们有什么可以改进的地方。
- 然后您会实现经典的NDT算法,测试它的配准性能,然后用它来搭建一个激光里程计。它比大部分现有LO快得多。
- 您也会实现一个点面ICP的激光里程计,它也非常快。它工作的方式类似于Loam,但更简单。
- 您会想要把IMU系统也放到激光里程计中。我们会实现松耦合和紧耦合的LIO系统。同样地,您需要推导一遍迭代卡尔曼滤波器和预积分图优化。
- 您需要把上面的系统改成离线运行的,让回环检测运行地充分一些。最后将它做成一个离线的建图系统。
- 最后,您可以对上述地图进行切分,然后用来做实时定位。
- 本书的大部分实现都要比类似的算法库简单的多。您可以快速地理解它们的工作方式,不需要面对复杂的接口。
- 本书会使用非常方便的并发编程。您会发现,本书的实现往往比现有算法更高效。当然这有一部分是历史原因造成的。
一刷的感受:
一:不会,不懂
我说一下读第一遍的感受:好多东西根本不懂。
这时候的做法:分为两个流派:
- 一个流派:按部就班,就按照这个流程,循序渐进。一点点走上去。
- 一个流派:直捣黄龙,逢山开路,遇水搭桥。
1、先说第一个流派的:
- 好处是一步一个脚印,而且每一步都有额外的收获,每一步的收获,都会在以后无限有用。因为技术是一种层层堆叠的东西。你如果就是做技术的,那么静下心来踏踏实实的走上去,非常好。因为代表了无限的可能。因为你基础牢固,内功扎实。你修的是内功。以后想创新想突破都容易。碰到问题,知道如何完善,甚至优化。
- 问题是慢,而且容易走偏。这里说最优化和矩阵论,是研究生课程,你如果是研究生,修过这个心法,正好,不是事。如果你是本科生,如何自处。重新学习一遍这两门课最少也得两三周。你是学生还好,你如果是工作的人。如何处理。
- 这两门课其实是非常基础和实用的课程,如果走第一个流派,真心应该研究一下。
2、另一个流派:
- 碰到不会的再学。他说最优化和矩阵论,那么当碰到读不懂的地方时,直接借助方便的搜索引擎去学习,明确你的学习目标,他说最优化的什么东西。知道专业名词,然后弄明白这个专业名词做什么,找一文读懂专业名词,借助B站这类网站去找课程学习。
- (我记得有人分享过:如何快速学习一个行业:找20个这个行业最高频的专业词汇,无论是与人沟通还是搜索,还是看视频课,弄懂他们之后,这个行业你就入门了)
- 逢山开路,遇水搭桥,碰到不会的再去学,这样有目的的去学习,把有限的精力,集中在你的目标上。
- 不足就是创新不足,后劲不足。但也要看你具体要做啥。你的目标大小。目标就是搞懂,就别整其他没用的。
我一刷,只看我能看懂的。
学习源码。看看这本书,到底都是什么内容,哪些工作中可以直接拿来用。哪些是你不会,但是后面你也不用的。哪些是你不会,后面搞不定的,这些是二刷必须要弄会的。这个是广度。
我二刷,要把看不懂的,弄懂。
这种提高,是深度的。
二、ROS
ROS是做SLAM必须要会的,这本书不要求,但是你真心要会。我是跟赵虚左和古月居学的。
三、PCL
他虽然没提,但是你也要会。可以不专精,但是翻译官网的那本书过一遍是有意义的。
四、C++
你可以在本书学习中跟着高翔的源码一起学。特别是一些C++的新特性。多读读他的源码很有价值。高翔不仅书有营养,代码也写的相当好。
环境搭建
- 操作系统:Ubuntu20.04
- C++标准:C++17
- 硬盘空间:如果是虚拟机,请考虑笔记本单独有个400G左右的空间。因为rosbag的包都比较大。数据集有270GB。而且虚拟机也越来越大,注意记得清理
- 清理虚拟机办法:
- 本书源码:https://github.com/gaoxiang12/slam_in_autonomous_driving
- 本书数据集:百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/share/init?surl=ELOcF1UTKdfiKBAaXnE8sQ&pwd=feky