IMU 简介

所谓 IMU(Inertial Measurement Unit,简称:IMU)是指惯性测量单元,利用惯性的变化测量物体加速运动和旋转。其中目前主流的惯性测量器件是 MEMS(微机电)传感器,它将用于机械结构缩小至纳米尺度,可测量机器人加速度与旋转角速度。

需要注意的是,IMU 或者说 6 轴(6 DOF)传感器讨论的是三轴加速度计和三轴角速度计(俗称陀螺仪),与 AHRS(航姿参考系)或者说 9 轴(9 DOF)传感器是有区别的,后者增加了磁力计,以地磁场作为参考。但是在地面机器人运动并且夹杂大量电机磁干扰的情况下,引入微弱的地磁作为绝对航向并不是一个好主意。

IMU 应用

应用惯性测量

假如一个小车处于静止状态,随后以 加速度 aa 开始加速,那么经过时间 tt 之后,我们可以通过将加速度 aa 对时间 tt 进行积分从而得到小车说运动的路程 ss,即 s=12at2s = \frac{1}{2} a \cdot t^2;小车在某一点转弯,如果我们知道小车转弯的 角速度 ω\omega,那么我们通过 θ=ωΔt\theta = \omega \cdot \Delta t 便可以求出小车转弯的角度。

因此,由上可知,我们只需要知道一个物体的加速度和角速度,就可以推算出物体的实时位姿。

多传感器融合

IMU 有时会与电机编码器进行惯导融合,能够更精准的检测小车的速度和运动轨迹;还可以与相机进行视觉融合 VIO。

IMU 数据能够和很多的传感器数据进行 融合,融合可以从空间和时间两个方面来解释:

  1. 从空间方面,IMU 数据能够和不同维度的数据(例如相机的图像数据)进行互补;
  2. 从时间方面,IMU 数据的频率很高,可以弥补低频率的传感器(例如相机)数据不够连贯的不足。

IMU 组成与原理

IMU

MPU6050

IMU 可根据 DOF 的不同来加以区分,其中 6 DOF 的 IMU 和 9 DOF 的 IMU 比较常见,6 DOF 的 IMU 一般由一个三轴加速度计和一个三轴陀螺仪组成。9 DOF 的 IMU 会多一个三轴磁力计。模块所能感知状态量的个数即为 DOF 大小,DOF 越多、精度越高的 IMU 也就越贵。这里只讨论 6 DOF 的 IMU。

MPU6050 是 InvenSense 公司推出的一款高性能三轴加速度 + 三轴陀螺仪的六轴传感器芯片, 该芯片内部整合了 3 轴陀螺仪和 3 轴加速度传感器,并可利用自带的 数字运动处理器(Digital Motion Processor,简称:DMP)硬件加速引擎,体积较小,减少了大量的封装空间。主要特性如下:

  • 6 位 ADC 和信号调理的三轴 MEMS 陀螺仪,具有 131 LSBs/° /sec 敏感度与全格感测范围为 ±250、±500、±1000 与 ±2000°/sec 的 3 轴角速度感测器(陀螺仪);
  • 16 位 ADC 和信号调理的三轴 MEMS 加速度计,范围为 ±2g、±4g、±8g 和 ±16g 的 3 轴加速度传感器;
  • 自带数字运动处理(Digital Motion Processing,简称:DMP)引擎,内建运作时间偏差与磁力感测器校正演算技术,以数字形式输出 6 轴或 9 轴(需外接磁传感器)的旋转矩阵、四元数、欧拉角格式的融合演算数据,可减少 MCU 复杂的融合演算数据、感测器同步化、姿势感应等的负荷;
  • VDD 供电电压为 2.5V±5%、 3.0V±5%、 3.3V±5%; VLOGIC 可低至 1.8V±5%;
  • 陀螺仪工作电流:5mA,陀螺仪待机电流:5uA;加速度计工作电流:500uA,加速度计省电模式电流:40uA@10Hz;
  • 支持最高 400Khz 的 IIC 通信,IIC 地址为 0X68(AD0 接 GND)或 0x69(AD0 接 VDD);

加速度计

顾名思义,三轴加速度计能感受三轴的加速度,如上图中三个矢量所示。但要注意的是,当图示模块水平放置且静止,zz 轴方向加速度大小为 g-g也就是说 IMU 测量的加速度与物体真实加速度相差一个重力加速度

加速度计

加速度计的物理实现是利用牛顿第二定律,如上图所示,中间红色物体为一个质量块,两头通过具有弹簧性质的长条结构与基底相连,红色的短栅与绿色的短栅分别为电容的极板。当基底在双箭头方向有加速度 aa 时,由 f=ma=kxf=ma=kx,质量块会沿加速度相反的方向移动,红色极板与绿色极板之间的距离会发生变化,通过测量极板电容 CC 的变化就可以得到加速度的大小。在三轴加速度计中,这样的结构在三个方向各有一个,且做到了微米的尺寸,并配合相应的测量电路集成在一个芯片中(如图一所示),构成一个微机电系统(MEMS)。

陀螺仪

角速度测量的原理比加速度要复杂一些,因为涉及了 科里奥里力(Coriolis Force)。所以我们先来说一下 Coriolis Force 。科里奥里力是由坐标系的转动与物体在动坐标系中的相对运动引起的,其本质是物体的惯性。

陀螺仪

如果图示模块置于绝对静止的坐标系中,当在 xx 方向施加一个驱动力使质量块运动时,根据牛顿第二定律,质量块只会在 xx 方向上运动,而在 yy 方向上不会运动。

科里奥利力

但如果将图示模块置于一个旋转坐标系下,由于坐标系的旋转,使得当质量块沿 xx 方向运动时,在 yy 方向上会受到一个力,即科里奥里力 F=2mvωF = -2mv \omega,从而使质量块沿 yy 方向运动。地球上的很多自然现象,如热带气旋、季风带、河道两侧冲刷程度不同,都源于科里奥里力。

科里奥利力

陀螺仪的物理实现如上图所示,外侧的蓝色与黄色部分为驱动电极,内部的红色与蓝色为测量电极。在模块的驱动方向施加正弦驱动电压,当模块发生旋转时,质量块在垂直方向受科里奥里力影响也会产生一个正弦运动,且正弦运动的幅值与平台的角速度成正比,通过垂直方向的电极测量出此幅值,便可以得到模块角速度。与三轴加速度计一样,这样的结构在三轴陀螺仪的三个方向上各有一个,从而测量出三个方向的角速度。

IMU 姿态解算

现在我们能够从 IMU 中得到三轴的加速度和三轴的角速度,接下来就要从这些数据中解算出三个方向的角度。实际上,单独由加速度计或陀螺仪都可以解算出三轴的角度。

由加速度解算角度

加速度解算

由于 加速度计本质是测量力,所以在传感器静止的时候,测量的结果为重力加速度。当平台运动的加速度远小于重力加速度时,可认为传感器测量的结果全部为重力加速度,因此可以根据重力加速的在三轴分量的大小来解算出角度。

加速度解算

以上图为例,传感器沿 yy 方向倾斜的角度为:

AngleAccel=arccosaxgAngle_{Accel} = arccos \frac{ax}{g}

由陀螺仪解算角度

由角速度解算角度很容易理解,当知道陀螺仪的初始角度时,对角速度进行积分就可以得到角度值:

AngleGyro=Angle0+0tGyro dtAngle_{Gyro} = Angle_0 + \int^t_0 Gyro \ dt

数据融合

现在我们可以从加速度和角速度分别解算出角度,但这两种方式都存在很大的问题。一方面由于加速度计容易受到振动的影响,噪声很大,所以解算角度的噪声也很大;另一方面虽然陀螺仪测量角速度的噪声不是很大,经过积分环节后噪声进一步被变小,但由于初始角度并不能准确得到,而且角速度存在零漂问题(即模块静止时角速度不完全为 0,而是有一个偏置),经过积分后这个误差会被累积。
因此,两种方式解算出来的角度都无法直接使用,但我们可以采用数据融合的方法,把两种角度融合在一起,得到一个既没有累计误差、噪声又小的角度数据。

1. 互补滤波

一阶互补滤波是最简单但却非常实用的数据融合算法,它把由加速度解算的角度和由角速度积分的角度按照一定比例加到一起,公式如下:

Angle=KAngleAccel+(1K)(Angle+ωdt)Angle = K \cdot Angle_{Accel} + (1 - K) \cdot (Angle + \omega \cdot dt)

其中参数 KK 表示对加速度解算角度的置信程度,由于加速度的噪声很大,所以参数 KK 一般很小,典型值为 0.050.05,实际使用要根据效果来调整。

这样的互补滤波器可以看做是一个高通滤波和一个低通滤波的叠加:公式的第一项是为低通滤波部分,目的是滤除加速度的噪声;公式的第二项为高通滤波部分,目的是滤除角速度的直流偏置(零漂)。

2. Kalman 滤波

待补充