简单理解VIO(一)

目录

    • 一、预备知识回顾
      • 1. 场景预设
      • 2. 三维刚体运动
      • 3. 四元数
    • 参考文献

随着AIOT(AI+Iot)技术的发展,任务移动的模块在不久的未来都将配备MEMS IMU,以确定设备的位置与姿态,做出更智能的决策与反应。以手机为例,从iPhone4开始,后续的手机均配备了三轴陀螺仪,从小米2开始就配备IMU,相信未来不管是旗舰机还是普通手机,配备IMU都将是基本配置,就像手机配备照相的镜头一样。
但是由于IMU本身只能提供局部信息且与环境无关,仅依赖IMU并不能为移动设备提供定姿定位服务,使用IMU与视觉的融合,可以为移动设备提供稳定高频的定位信息。

一、预备知识回顾

1. 场景预设

为了更好的简化复杂的逻辑,我们假设机器人在屋里的平面上移动。见附1.

2. 三维刚体运动

可以用一个比较形象的例子来说明,假设人的眼睛为视觉,人体的陀螺仪(@todo)为惯性设备,那需要定义三个坐标系:

  • 世界坐标系W,原点在一楼
  • IMU坐标系I; 原点在后脑勺(小脑部分)
  • 相机坐标系C;原点在左眼

坐标系之间的变换关系是一个旋转与平移,由 T W I ∈ S E ( 3 ) T_{WI} \in SE(3) TWISE(3) 给出,如从I到W的变换矩阵为 T W I T_{WI} TWI, 坐标系转换关系:
P W = T W I ∗ P I P^{W} = T_{WI} * P^{I} PW=TWIPI
其中 P P P为齐次坐标形式,当表示为正常坐标形式时:
P W = R W I P I + t W I P^{W} = R_{WI}P^{I} + t_{WI} PW=RWIPI+tWI

3. 四元数

  • 四元数解决的问题有两个:
    • 解决了欧拉角旋转奇异的问题
    • 提高了旋转计算的精度
  • 四元数的表示,用一个实部和一个虚部来表示: q = [ q 0 , q 1 , q 2 , q 3 ] q = [q_0, q_1, q_2, q_3] q=[q0,q1,q2,q3]. 当我们只有yaw角(z轴)时,例如逆时针旋转30°,用欧拉角表示为[0, 0, π / 6 \pi/6 π/6]. 对应的四元数为 q = [ 0.966 , 0 , 0 , 0.259 ] q = [0.966, 0, 0, 0.259] q=[0.966,0,0,0.259]. 其中x轴,y轴都是0.
  • 四元数之间可以进行乘法运算(以yaw角转动为例):
    • q a ⊗ q b = ( w a w b − z a z b ) + ( w a z b + z a w b ) k q_a \otimes q_b = (w_aw_b - z_az_b) + (w_az_b + z_aw_b)k qaqb=(wawbzazb)+(wazb+zawb)k
    • y a w = π / 6 yaw = \pi/6 yaw=π/6为例, q a ⊗ q b = [ 0.866 , 0 , 0 , 0.500 ] q_a \otimes q_b = [0.866, 0, 0, 0.500] qaqb=[0.866,0,0,0.500],即等于两个三十度相乘。验证方法:四元数在线转换
  • 四元数的精妙之处在于,利用复数的乘法,定义了四元数的乘法,以此来表示旋转矩阵的相乘
  • 四元数时间导数
    • WHY:为什么要求时间的导数呢?那四元数是一个关于时间的函数吗?任何系统应该都是与时间相关的,对于移动设备尤其如此 。前面的这个理解不精准,求导的原因与泰勒公式有关,与系统动态有关,见我的另外一篇控制的笔记。
    • HOW:通过角速度,就可以将姿态与时间联系起来
    • WHAT:假设以1°/s的速度逆时针旋转,以当前旋转为局部坐标系,那么时间基准t时刻的角度可以认为是0(因为偏导数是一个向量,与起点在哪里并没有关系),那么就有(@todo):
      lim ⁡ δ t − > 0 q ( t + δ t ) − q ( t ) δ t = lim ⁡ δ t − > 0 q ( δ t ) − q ( 0 ) δ t \lim_{\delta t->0} \frac{q(t+\delta t) - q(t)}{\delta t} = \lim_{\delta t->0} \frac{q(\delta t) - q(0)}{\delta t} δt>0limδtq(t+δt)q(t)=δt>0limδtq(δt)q(0)
      = lim ⁡ δ t − > 0 [ cos ⁡ ( δ t / 2 ) , [ 0 , 0 , 1 ] T sin ⁡ ( δ / 2 ) ] − [ 1 , 0 , 0 , 0 ] δ t = \lim_{\delta t->0} \frac{[\cos(\delta t/2), [0,0,1]^T\sin(\delta /2)] - [1, 0, 0, 0]}{\delta t} =δt>0limδt[cos(δt/2),[0,0,1]Tsin(δ/2)][1,0,0,0]
      = lim ⁡ δ t − > 0 [ − 1 / 2 sin ⁡ ( δ t / 2 ) , 1 / 2 [ 0 , 0 , 1 ] T cos ⁡ ( δ / 2 ) ] = [ 0 , 1 2 w ] = \lim_{\delta t->0} [-1/2\sin(\delta t/2), 1/2[0,0,1]^T\cos(\delta /2)] = [0, \frac{1}{2}w] =δt>0lim[1/2sin(δt/2),1/2[0,0,1]Tcos(δ/2)]=[0,21w]
      这里是我的一种证明方式,我认为是最简单的
  • 一个函数关于四元数的导数,可以通过求导工具来求。或者,使用李代数中求导法则。
  1. 李代数
    关于李代数在机器人中的应用,最好的参考文献是2.

参考文献

  1. VIO第一讲课件: 链接: https://pan.baidu.com/s/1iqOANw_zmX9ujk_6KsZmBQ 提取码: x269
  2. 链接: https://pan.baidu.com/s/1Wh48ra7_5Qyu-G05BnXysA 提取码: i1rh 复制这段内容后打开百度网盘手机App,操作更方便哦

  1. 场景地图
    简单理解VIO(一)_第1张图片

你可能感兴趣的:(VIO)