视觉slam框架
1、读取传感器信息,视觉slam中主要为相机图像信息的读取和预处理。
2、视觉里程计。视觉里程计的任务是估算相邻图像间相机的运动,以及局部地图的样子。
3、后端非线性优化,后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。
4、回环检测,回环检测判断机器人是否到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。
5、建图。它根据估计的轨迹,建立与任务要求对应的地图。
三维空间刚体运动
1、理解三维空间的刚体运动描述方式:旋转矩阵、变换矩阵、四元数和欧拉角。
2、掌握 Eigen 库的矩阵、几何模块,熟练编写代码实现刚体三维空间旋转平移运动。
旋转矩阵
点:空间中最基本的元素,没有长度没有体积,空间中两个点连接起来就构成了向量。
基:以三维空间维例(e1, e2, e3),一组线性无关的向量,即不存在全为0的实数x1,x2,x3使得x1e1+x2e2+x3e3=0,空间的基就是该空间内的一组线性无关向量组,空间内的任意一个向量都可以由该向量组线性表示,向量组内向量的个数称为该空间维数。
基底坐标:任意向量a在一组基下就有一个坐标,这里 (a1, a2, a3)T 称为 a 在此基下的坐标。坐标的具体取值,一是和向量本身有关,二是和坐标系中基的选取有关。
向量的内积:也被称为向量的点乘,结果为一个数
向量的外积:外积的结果是一个向量,它的方向垂直于这两个向量,大小为 |a| |b|sin ⟨a, b⟩,是两个向量张成的四边形的有向面积。
以三维空间为例e1,e2,e3为基中的线性无关向量,简化为e1(1,0,0),e2(0,1,0),e3(0,0,1)
公式中∧ 符号是反对称符号,a∧ 为反对称矩阵,反对称矩阵 A 满足 AT = −A。
坐标系间的欧式变换
相机视野中某个向量 p,它在相机坐标系下的坐标为 pc,而在世界坐标系下看,它的坐标为 pw,那么,这两个坐标之间是如何转换的呢?这时,就需要先得到该点针对机器人坐标系的坐标值,再根据机器人位姿变换到世界坐标系中。
矩阵 R描述了旋转本身。因此称为旋转矩阵(Rotation matrix)。SO(n) 是特殊正交群的意思。通过旋转矩阵,我们可以直接谈论两个坐标系之间的旋转变换,而不用再从基开始谈起。
由于旋转矩阵为正交矩阵,它的逆(即转置)描述了一个方向相反的旋转。按照上面的定义方式
在欧氏变换中,除了旋转之外还有平移。
实际当中,我们会定义坐标系 1、坐标系 2,那么向量 a 在两个系下坐标为 a1, a2,它们之间的关系,按照完整的写法,应该是:
R12 是指“把坐标系 2 的向量变换到坐标系1
变换矩阵与齐次坐标
通过欧式变换我们可以完整地表达了欧氏空间的旋转与平移,不过还存在一个小问题:这里的变换关系不是一个线性关系。假设我们进行了两次变换:R1, t1 和 R2, t2:
那么,从 a 到 c 的变换为:
这样的形式在变换多次之后会显得很啰嗦。因此引入齐次坐标和变换矩阵,这是一个数学技巧:我们在一个三维向量的末尾添加 1,将其变成了四维向量,称为齐次坐标。对于这个四维向量,我们可以把旋转和平移写在一个矩阵里面,使得整个关系变成线性关系。该式中,矩阵 T 称为变换矩阵(Transform Matrix)。
我们暂时用 ˜a 表示 a 的齐次坐标。那么依靠齐次坐标和变换矩阵,两次变换的叠加就可以有很好的形式:
关于变换矩阵 T,它具有比较特别的结构:左上角为旋转矩阵,右侧为平移向量,左下角为 0向量,右下角为 1。这种矩阵又称为特殊欧氏群
与 SO(3) 一样,求解该矩阵的逆表示一个反向的变换: