『imu_tk』工具标定IMU的基本原理

『imu_tk』工具标定IMU的基本原理

IMU误差模型

  • 对于加速度计和陀螺仪,定义正交系AOF(GOF)和非正交系AF(GF):
    • AOF(GOF)系的x轴与AF(GF)系x轴重合
    • AOF(GOF)系的y轴与AF(GF)系的xy平面重合
  • 同时,定义正交系BF为载体系,非正交系S为传感器系。在旋转的角度较小时,可以定义非正交系中的测量 s S s^S sS到正交系B的变换为:
    s B = T s S ,     T = [ 1 − β y z β z y β x z 1 − β z x − β x y β y x 1 ] s^B=Ts^S, \ \ \ T = \begin{bmatrix} 1 & -\beta_{yz} & \beta_{zy}\\ \beta_{xz} & 1 & -\beta_{zx} \\ -\beta_{xy} & \beta_{yx} & 1 \end{bmatrix} sB=TsS,   T= 1βxzβxyβyz1βyxβzyβzx1
    其中, β i j \beta_{ij} βij代表S系中的 i i i轴绕BF系中 j j j轴的旋转。
    请添加图片描述

对于IMU标定,可以分为加速度计标定和陀螺仪标定两部分。其中,二者待标定参数的形式上是相同的。(其中,上标 s s s代表非正交系中的向量,上标 o o o代表正交系中的向量)

  • 加速度计模型 ( a c c ) (acc) (acc)
    a O = T a K a ( a S + b a + v a ) a^O = T^aK^a(a^S+b^a+v^a) aO=TaKa(aS+ba+va)
  • 陀螺仪模型 ( g y r o ) (gyro) (gyro)
    w O = T g K g ( w S + b g + v g ) w^O = T^gK^g(w^S+b^g+v^g) wO=TgKg(wS+bg+vg)
  • 对于加速度计和陀螺仪的每个轴上都有比例因子误差和交轴耦合误差,分别定义为 K g , K a K^g,K^a Kg,Ka T g , T a T^g,T^a Tg,Ta。对于二者的量测噪声 v g , v a v^g,v^a vg,va,可以看做是高斯白噪声,由于本文采用静止区间取测量均值的方法进行计算,故可直接忽略该项

其中,
T g = [ 1 − γ y z γ z y γ x z 1 − γ z x − γ x y γ y x 1 ] , K g = [ s x g 0 0 0 s y g 0 0 0 s z g ] T^g = \begin{bmatrix} 1 & -\gamma_{yz} & \gamma_{zy}\\ \gamma_{xz} & 1 & -\gamma_{zx} \\ -\gamma_{xy} & \gamma_{yx} & 1 \end{bmatrix},K^g = \begin{bmatrix} s^g_x & 0 &0 \\ 0 & s^g_y & 0\\ 0 & 0 & s^g_z \end{bmatrix} Tg= 1γxzγxyγyz1γyxγzyγzx1 Kg= sxg000syg000szg
我们定义AOF系与BF系完全重合,故 T a T^a Ta 可以简化为:
T a = [ 1 − α y z α z y 0 1 − α z x 0 0 1 ] , K a = [ s x a 0 0 0 s y a 0 0 0 s z a ] T^a = \begin{bmatrix} 1 & -\alpha_{yz} & \alpha_{zy}\\ 0 & 1 & -\alpha_{zx} \\ 0 & 0 & 1 \end{bmatrix},K^a = \begin{bmatrix} s^a_x & 0 &0 \\ 0 & s^a_y & 0\\ 0 & 0 & s^a_z \end{bmatrix} Ta= 100αyz10αzyαzx1 Ka= sxa000sya000sza

利用优化的方法求解

对于加速度计,我们定义损失函数:( g g g是当地重力加速度)
L ( θ a c c ) = ∑ k = 1 M ( ∣ ∣ g ∣ ∣ 2 − ∣ ∣ a O ∣ ∣ 2 ) 2 L(\theta^{acc})=\sum^M_{k=1}(||\bold{g}||^2-||\bold{a}^O||^2)^2 L(θacc)=k=1M(∣∣g2∣∣aO2)2
对于陀螺仪,我们定义损失函数:
L ( θ g y r o ) = ∑ k = 2 M ∣ ∣ u a , k − u g , k ∣ ∣ 2 L(\theta^{gyro})=\sum^M_{k=2}{||\bold{u}_{a,k}-\bold{u}_{g,k}||^2} L(θgyro)=k=2M∣∣ua,kug,k2
其中, M M M代表记录的 M M M个方向, u g , k = ψ [ w i S , u a , k − 1 ] \bold{u}_{g,k}=\psi[w^S_i,\bold{u}_{a,k-1}] ug,k=ψ[wiS,ua,k1]定义为由 k − 1 k-1 k1时刻的重力加速度向量和 k − 1 k-1 k1 k k k时刻区间内陀螺仪积分计算出的 k k k时刻重力加速度方向(由于校准加速度计在前,此时可认为其测量值无偏)。本文采用 L e v e n b e r g − M a r q u a r d t Levenberg-Marquardt LevenbergMarquardt算法最小化损失函数。

校准步骤

请添加图片描述

参数设置

  • 文中推荐 N N N 36 → 50 36 \to 50 3650 个位置数据
  • 设定初始静止区间长度 T i n i t T_{init} Tinit,文中推荐值为 50 s 50s 50s
  • 设定间隔区间长度 T w a i t T_{wait} Twait, 推荐取值 1 → 4 s 1 \to 4s 14s
  • 设定时间窗 w i n _ s i z e win\_size win_size大小,一般设置为静止区间长度的一半

步骤

  1. 根据时间戳,提取从 t 0 t_0 t0 t 0 + T i n i t t_0+T_{init} t0+Tinit的数据序列
  2. 计算该序列数据的方差作为初始阈值 n o r m t h norm_{th} normth,乘以一个系数 t h m u l t th_{mult} thmult后作为当前阈值,根据当前阈值提取静态区间
  3. 根据当前提取出的静态区间校准加速度计
  4. 根据校准后的加速度计和动态区间陀螺仪的积分校准陀螺仪

校准结果

  • 提取出的静态区间如图所示:
    请添加图片描述
    局部放大后:
    请添加图片描述
    可以看到,静止区间提取的都很恰当,如果提取不完整或者有其他问题,酌情修改 w i n _ s i z e win\_size win_size和间隔区间大小即可。

  • 去除 b i a s bias bias后的陀螺仪数据如下:
    请添加图片描述
    局部放大后:
    请添加图片描述
    经过四阶龙格库塔法积分后,即可得到 Δ t \Delta{t} Δt时间内IMU旋转角度,并根据 t t t时刻的 a t O a^O_{t} atO计算出 t + 1 t+1 t+1时刻的 a ′ {a}' a,通过迭代求解,使得 a ′ {a}' a趋近于 a t + 1 O a^O_{t+1} at+1O

残差

一般来说,算法收敛后,加速度计和陀螺仪 c o s t cost cost值都至少应该在 1 0 − 3 10^{-3} 103数量级才能保证校准精度。我实际校准MPU6050,是可以保证这一点的。

附上论文中校准后的参数:
请添加图片描述
我自己校准的结果:

Accelerometers calibration: Better calibration obtained using threshold multiplier 8 with residual 0.000701741
Misalignment Matrix
           1 -9.40579e-05  -0.00345677
           0            1   0.00620255
          -0            0            1
Scale Matrix
 1.00179        0        0
       0  1.00076        0
       0        0 0.979337
Bias Vector
 0.286974
-0.244268
-0.869412

Accelerometers calibration: inverse scale factors:
0.998216
0.999239
1.0211
Gyroscopes calibration: residual 0.000793112
Misalignment Matrix
         1 0.00171194 0.00134399
 0.0022529          1   -0.01433
0.00430149 -0.0174916          1
Scale Matrix
1.00817       0       0
      0  1.0098       0
      0       0  1.0088
Bias Vector
 -0.149787
-0.0270851
-0.0147985

Gyroscopes calibration: inverse scale factors:
0.991895
0.990297
0.991278

由于我采集的时候陀螺仪单位是 ° / s \degree/s °/s,而程序中默认单位是 r a d / s rad/s rad/s,所以在读取数据的时候我将数据从角度制转化成了弧度制,因而这里的bias单位是 r a d / s rad/s rad/s

注意事项

  1. 静止区间内一定要保证IMU处于静止状态
  2. 动态区间要尽量保证数据平滑
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值