(一)视觉SLAM笔记总结:初识slam到三维空间刚体运动的描述
写在最前面:
过去的2018年是不易的一年,感谢那些对我提供过帮助的人儿,过的是好是坏也已经过去了,翻篇!作为slam领域的一名小小白,打算在空余的时间开启我的slam学习之旅,slam对于我来说,是一片浩瀚无垠充满诱惑力的深邃大海,等待着去探索。
为了学习slam,以前学过的高数、线代、概率论等等,丢给老师的东西要慢慢地一点点捡回来。于我而言,这并不是件容易的事情,可是没坚持过又怎么知道自己不行呢,尚且在还年轻有动力的时候,就是要多去尝试和坚持,一点点的去记录自己的成长,做个有情怀有温度的小肚几!

1.初识小萝卜
SLAM是什么?SLAM是Simultaneous Localization And Mapping,即就是同时定位与地图构建。他是搭载特定传感器的主题,在没有环境先验信息的情况下,于运动过程中建立的模型。如果这里的传感器是以camera作为主体,那就称为“视觉slam”。
1.1、该干什么事?
为了让我们的小萝卜能够探索完一个房间,他至少需要干两件事:
1.小萝卜在什么地方?----定位 。
2.周边的环境是什么样的?----建图 。
“定位”和“建图”可以理解为感知的“内外之分”。作为一个“内外兼修”的小萝卜,一方面是要明白自身的状态(位置),另一方面要了解外在的环境(地图)。
1.2、传感器的分类
1、携带于机器人本体上的,例如机器人的轮式编码器、camera、激光传感器等。
2、另一类是安装于环境中的,导轨、二维码等等。
1.3、当谈论到视觉slam的时候,主要是指如何用camera解决定位和建图的问题。按照工作方式的不同,相机有以下的分类。
1、单目相机 :只使用一个摄像头进行slam的做法称为单目slam,以二维的形式反映了三维的世界,这个过程丢掉了场景的一个维度,也即是所谓的深度(或距离)。
单目视觉中的尴尬:不知道深度的时候,手掌上的是真人还是模型
在单目slam中也是同样的原理。我们必须移动相机才能估计他的运动,同时估计场景中物体的远近和大小,称之为结构。还知道:近处的物体移动快,远处的物体移动慢。当相机移动的时候,在图像上就形成了视差。
单目slam估计的轨迹和地图相差一个因子,也就是尺度 ,由于单目slam无法仅凭图像确定这个真实尺度,所以又称为尺度的不确定性 。
平移之后才可以计算深度,以及无法确定真是尺度,其根本原因是通过单张图像无法确定深度。
2、双目相机 :双目相机由两个单目相机组成,这两个单目相机之间的距离(基线)是已知的,通过这个基线来估计每个像素的空间位置,和人眼类似。基线的距离越大,能测到的就越远。双目相机的距离估计是比较左右眼的图像获得的,并不依赖设备。因此室内外都可以应用。他的缺点是配置与标定都比较复杂,其深度量程和精度受双目的基线与分辨率所限,而且视差的计算非常的消耗计算资源。需要使用gpu和fpga设备加速后,才能实时输出整张图像的距离信息,因此计算量是双目的主要问题之一。
3、深度相机 : 又称为RGB-D相机,他的最大的特点是可以通过红外结构光或者Time-Of-Flight(TOF)原理,像激光传感器那样,通过主动像物体发射光并接收返回的光,测出物体与相机之间的距离。
2.经典视觉SLAM框架:

整个视觉slam流程包括以下步骤:
1、传感器信息的读取 。在视觉slam中主要为camera图像信息的读取和预处理。如果实在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。
2、视觉里程计 (Visual Odometerry,VO)。视觉里程计的任务是估算相邻图像间相机的运动,以及局部地图的样子,VO又称为前端。
3、后端优化 (Optimization)。后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对他们进行优化,得到全局一致的轨迹和地图。由于在VO之后,又称为后端。
4、回环检测 (Loop Closing)。判断机器人是否到达过先前的位置,如果检测到回环,他会把信息提供给后端进行处理。
5、建图 (Mapping)。他会根据估计的轨迹,建立与任务要求对应的地图。
视觉里程计
视觉里程计关心的是相邻图像之间的相机运动,最简单的情况当然是两张图像之间的运动关系。VO能通过相邻帧间的图像估计相机运动,并恢复场景的空间结构。称它为“里程计”是因为他和实际的里程计一样,只计算相邻时刻的运动,而和再往前的过去的信息没有关联。但前端的过程中必然存在误差,误差会不断累积,形成累积漂移。为了消除漂移,需要回环检测和后端优化。
后端优化
后端优化主要指的是处理slam中噪声的问题。我们要关心的是如何从图像估计出相机运动,还要关心这个估计有多大的噪声,这些噪声是如何从上一时刻传递到下一时刻的,如何从这些带有噪声的数据中估计整个系统的状态,以及这个状态估计的不确定性有多大——这称为最大后验概率估计(Maximum-a-Posteriori,MAP)。在视觉slam中,前端和计算机视觉更为相关,比如图像的特征值提取与匹配等,后端则主要是滤波与非线性优化算法。
回环检测
回环检测主要解决位置估计随时间漂移的问题。假设实际情况下机器人经过一段时间的运动后回到了原点,但是由于累积误差,他的位置估计却没有回到原点。可以通过判断图详见的相似性来完成回环检测。,实际上视觉回环检测是一种计算图像数据相似性的算法。
建图
大体上分为两种,度量地图和拓扑地图。

各种地图类型
3.slam问题的数学表述:
假设机器人携带者某类传感器在未知的环境里运动,把一段连续的时间的运动变成了离散时刻 t = 1,…,K当中发生的事,在这些时刻,用x表示机器人的自身位置。各时刻的位置就记为x1,…xk,构成了机器人的轨迹。地图是由很多个路标组成的,路标表示为y1,…yk。
slam运动方程含义从k-1时刻到k时刻,机器人的位置变化情况,数学上可用一个通用的抽象的数学模型表示:


保持通用性,SLAM过程可总结为两个基本方程:

这两个方称描述了最基本的slam问题:当知道了运动测量读书u。以及传感器读数z时,如何求解定位问题(估计x)和建图问题(估计y)。从而把slam问题建模成了一个状态估计 问题。按照运动和观测方称是否为线性,噪声是否服从高斯分布进行分类,分为线性 /非线性 和高斯 /非高斯 系统。线性高斯系统(Liner Gaussian,LG系统),他的最优估计可以由卡尔曼滤波器 给出。而在复杂的非线性非高斯系统中,使用拓展卡尔曼滤波器 ( Extendded Kalman Filter, EKF)和非线性优化 两大类方法去求解他。
4.三维空间的刚体运动:
该讲主要描述了三位空间中刚体运动的几种表述方式:
1、旋转矩阵
2、旋转向量
3、欧拉角
4、四元数
5、相似、仿射、射影变换
该部分内容请参考这位优秀的博主,以下为链接。
—三维空间刚体运动
