《SLAM十四讲》个人学习知识点梳理
0.引言
从六月末到八月初大概一个月时间一直在啃SLAM十四讲[1]这本书,这本书把SLAM中涉及的基本知识点都涵盖了,所以在这里做一个复习,对这本书自己学到的东西做一个梳理。
书本地址:http://www.broadview.com.cn/book/4938
书本代码:https://github.com/gaoxiang12/slambook
1.SLAM概述
SLAM:即时定位与地图构建(Simultaneous Localization and Mapping)
数学描述:
一个典型的SLAM系统如下图所示[1]:
典型的SLAM系统中,输入传感器数据,前端提取特征,估计运动,后端优化数据,再通过loop closure优化整个路径。若没有加loop closure的SLAM称为视觉里程计。
2. 三维空间刚体运动
第2部分和第3部分是基础的数学只是,本部分主要是对机器人位姿的描述方法的介绍。
坐标描述:
- 平面坐标
- 三维坐标
在SLAM中通常采用射影空间的齐次坐标表示位姿转换。原因是齐次坐标下点和直线(高维空间里是超平面)能够使用同样的表达;且坐标能囊括无穷远点和无穷远超平面;齐次坐标可以方便地将平移与旋转放在同一个矩阵中。
3. 李群和李代数
群:一种集合加上一种运算的代数结构
性质:
- 封闭性 ∀a1,a2,a1⋅a2∈A
- 结合律∀a1,a2,a3,(a1⋅a2)⋅a3=a1⋅(a2⋅a3)
- 幺元∃a0∈A,s.t.∀a∈A,a0⋅a=a⋅a0=a
- 逆∀a∈A,∃a-1∈A,s.t.a⋅a-1 =a0
李群是指具有连续性质的群。并且,一般连续群上的运算还是无限可微,乃至解析的。三维旋转矩阵可以构成特殊正交群,变换矩阵构成特殊欧式群
李代数:每个李群都有与之对应的李代数。李代数由一个集合V,一个数域F和一个二元运算[,]组成。如果它们满足以下几条性质,称(V,F,[,]) 为一个李代数,记作g。
性质:
- 封闭性 ∀X,Y∈V,[XY]∈V
- 双线性 ∀X,Y,Z∈V,a,b∈F,∀X,Y,Z∈V,a,b∈F, 有[aX+bY,Z]=a[XZ]+b[YZ][Z,aX+bY]=a[ZX]+b[ZY]
- 自反性 ∀X∈V,[XX]=0
- 雅可比等价 ∀X,Y,Z∈V,[X,[YZ]]+[Z,[YX]]+[Y,[ZX]]
三维旋转和变换的李群李代数转换如下图所示,使用李代数可以很方便的进行优化,利用扰动模型进行求导。
旋转矩阵是自身带有约束的(正交且行列式为0),优化时引入额外的约束,优化困难,转化为李代数之后把位姿转为无约束的优化问题。:
4. 相机模型
相机几何模型:将三维空间中的点(单位为米)映射到二维图像平面(单位为像素)的过程。
针孔模型是常见且有效的模型。
- 内参矩阵K:相机坐标系到图像像素坐标系产生的中间量(固定)
- 外参矩阵P:相机的位姿R,t
- 存在畸变
单目相机模型:
双目相机模型:
5. 前端
特征匹配法:一共六组实验。首先是ORB特征提取,通常是一些边和角等灰度特征比较明显的地方,描述子用来表示这些特征的周围。对极约束用在两组2d的点,都不知道深度的情况。3D-2D就是匹配的一组点知道深度,一组不知道。
直接法:最小化光度误差
相比特征匹配法,直接法只计算特征点,不计算描述子,不需要知道点和点的匹配关系,计算量小。
直接法有一个很强的假设——灰度不变假设:同一个空间点的像素灰度值在各个图像中是固定不变的。
光度误差是P的两个像素的亮度误差。左边的实验叫稀疏直接法,示意图中匹配的P来自稀疏特征点,右边是半稠密直接法,不同就是P的特征点选取的多。
6. 后端
前端可以给出一个短时间内的轨迹和地图,但由于不可避免的误差累积,如果时间长了这个地图是不准确的。所以我们希望构建一个尺度、规模更大的优化问题,以考虑长时间内的最优轨迹和地图。
EKF
- EKF目前已经被图优化所取代,曾经应用非常广泛
Bundle Adjustment:BA是在只有观测方程的情况下,优化相机的位姿以及路标三维坐标的图优化。
- 优化相机位姿和路标点坐标
- 节点表示相机和路标,边为它们之间的观测
Pose Graph:在大规模的定位和建图中,时间越久,BA计算量越大。因此提出pose graph,由关键帧之间通过特征匹配之后得到的运动估计来给定初始值,然后不再估计路标点
- 优化相机位姿
- 节点表示相机位姿,边是两个位姿节点之间的运动估计(来自特征点法或直接法)
左图为Bundle Adjustment示意图,右图为Pose Graph示意图。
7. 回环检测
前端用于提供特征点的提取和轨迹,地图的初值。后端负责这些数据的优化,但是视觉里程计仅考虑相邻时间上的关联,会有累计误差,无法构建全局一致的轨迹和地图。第一个图表示真实的轨迹,第二个图红色表示位姿的偏移,而如果有回环检测的话则可以将后面偏离的轨迹拉回到重合处。这就是回环检测的好处。这里介绍词袋模型,一共三步。
词袋模型
- 创建字典(聚类)
K叉树字典
- 用单词出现的情况描述图像——向量表示
- 比较上一步中的描述的相似程度
8. 建图
建图是SLAM的两大目标之一,建图的作用可归纳为定位,导航,避障,重建及交互。
单目稠密重建实验:1.假设所有像素深度满足某个初始的高斯分布
2.当新数据产生时,通过极线搜索和块匹配确定投影点位置
3.根据几何关系计算三角化后的深度及不确定性
4. 将当前观测融合进上一次的估计中。若收敛则停止计算,否则返回第2步
RGB-D相机的稠密建图:可以转化为点云地图亦或是存储空间更小的八叉树地图
总结
我把一些章节合并了,有许多细节都没有说,整本书啃下来感觉最重要的还是代码,代码,代码,重要的事要说三遍。C++还要继续学习。
[1] 高翔, 张涛, 刘毅. 视觉 SLAM 十四讲——从理论到实践[M]. 2017
[2] Cadena, C., Carlone, L., Carrillo, H., Latif, Y., Scaramuzza, D., Neira, J., ... & Leonard, J. J. (2016). Past, present, and future of simultaneous localization and mapping: Toward the robust-perception age. IEEE Transactions on Robotics, 32(6), 1309-1332.