目录【只是备份】
第一讲 前言
1.1 本书讲什么
SLAM 是Simultaneous Localization and Mapping 的缩写,中文译作“同时定位与地图构建”。它是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。如果这里的传感器主要为相机,那就称为“视觉SLAM”。
第二讲 初识SLAM
本节目标
- 理解一个视觉SLAM 框架由哪几个模块组成,各模块的任务是什么。
- 搭建编程环境,为开发和实验做准备。
- 理解如何在Linux 下编译并运行一个程序。如果它出了问题,我们又如何对它进
行调试。 - 掌握cmake 的基本使用方法。
2.1 引子:小萝卜的例子
- 传感器约束了外部环境。
- 按照相机的工作方式,我们把相机分为单目(Monocular)、双目(Stereo)和深度相机(RGB-D)三个大类
- 双目或多目相机的缺点是配置与标定均较为复杂,其深度量程和精度受双目的基线与分辨率限制,而且视差的计算非常消耗计算资源,需要使用GPU 和FPGA 设备加速后,才能实时输出整张图像的距离信息。因此在现有的条件下,计算量是双目的主要问题之一。
- 深度相机(又称RGB-D 相机,在本书中主要使用RGB-D 这个名称),最大的特点是可以通过红外结构光或Time-of-Flight(ToF)原理,像激光传感器那样,通过主动向物体发射光并接收返回的光,测出物体离相机的距离。这部分并不像双目那样通过软件计算来解决,而是通过物理的测量手段,所以相比于双目可节省大量的计算量。不过,现在多数RGB-D 相机还存在测量范围窄、噪声大、视野小、易受日光干扰、无法测量透射材质等诸多问题。
2.2 经典视觉SLAM 框架
我们把整个视觉SLAM 流程分为以下几步:
- 传感器信息读取。在视觉SLAM 中主要为相机图像信息的读取和预处理。如果在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。
- 视觉里程计(Visual Odometry, VO)。视觉里程计任务是估算相邻图像间相机的运动,以及局部地图的样子。VO 又称为前端(Front End)。
- 后端优化(Optimization)。后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在VO 之后,又称为后端(Back End)。
- 回环检测(Loop Closing)。回环检测判断机器人是否曾经到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。
- 建图(Mapping)。它根据估计的轨迹,建立与任务要求对应的地图。
2.2.1 视觉里程计
仅通过视觉里程计来估计轨迹,将不可避免地出现累计漂移(Accumulating Drift)。这是由于视觉里程计(在最简单的情况下)只估计两个图像间运动造成的。
2.2.2 后端优化
在视觉SLAM 中,前端和计算机视觉研究领域更为相关,比如图像的特征提取与匹配等,后端则主要是滤波与非线性优化算法。
SLAM 问题的本质:对运动主体自身和周围环境空间不确定性的估计。
2.2.3 回环检测
回环检测,又称闭环检测(Loop Closure Detection),主要解决位置估计随时间漂移的问题。事实上,我们认为,地图存在的主要意义,是为了让机器人知晓自己到达过的地方。为了实现回环检测,我们需要让机器人具有识别曾到达过的场景的能力。
2.2.4 建图
度量地图(Metric Map)强调精确地表示地图中物体的位置关系
拓扑地图(Topological Map)强调地图元素之间的关系
2.3 SLAM 问题的数学表述
状态估计问题的求解,与两个方程的具体形式,以及噪声服从哪种分布有关。我们按照运动和观测方程是否为线性,噪声是否服从高斯分布进行分类,分为线性/非线性和高斯/非高斯系统。其中线性高斯系统(Linear Gaussian, LG 系统)是最简单的,它的无偏的最优估计可以由卡尔曼滤波器(Kalman Filter, KF)给出。而在复杂的非线性非高斯系统(Non-Linear Non-Gaussian,NLNG 系统)中,我们会使用以扩展卡尔曼滤波器(Extended Kalman Filter, EKF)和非线性优化两大类方法去求解它。直至21 世纪早期,以EKF 为主的滤波器方法占据了SLAM 中的主导地位。我们会在工作点处把系统线性化,并以预测——更新两大步骤进行求解(见第九讲)。最早的实时视觉SLAM 系统即是基于EKF开发的。随后,为了克服EKF 的缺点(例如线性化误差和噪声高斯分布假设),人们开始使用粒子滤波器(Particle Filter)等其他滤波器,乃至使用非线性优化的方法。时至今日,主流视觉SLAM 使用以图优化(Graph Optimization)为代表的优化技术进行状态估
计。
第3讲 三维空间刚体运动
本节目标
- 理解三维空间的刚体运动描述方式:旋转矩阵、变换矩阵、四元数和欧拉角。
- 掌握Eigen库的矩阵、几何模块使用方法。
3.1 旋转矩阵
3.1.1 点和向量,坐标系
外积只对三维向量存在定义,我们还能用外积表示向量的旋转。
人们习惯右手系。
3.1.2 坐标系间的欧氏变换
欧氏变换:保证了同一个向量在各个坐标系下的长度和夹角都不会发生变化的变换。
旋转矩阵:行列式为1的正交矩阵。
3.1.3 变换矩阵与齐次坐标
3.3 旋转向量和欧拉角
3.3.1 旋转向量
旋转向量:其方向与旋转轴一致,而长度等于旋转角的向量
3.3.2 欧拉角
欧拉角当中比较常用的一种,便是用“偏航-俯仰-滚转”(yaw-pitch-roll)三个角度来描述一个旋转的。由于它等价于ZYX轴的旋转,我们就以ZYX为例。假设一个刚体的前方(朝向我们的方向)为X轴,右侧为Y轴,上方为Z轴,见图3-3。那么,ZYX转角相当于把任意旋转分解成以下三个轴上的转角:
- 绕物体的Z 轴旋转,得到偏航角yaw;
- 绕旋转之后的Y 轴旋转,得到俯仰角pitch;
- 绕旋转之后的X 轴旋转,得到滚转角roll。
3.4 四元数
3.4.1 四元数的定义
四元数(Quaternion):Hamilton 找到的一种扩展的复数. 它既是紧凑的,也没有奇异性。