MEMS IMU 校准算法

目录

IMU 简介

MEMS IMU如何选型

1.零偏温度滞回特性

2. 振动特性

3. 重复上电对IMU bias的影响

4. 应力对bias影响

5. 冲击对零偏影响

6. Gyro非线性因子(%Fs)

IMU校准标定

简化的IMU误差模型:

加计校准算法

Gyro校准算法


IMU 简介

IMU(Inertial Measurement Unit)即惯性测量单元,能够测量物体三轴加速度及角速度,一般用于系统的测量环节,估计物体位姿。IMU一般包含一个三轴的加速度计和一个三轴的陀螺仪,加速度计检测物体在载体坐标系统独立三轴的加速度信号,陀螺检测载体相对于导航坐标系的角速度信号,根据测得物体在三维空间中的角速度和加速度可以解算出物体的姿态。MEMS IMU价格便宜,体积小,在导航、无人机、VR、机器人以及智能手环等诸多领域得到广泛应用。IMU的检测精度对系统的整体性能非常重要,如果IMU检测数据噪声很大,系统得到的反馈就是错误的,就好比人的眼睛耳朵等感官得到了错误的信息,如何能够行动自如?系统底层是根基,如果系统底层不稳定,数据乱七八糟,上层功能怎么可能做好!目前市场上的智能硬件公司,大多数都不能够很好的使用MEMS IMU,在此结合多年的MEMS IMU使用经验,将MEMS IMU的基本校准流程与校准算法进行了总结,并分享于此。

MEMS IMU如何选型

IMU的特性会直接影响产品的良率,所以IMU选型很重要,这部分会结合MEMS IMU的特性,介绍在IMU选型时需要做哪些测试。由于不同的应用场所对IMU精度要求不同,本文中没有定量的给出具体指标,具体指标需要各位在应用中权衡,也可以为IMU型号选择提供参考。

1.零偏温度滞回特性

零偏温度滞回特性指的是:IMU在温度上升阶段和温度下降阶段对应的零偏不一致性。如图所示,横轴为温度,纵轴为零偏。有些IMU数据手册中会给出零偏温度滞回特性曲线,有些不会给出,不管IMU芯片厂商是否给出零偏温度滞回曲线,在应用IMU时最好都进行一下测试。因为IMU零偏的估计,是按温度进行标定的(IMU校准算法部分有详细介绍),一般温度滞回差值不会太大,可以忽略;如果IMU零偏滞回差值太大,IMU零偏估计就不准,我们得到的IMU估计值与真值的误差就越大,此时认为该IMU芯片为不良品,不能应用。

MEMS IMU 校准算法_第1张图片

2. 振动特性

在外界有振动情况下,IMU bias随振动频率的变化特性。有些MEMS IMU芯片在高频激振下,频率特性会出现异常,对于旋翼无人机等容易出现高频振动的应用场所,最好做下振动特性的测试,如果IMU出现异常频率特性,可以加减震装置。

3. 重复上电对IMU bias的影响

理想情况下认为在相同外界条件下,IMU在每次上电的bias不变,实际情况中,在相同的外界条件下IMU每次上电的bias会有差别,一般这个差别不大,可以忽略;如果这个差别比较大,则零偏估计会不准,此时认为该IMU芯片为不良品,不能应用。

4. 应力对bias影响

应力对IMU的影响包括:加应力瞬间对bias影响、不同应力对bias影响。应力主要来源于:PCB板对IMU芯片施加的应力,温控装置对IMU芯片施加的应力。一般应力对IMU影响不大,可以忽略,如果IMU bias受应力影响太敏感,则认为该IMU芯片为不良品,不能应用。

5. 冲击对零偏影响

在IMU收到外部冲击时(几十个G的量级),会有概率性的造成IMU卡死,或者bias改变。在IMU选型阶段最好做下冲击测试,以保证IMU良率。

6. Gyro非线性因子(%Fs)

理想情况下,我们认为Gyro在量程范围内是线性的,实际中Gyro的变化是非线性的(为什么这里只说Gyro呢?因为一般Gyro非线性严重,acc线性特性比较好)如图2所示,在使用IMU之前需要对其非线性特性进行测试,如果gyro非线性太严重,则认为该IMU芯片为不良品,不能应用。

G_{c}=M_{g}*S_{g}*(G_{u}-B_{c}), Fs=\frac{\left \|G_{c} - G_{T}\right \|_{max}}{Gyro_{range}}

MEMS IMU 校准算法_第2张图片

IMU校准标定

简化的IMU误差模型:

acc误差模型:

A = M_{a}*S_{a}*(U_{a}-B_{a})         式(3-1)

A=\begin{bmatrix} A_{x}\\ A_{y} \\ A_{z} \end{bmatrix}, M_{a}=\begin{bmatrix} M_{axx} &M_{axy} &M_{axz} \\ M_{ayx} &M_{ayy} &M_{ayz} \\ M_{azx} &M_{azy} &M_{azz} \end{bmatrix}, S_{a}=\begin{bmatrix} S_{ax} & 0& 0\\ 0& S_{ay} &0 \\ 0 &0 &S_{az} \end{bmatrix}, U_{a}=\begin{bmatrix} U_{ax}\\ U_{ay}\\ U_{az} \end{bmatrix},B=\begin{bmatrix} B_{x}\\ B_{y}\\ B_{z} \end{bmatrix}

其中A为acc真值,M_{a}为交轴误差(交轴误差指IMU三轴不正交产生的误差),S_{a}为scale误差,U_{a}为IMU acc测量值,B_{a}为acc bias。

Gyro误差模型:

G=M_{g}*S_{g}*(U_{g}-B_{g}-H_{g}*A)   

G=\begin{bmatrix} G_{x}\\ G_{y}\\ G_{z} \end{bmatrix},M_{g}=\begin{bmatrix} {M_{gxx}} &{M_{gxy}} &{M_{gxz}} \\ {M_{gyx}} &{M_{gyx}} &{M_{gyz}} \\ {M_{gzx}} &{M_{gzy}} &{M_{gzz}} \end{bmatrix},S_{g}=\begin{bmatrix} {S_{gx}} &0 &0 \\ 0 & {S_{gy}}&0 \\ 0& 0&{S_{gz}} \end{bmatrix}

U_{g}=\begin{bmatrix} {U_{gx}}\\ {U_{gy}}\\ {U_{gz}} \end{bmatrix},B_{g}=\begin{bmatrix} B_{gx}\\ B_{gy}\\ B_{gz} \end{bmatrix},H_{g}=\begin{bmatrix} H_{gxx} &H_{gxy} &H_{gxz} \\ H_{gyx} &H_{gyy} &H_{gyz} \\ H_{gzx} &H_{gzy} & H_{gzz} \end{bmatrix},A=\begin{bmatrix} A_{x}\\ A_{y}\\ A_{z} \end{bmatrix}

其中G为gyro真值,M_{g}为交轴误差(交轴误差指IMU三轴不正交产生的误差),S_{g}为scale误差,U_{g}为IMU gyro测量值,B_{g}为gyro bias, 与acc相比,gyro的误差模型中多了一项H_{g}*AA是加速度真值,H_{g}是gyro的G敏感度,表示加速度对gyro的影响,一般H_{g}比较小,可忽略,则gyro的误差模型表示为:

G=M_{g}*S_{g}*(U_{g}-B_{g})    式(3-2)

加计校准算法

常用的加计校准算法有六面体校准,和十二面体校准,六面体校准前需要对校准台进行标定,要求校准台与水平面平行,否则会引入校准误差,十二面体校准可以消除校准台与水平面夹脚造成的校准误差。这两种校准算法本质是相通的,以十二面体校准为例进行说明。

十二面体校准步骤:

1.将IMU固定在三轴正交的立方体(治具)上;

2.将治具一面放置在校准面上,静置,采集一段时间数据;

3.将治具原地旋转180度,静置,采集一段时间数据;

4.将两次采集到的数据求平均,作为一次测量值;

5.重复步骤2~3,测量其它五个面数据

MEMS IMU 校准算法_第3张图片

先解释下为什么十二面体校准可以消除校准台不水平带来的误差。当校准台水平时,即校准台与水平面平行,此时acc静置于校准台上,其真值应该为A=\begin{bmatrix} g& 0& 0 \end{bmatrix}^T,g为当地重力加速度;当水平台不水平,其与水平面间存在夹脚\theta时,此时acc静置于校准台上,其真值应该为A=\begin{bmatrix} -gcos(\theta )& gsin(\theta )& 0 \end{bmatrix}^T,如图所示,一般\theta比较小,可近似为A\approx \begin{bmatrix} -g& g\theta & 0 \end{bmatrix}^T。当六面体同一面与校准台接触,前后旋转180度,acc对应的真值应为\begin{bmatrix} -g& g\theta & 0 \end{bmatrix}^T , \begin{bmatrix} -g& -g\theta & 0 \end{bmatrix}^T。两次测量值均值对应的真值应为\begin{bmatrix} -g&0 & 0 \end{bmatrix}^T,即消除了\theta的影响。

MEMS IMU 校准算法_第4张图片

acc校准算法实现:

根据式(3-1)可以得到acc测量模型:

U_{a}=(M_{a}*S_{a})^{-1}*A+B_{a}=S_{a}^{-1}*M_{a}^{-1}*A+B_{a}

P_{a}=(M_{a}*S_{a})^{-1}=S_{a}^{-1}*M_{a}^{-1},则 U_{a}=P_{a}*A+B_{a},写为增广矩阵:

U_{a}=[P_{a}|B_{a}]*AI=K_{a}*AI 式(3-3)

K_{a}=\begin{bmatrix} K_{11} & K_{12}& K_{13}& B_{ax}\\ K_{21}& K_{22}& K_{23}& B_{ay}\\ K_{31}& K_{32}& K_{33}& B_{az} \end{bmatrix}, AI=\begin{bmatrix} g & -g& 0& 0 & 0 & 0\\ 0& 0& g& -g& 0&0 \\ 0& 0& 0 & 0 & g &-g \\ 1 & 1 &1 & 1& 1 & 1 \end{bmatrix}

将六次测量值U_{a},对应的真值AI带入式(3-3),即可求出K_{a}的最小二乘解。

下边来分析下K_{a}里包含了哪些误差项:

K_{a}的定义K_{a}=[P_{a}|B_{a}]可以直接得到P_{a}和 B_{a}B_{a}即为acc的bias估计;再来看看从P_{a}中能得到什么,由P_{a}定义P_{a}=(M_{a}*S_{a})^{-1}=S_{a}^{-1}*M_{a}^{-1}可知P_{a}中包含来scale和交轴误差,交轴误差矩阵具有保模性(即每一列的模为1),由这一性质就可以分离出S_{a}M_{a},公式如下:

P_{a}=\begin{bmatrix} P_{11} &P_{12} &P_{13} \\ P_{21} &P_{22} &P_{23} \\ P_{31} &P_{32} &P_{33} \end{bmatrix}, M_{a}=\begin{bmatrix} M_{axx} &M_{axy} &M_{axz} \\ M_{ayx} &M_{ayy} &M_{ayz} \\ M_{azx} &M_{azy} &M_{azz} \end{bmatrix}, S_{a}=\begin{bmatrix} S_{ax} & 0& 0\\ 0& S_{ay} &0 \\ 0 &0 &S_{az} \end{bmatrix}

S_{a}^{-1}=\begin{bmatrix} S_{ax}^{-1} & 0& 0\\ 0& S_{ay}^{-1} &0 \\ 0 &0 &S_{az}^{-1} \end{bmatrix}=\begin{bmatrix} \frac{1}{\sqrt{P_{11}^{2}+P_{21}^{2}+P_{31}^{2}}} & 0& 0\\ 0 & \frac{1}{\sqrt{P_{12}^{2}+P_{22}^{2}+P_{32}^{2}}} & 0\\ 0 & 0& \frac{1}{\sqrt{P_{13}^{2}+P_{23}^{2}+P_{33}^{2}}} \end{bmatrix}

M_{a}^{-1}=S_{a}*P_{a},M_{a}=P_{a}^{-1}*S_{a}^{-1}

求得scale误差和交轴误差,即S_{a}M_{a},将S_{a} M_{a} B_{a}带入式(3-1),即可由acc测量值得到真值的估计。

Gyro校准算法

gyro校准算法与加计校准思想是一样的,具体实现稍有不同,当gyro输入为零时,其真值输出也应为零(这里不考虑地球自转,认为gyro精度敏感不到地球自转,本文的校准算法针对的是精度较低的MEMS陀螺,如果你的gyro精度足够高,可以敏感到地球自转,则也没有必要做这套校准了)

gyro bias B_{g}的估计可以利用十二面体校准采集的gyro数据,方法与acc校准一样,只不过gyro只能分离出B_{g},公式如下:

根据式(3-2)可以得到gyro测量模型:

U_{g}=(M_{g}*S_{g})^{-1}*G+B_{g}=S_{g}^{-1}*M_{g}^{-1}*G+B_{g}

P_{g}=(M_{g}*S_{g})^{-1}=S_{g}^{-1}*M_{g}^{-1},则 U_{g}=P_{g}*G+B_{g},写为增广矩阵:

U_{g}=[P_{g}|B_{g}]*GI=K_{g}*G 式(3-4)

K_{g}=\begin{bmatrix} K_{11} & K_{12}& K_{13}& B_{gx}\\ K_{21}& K_{22}& K_{23}& B_{gy}\\ K_{31}& K_{32}& K_{33}& B_{gz} \end{bmatrix}, GI=\begin{bmatrix} 0 & 0& 0& 0 & 0 & 0\\ 0& 0& 0& 0& 0&0 \\ 0& 0& 0 & 0 & 0 &0 \\ 1 & 1 &1 & 1& 1 & 1 \end{bmatrix}

将六次测量值U_{g},对应的真值GI带入式(3-4),即可求出K_{g}的最小二乘解。

K_{g}的定义K_{g}=[P_{g}|B_{g}]可以直接得到P_{g}和 B_{g}B_{g}即为gyro的bias估计;只用静态测试数据,只能估计出gyro bias误差B_{g}S_{g}M_{g}需要动态转台数据才能得出。

下边来看怎么得出S_{g}M_{g}

gyro转台测试步骤:

1.将IMU固定在转台上,IMU gyroX轴与转台转轴重合;

2.转台匀速旋转10*360度,记录gyro三轴输出数据,对gyro数据进行积分,可以得到三轴测得的角度,X_{gyrosum}为真值:

X_{gyrosum}=\begin{bmatrix} X_{gyrosumX}\\ X_{gyrosumY}\\ X_{gyrosumZ} \end{bmatrix}=\begin{bmatrix} 3600\\ 0\\ 0 \end{bmatrix}=M_{g}*S_{g}\begin{bmatrix} \int (U_{x}*-B_{x})d_{t}\\ \int (U_{y}*-B_{y})d_{t}\\ \int (U_{z}*-B_{z})d_{t} \end{bmatrix}

3.重复步骤1~2,对y z轴进行测试,得到Y_{gyrosum},Z_{gyrosum}

G_{gyrosum}=\begin{bmatrix} X_{gyrosum}& Y_{gyrosum}& Z_{gyrosum} \end{bmatrix}=\begin{bmatrix} X_{gyrosumX} & Y_{gyrosumX} & Z_{gyrosumX} \\ X_{gyrosumY} & Y_{gyrosumY}& Z_{gyrosumY} \\ X_{gyrosumZ} & Y_{gyrosumZ}& Z_{gyrosumZ} \end{bmatrix}=\begin{bmatrix} 3600 & 0 & 0\\ 0 & 3600 &0 \\ 0 &0 &3600 \end{bmatrix}

MEMS IMU 校准算法_第5张图片

根据gyro测量模型(3-2)可以得出:

G_{sum}=M_{g}*S_{g} \int (U_{g}*-B_{g})d_{t}

G_{sum}为真值,U_{g}为测量值,B_{g}为bias,利用十二面体校准已求出,上式可简化为:

G_{sum}=M_{g}*S_{g}*U_{gs}, U_{gs}=\int (U_{g}*-B_{g})d_{t}

归一化处理:

G_{sumNorm}=G_{sum}/3600= \begin{bmatrix} Gx_{x} & Gy_{x}&Gz_{x} \\ Gx_{y} & Gy_{y}& Gz_{y}\\ Gx_{z}& Gy_{z}&Gz_{z} \end{bmatrix}

归一化后,转台在进行每个轴测试时,对应gyro的三轴测量值的模也应为1,因此:

I=M_{g}*S_{g}*U_{gs},U_{gs}=S_{g}^{-1}*M_{g}^{-1}=\begin{bmatrix} U_{11}&U_{12} &U_{13} \\ U_{21}&U_{22} &U_{23} \\ U_{31}&U_{32} &U_{33} \end{bmatrix}

根据交轴误差矩阵的保模性,即可求得S_{g}M_{g}

S_{g}^{-1}=\begin{bmatrix} S_{gx}^{-1} & 0& 0\\ 0& S_{gy}^{-1} &0 \\ 0 &0 &S_{gz}^{-1} \end{bmatrix}=\begin{bmatrix} \frac{1}{\sqrt{U_{11}^{2}+U_{21}^{2}+U_{31}^{2}}} & 0& 0\\ 0 & \frac{1}{\sqrt{U_{12}^{2}+U_{22}^{2}+U_{32}^{2}}} & 0\\ 0 & 0& \frac{1}{\sqrt{U_{13}^{2}+U_{23}^{2}+U_{33}^{2}}} \end{bmatrix}

M_{g}^{-1}=S_{g}*U_{g},M_{g}=U_{g}^{-1}*S_{g}^{-1}

到此,IMU校准完成。

 

 

 

你可能感兴趣的:(Sensor)