文章目录
系列教程来自某学院,侵权删除。
学习完这一系列课程再去看VINS才能做到不吃力,不然直接撸网上的各种VINS解析完全云里雾里-_-!
这一讲是本系列的最后一讲,我们会对之前的内容进行一个回顾,并对VINS系统进行研究。
VIO基础回顾
IMU基础回顾
预积分的作用是为了避免世界坐标系和body系下的变换,如上图中红色的表示预积分值,而每个小黑点代表一个IMU测量,通过预积分就可以约束两帧图像之间的变换,IMU的传感器模型如下:
预积分的公式如下:
另外还有一点是IMU的协方差传递,由于每一个小黑点测量时都有一个测量误差,那么我们后来运用的预计分量也就存在误差,那么一段时间内多个误差的传递就要用到协方差的传递,最后用来估计预积分的不确定度。
视觉基础回顾
这部分在第六讲刚刚讲过,主要在视觉部分如何获取相机的变换。
- 对于两帧图像,我们要先进行特征点的提取和匹配。
- 已知俩图像特征匹配点:利用对极几何约束 (E 矩阵,H 矩阵),计算两图像之间的 pose。
- 已知相机pose后,通过三角化获取特征点的三维坐标。
- 此时当新来一帧图像时,由于共视关系会出现已知3d点和2d特征点的情况,此时我们使用PnP来求新相机的pose。
在纯视觉的vSlam中,前三步就完成了相机的初始化,但是此时我们是在系统内部形成了尺度,并不知道系统在实际3D空间中的米制信息。
问题探讨
上图就是一个VIO系统,在我们了解了视觉和IMU分别是如何工作之后,我们还需要考虑一些问题:
- IMU 怎么和世界坐标系对齐,计算初始时刻的 q w b 0 q_{wb_0} qwb0?
- 单目视觉姿态如何和 IMU 轨迹对齐,尺度如何获取?
- VIO 系统的初始速度 v,传感器 bias 等如何估计?
- IMU 和相机之间的外参数等
这就是VIO系统初始化时需要考虑的一些问题,下面我们一一来进行分析。
VINS初始化
视觉和IMU之间存在着一定的联系,利用这些几何的约束,我们就可以进行初始化,对于下面这幅图:
使用外参数 q b c q_{bc} qbc、 t b c t_{bc} tbc可以获得下面两个式子,记为式3,第一行表示从bk位置变换到c0位置的旋转变换,第二行中s表示尺度因子,带bar的p: p ˉ \bar p pˉ表示非米制单位下,也就是系统内部的单位下的位移,第二行的式子就表示bk到c0的位置变换。
对第二行的式子进行变换可以得到非米制单位下ck到c0的位置变换:
这几个量会在后面的公式推到中用到。下面我们先对视觉 IMU 对齐流程做一个梳理:
- 旋转外参数 q b c q_{bc} qbc 未知, 则先估计旋转外参数。
- 利用旋转约束估计陀螺仪 bias,旋转约束就是式3的第一行。
- 利用平移约束估计重力方向,速度,以及尺度初始值,平移约束就是式3的第二行。
- 对重力向量 g c 0 g^{c_0} gc0 进行进一步优化
- 求解世界坐标系 w 和初始相机坐标系 c0 之间的旋转矩阵 q w c 0 q_{wc_0} q