0.引言

  从六月末到八月初大概一个月时间一直在啃SLAM十四讲[1]这本书,这本书把SLAM中涉及的基本知识点都涵盖了,所以在这里做一个复习,对这本书自己学到的东西做一个梳理。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

  书本地址:http://www.broadview.com.cn/book/4938

  书本代码:https://github.com/gaoxiang12/slambook

 

1.SLAM概述

SLAM:即时定位与地图构建(Simultaneous Localization and Mapping)

数学描述:

《SLAM十四讲》个人学习知识点梳理 随笔 第1张

一个典型的SLAM系统如下图所示[1]:

《SLAM十四讲》个人学习知识点梳理 随笔 第2张

典型的SLAM系统中,输入传感器数据,前端提取特征,估计运动,后端优化数据,再通过loop closure优化整个路径。若没有加loop closure的SLAM称为视觉里程计。

 

2. 三维空间刚体运动

  第2部分和第3部分是基础的数学只是,本部分主要是对机器人位姿的描述方法的介绍。

  坐标描述:

  • 平面坐标《SLAM十四讲》个人学习知识点梳理 随笔 第3张
  • 三维坐标《SLAM十四讲》个人学习知识点梳理 随笔 第4张

在SLAM中通常采用射影空间的齐次坐标表示位姿转换。原因是齐次坐标下点和直线(高维空间里是超平面)能够使用同样的表达;且坐标能囊括无穷远点和无穷远超平面;齐次坐标可以方便地将平移与旋转放在同一个矩阵中。

 

3. 李群和李代数

  群:一种集合加上一种运算的代数结构《SLAM十四讲》个人学习知识点梳理 随笔 第5张

  性质:

  • 封闭性 ∀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),优化时引入额外的约束,优化困难,转化为李代数之后把位姿转为无约束的优化问题。:

《SLAM十四讲》个人学习知识点梳理 随笔 第6张

 

 

4. 相机模型

  相机几何模型:将三维空间中的点(单位为米)映射到二维图像平面(单位为像素)的过程。

  针孔模型是常见且有效的模型。

  • 内参矩阵K:相机坐标系到图像像素坐标系产生的中间量(固定)
  • 外参矩阵P:相机的位姿R,t
  • 存在畸变

  单目相机模型:

《SLAM十四讲》个人学习知识点梳理 随笔 第7张

 

 

 

  双目相机模型:

  《SLAM十四讲》个人学习知识点梳理 随笔 第8张

 

 

 

5. 前端

  特征匹配法:一共六组实验。首先是ORB特征提取,通常是一些边和角等灰度特征比较明显的地方,描述子用来表示这些特征的周围。对极约束用在两组2d的点,都不知道深度的情况。3D-2D就是匹配的一组点知道深度,一组不知道。

《SLAM十四讲》个人学习知识点梳理 随笔 第9张

 

 

  直接法:最小化光度误差

  相比特征匹配法,直接法只计算特征点,不计算描述子,不需要知道点和点的匹配关系,计算量小。

 

  《SLAM十四讲》个人学习知识点梳理 随笔 第10张

 

 

  直接法有一个很强的假设——灰度不变假设:同一个空间点的像素灰度值在各个图像中是固定不变的。

《SLAM十四讲》个人学习知识点梳理 随笔 第11张

 

 

  光度误差是P的两个像素的亮度误差。左边的实验叫稀疏直接法,示意图中匹配的P来自稀疏特征点,右边是半稠密直接法,不同就是P的特征点选取的多。

 

                                                        《SLAM十四讲》个人学习知识点梳理 随笔 第12张                                             《SLAM十四讲》个人学习知识点梳理 随笔 第13张

 

 

6. 后端 

  前端可以给出一个短时间内的轨迹和地图,但由于不可避免的误差累积,如果时间长了这个地图是不准确的。所以我们希望构建一个尺度、规模更大的优化问题,以考虑长时间内的最优轨迹和地图。

  EKF

  • EKF目前已经被图优化所取代,曾经应用非常广泛  

  Bundle Adjustment:BA是在只有观测方程的情况下,优化相机的位姿以及路标三维坐标的图优化。

  • 优化相机位姿和路标点坐标
  • 节点表示相机和路标,边为它们之间的观测

  Pose Graph:在大规模的定位和建图中,时间越久,BA计算量越大。因此提出pose graph,由关键帧之间通过特征匹配之后得到的运动估计来给定初始值,然后不再估计路标点

  • 优化相机位姿
  • 节点表示相机位姿,边是两个位姿节点之间的运动估计(来自特征点法或直接法)

《SLAM十四讲》个人学习知识点梳理 随笔 第14张

  左图为Bundle Adjustment示意图,右图为Pose Graph示意图。

7. 回环检测

《SLAM十四讲》个人学习知识点梳理 随笔 第15张

 

  前端用于提供特征点的提取和轨迹,地图的初值。后端负责这些数据的优化,但是视觉里程计仅考虑相邻时间上的关联,会有累计误差,无法构建全局一致的轨迹和地图。第一个图表示真实的轨迹,第二个图红色表示位姿的偏移,而如果有回环检测的话则可以将后面偏离的轨迹拉回到重合处。这就是回环检测的好处。这里介绍词袋模型,一共三步。

  词袋模型

  • 创建字典(聚类)

《SLAM十四讲》个人学习知识点梳理 随笔 第16张

                                              K叉树字典

  • 用单词出现的情况描述图像——向量表示
  • 比较上一步中的描述的相似程度

8. 建图

建图是SLAM的两大目标之一,建图的作用可归纳为定位,导航,避障,重建及交互。

 《SLAM十四讲》个人学习知识点梳理 随笔 第17张

单目稠密重建实验: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.

 

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄