一 VIO简介
VIO(Visual-Ineritial Odemetry)是以视觉和IMU融合的里程计。
IMU(Inertial Meaurement Unit),惯性测量单元
- 典型6轴IMU以较高频率(
100Hz)返回被测量物体的角速度和加速度
- 受自身温度,零飘,振动等因素干扰,积分得到的平移和旋转容易漂移
视觉里程计Visual Odometry
- 以图像的形式记录数据,频率较低(15-60Hz)
- 通过图像特征点或像素推测相机运动
IMU与视觉历程计的优缺点如下:
可以看出视觉和IMU在定位方面各有优缺点,但他们的优缺点又是可以互补的:
- IMU适合计算短时间,快速运动
- 视觉适合计算长时间,慢速运动
同时可以利用视觉定位来估计IMU的零偏,减少IMU由零偏导致的发散和累积误差;反之,IMU可以为视觉提供快速运动时的定位。
融合方案分为松耦合和紧耦合:
紧耦合是直接使用图像特征和IMU的位置信息来尽心优化定位结果,而松耦合则融合视觉里程计以及IMU的结果来给出最优的定位结果。
主流落地的项目基本都是使用的紧耦合的融合方法,因为:
- 单凭(单目)视觉或则IMU都不具备估计Pose的能力:视觉存在尺度不确定性,IMU存在零偏导致漂移
- 松耦合中,视觉内部BA没有IMU的信息,在整体层面来看不是最优的
- 紧耦合可以一次性建模所有的运动和测量信息,更容易的达到最优
二 基础知识
2.1 三维刚体运动
首先是定义各个坐标系的名称:
- 世界坐标系 W;
- IMU坐标系 I;
- 相机坐标系 C;
坐标系之间的变换关系由一个SE(3)给出,如从I变换到W的变换矩阵记作:;
其中是一个3*3的旋转矩阵,而
则是3*1的平移向量。
右乘一个IMU坐标系下的(其次)坐标,就可以得到该点在世界坐标系下的坐标。
2.2 四元数
知乎上大神放在Github上对于四元数介绍,详细地说明了四元数怎么来的,还有各种动图来解释。
https://github.com/Krasjet/quaternion/tree/master/demo/slerp_cube
https://krasjet.github.io/quaternion/quaternion.pdf
四元数是表示旋转向量的另一种形式,可以用四个数来同时表达旋转轴和旋转角度。可以将旋转矩阵R用四元数q来描述。四元数有一个实部和三个虚部,一般会把虚部写在前面,记为:
或
其中第一个元素为实部,后面三个为虚部。实部是标量,而虚部为矢量,所以也可以记作
同时类似于旋转矩阵的乘法,四元数同样也定义了乘法运算:
考虑某一个绕旋转轴为单位向量旋转
的旋转运动,它对应的四元数q可以表示为
当旋转为微小量时,这时候的四元数的变化为:
那么四元数对于时间的导数就是
2.3 旋转矩阵求导
对于旋转矩阵R,他的角速度矩阵记作w,那么它的导数可以表示为
这个公式称为泊松公式(Possion‘s equation),其中称为反对称矩阵算子:
同样也可以记作或则