SLAM_相机与imu的融合

1. IMU基本原理

惯性测量单元(Inertial Measurement Unit,简称 IMU)一般由三个单轴加速度计陀螺仪组成。惯导解算主要是通过加速度计测得的载体加速度和陀螺测得的载体相对于导航坐标系角速度来对载体的位置、 姿态速度进行解算。

坐标系

惯性导航中常用的坐标系有地心惯性坐标系、导航坐标系以及载体坐标系。坐标轴一般指向载体正前、正右及正下方。

状态模型

惯导系统的状态量包括 IMU 的位置、姿态、速度以及加速度计和陀螺仪的两个零偏,其中姿态采用四元数表示,状态量可表示为 16 维的列向量。具体可参考以下链接: 

IMU模型推导

IMU 的状态量通常表示为:

这里我们使用和 MSCKF [1] 一样的 notation。用 {I} 表示 IMU 坐标系,{G} 表示参考坐标系。IMU 的姿态由旋转量 和平移量表示。更具体来说,前者为将任意向量从 {G} 坐标映射到 {I} 坐标的旋转量,用单位四元数表示;后者为 IMU 在 {G} 下的三维位置。表示 IMU 在 {G} 下的平移速度。另外两个量​ 和表示陀螺仪(角速度计)和加速度计的 bias。可以注意一下这里除了 bias 之外的状态量的时间维度:平移量表达到速度(p 和 v,对时间的一阶导),因为 IMU 只提供到加速度(对时间的二阶导)的测量;旋转量只表达姿态量(对时间的零阶导),因为 IMU 提供到角速度(对时间的一阶导)。状态量的估计可以由 IMU 测量积分得到。

对于 IMU 状态估计问题,需要提供运动模型、观测(噪声)模型、估计误差模型:

这是一个通用模型,我们用 x表示真实状态量(待估计,不可知),用 z 表示观测量,n 表示观测噪声,表示当前的状态估计量。

2. 怎么才能形象的说明IMU的bias随机游走?

随机游走: 随机游走,其实就是高中时候学过的布朗运动

可以等效为马尔可夫过程,就是这次的bias,是在上次的bias基础上随机变化一个值造成的,而下次的bias是在这次的bias基础上又随机变化一个值得到,经过一段时间的累计,就会有一个大的偏差。

不局限于bias的随机游走,我们把它和零偏稳定性、常值零位、零偏重复性一起聊一聊,因为对与很多人,确实容易弄混。

我们先给出它们各自的解释

  • 1)零偏稳定性:即噪声,反应数据围绕均值的波动情况,静态下认为均值不变
  • 2)常值零位:可以理解为是输出减掉输入,一般指均值
  • 3)零偏重复性:每次上电得到的bias不一样大,重复性反应他们的差别程度
  • 4)随机游走:在1)假设的均值不变代表游走强度为零,实际中,每隔一段时间取均值,发现它会边,这就是随机游走决定的,原理就是马尔可夫形式的累计误差。

3. 单目/双目与imu的融合(一)

视觉 SLAM 存在输出频率低、旋转运动时、运动速率加快时定位易失败等问题,而 IMU 有输出频率高、能输出6DoF测量信息等优点。因此现阶段的一个研究热点是将视觉 SLAM 与 IMU 得到的位姿估计结果进行融合,得到更加鲁棒的输出结果。通过二者的融合,可以解决视觉位姿估计输出频率低的问题,同时位姿估计精度有一定的提高,整个系统也更加鲁棒。这也是一个 VIO (Visual Inertial Odometry) 问题。

目前单目slam存在初始化的尺度问题和追踪的尺度漂移问题,而双目也存在精度不高鲁棒性不好的问题。针对这些问题,人们提出了融合imu的想法。

视觉与IMU融合之后会弥补各自的劣势,可利用视觉定位信息来估计IMU的零偏,减少IMU由零偏导致的发散和累积误差;IMU可以为视觉提供快速运动时的定位,IMU可以提供尺度信息,避免单目无法测尺度 。

那么imu的作用是什么呢?

单目

  • (1)解决初始化尺度问题
  • (2)追踪中提供较好的初始位姿
  • (3)提供重力方向
  • (4)提供一个时间误差项以供优化

双目

  • (1)追踪中提供较好的初始位姿
  • (2)提供重力方向
  • (3)提供一个时间误差项以供优化

4. 视觉和imu融合的算法研究

同SLAM发展过程类似,视觉融合IMU问题也可以分成基于滤波基于优化两大类。 

同时按照是否把图像特征信息加入状态向量来进行分类,可以分为松耦合紧耦合两大类。

提到基于优化的紧耦合,就不得不提okvis了,主体思想是建立一个统一的损失函数同时优化视觉与IMU的位姿,用到了sliding window的思想。可参考 OKVIS, 以及港科大刚刚开源的 VINS-Mono

5. 6轴,9轴,IMU,VRU和AHRS分别指的是什么?

常见的 IMU 为六轴传感器,配备输出三轴加速度加速度计和输出三轴角速度陀螺仪。九轴 IMU 还会配备输出三轴姿态角磁力计

6轴9轴的概念很好理解:说白了就是模块上装了哪些,多少传感器

  • 6轴 : 三轴(XYZ)加速度计 + 三轴(XYZ)陀螺仪(也叫角速度传感器)
  • 9轴 : 6轴 + 三轴(XYZ)磁场传感器
  • 6轴模块可以构成 VRU(垂直参考单元)和IMU(惯性测量单元),9轴模块可以构成AHRS(航姿参考系统)
  • IMU: 惯性测量单元,可以输出加速度和角速度。并不输出姿态角等其他信息
  • VRU: IMU的基础上内置姿态解算算法,可以输出姿态信息。

6. VI-ORBSLAM 论文阅读笔记

Tracking

紧耦合的VI-SLAM策略

通过新帧与旧帧的共视匹配点构建重投影误差方程进行优化解算当前帧状态,需要注意的是:
(1)初始pose由IMU递推得到,将地图点通过该pose投影到新帧上,与新帧上相邻的特征点进行特征匹配;
(2)优化时的残差由IMU残差重投影误差两部分构成,都存在使用信息矩阵进行加权的情况:

  • 对IMU的速度、位置、角度,使用IMU预积分的信息矩阵
  • 对IMU的陀螺仪角速度偏差,使用随机游走
  • 对重投影误差,使用特征点的观测信息矩阵(与特征点追踪次数相关?)

(3)有没有预加载地图的区别在于,构建残差方程时IMU的残差计算使用先验还是后验

Local Mapping

LocalMap实现了一个固定窗口内的状态优化,其策略如下:
(1)固定窗口大小N;
(2)新帧一定会被加入窗口中(因其包含IMU状态);
(3)不在窗口中却与窗口中的帧有共视点的帧,将参与残差方程的构建,但其位姿将被设为fixed(窗口外帧的pose非优化项);
(4)VIO的优化相较于VO更加复杂,相当于每帧中添加了9个待优化项(速度,陀螺仪、加速度零偏),在需要跑实时的情况下需要设定合理的N的大小;
(5)VIO中的关键帧策略与VO中也不太一样,在VO中我们可以直接丢弃冗余帧以控制mapsize,但使用VIO时需要考虑IMU的积分时间随帧间间隔增长可信度下降迅速的问题,所以在系统设计中需要注意不能让两帧之间间隔时间过长(在本文中设置阈值为0.5s)

7. ORB-SLAM3 与VINS-Mono初始化比较

猜你喜欢

转载自blog.csdn.net/shyjhyp11/article/details/115215724