VIO学习(2)——IMU传感器


IMU即是惯性测量单元,可以将其看作是加速度计(acc)与陀螺仪(gyro)的组合,它会直接输出该传感器当前的加速度( a \mathbf{a} a)与角速度( ω \mathbf{\omega} ω),根据这些信息,可以用于估计该传感器的位移、速度等等信息。

IMU传感器的模型

IMU的模型如下:

ω ~ b = ω b + b g b + n g b a ~ b = q b w ( a w + g w ) + b a b + n a b \begin{aligned} &\tilde{\mathbf{\omega}}^b = \mathbf{\omega}^b + \mathbf{b}_g^b + \mathbf{n}_g^b \\ &\tilde{\mathbf{a}}^b = \mathbf{q}_{bw} (\mathbf{a}^w + \mathbf{g}^w) + \mathbf{b}_a^b+\mathbf{n}_a^b \end{aligned} ω~b=ωb+bgb+ngba~b=qbw(aw+gw)+bab+nab

各个符号的解释如下:

  1. w w w → \rightarrow 世界坐标系world;
  2. b b b → \rightarrow IMU的body坐标系;
  3. ω ~ b \tilde{\mathbf{\omega}}^b ω~b → \rightarrow 在IMU的body坐标系下,IMU输出的角速度的测量值;
  4. ω b \mathbf{\omega}^b ωb → \rightarrow 在IMU的body坐标系下,IMU的角速度的真值;
  5. a ~ b \tilde{\mathbf{a}}^b a~b → \rightarrow 在IMU的body坐标系下,IMU输出的加速度的测量值;
  6. a b \mathbf{a}^b ab → \rightarrow 在IMU的body坐标系下,IMU输出的加速度的真值;
  7. b g b \mathbf{b}_g^b bgb b a b \mathbf{b}_a^b bab分别表示在IMU的body坐标系下,加速度计(acc)与陀螺仪(gyro)的偏置值,这个值是可以标定出来的,这是一个干扰值;
  8. n g b \mathbf{n}_g^b ngb n a b \mathbf{n}_a^b nab分别表示在IMU的body坐标系下,加速度计(acc)与陀螺仪(gyro)的测量值中含有的高斯白噪声,这个值是标定不出来的。
  9. q b w \mathbf{q}_{bw} qbw表示世界坐标系world相对于IMU的body坐标系的姿态,此处是一个单位四元数(其实也可以用旋转矩阵), q b w ( a w + g w ) \mathbf{q}_{bw} (\mathbf{a}^w + \mathbf{g}^w) qbw(aw+gw)表示把在world坐标系描述的向量转换到body坐标系下来描述。

IMU的P(osition),V(elocity),Q(uatenion)对时间的导数可以写成:
p ˙ w b t = v t w v ˙ t w = a t w q ˙ w b t = q w b t ⊗ [ 0 1 2 ω b t ] \begin{aligned} &\dot{\mathbf{p}}_{w b_{t}}=\mathbf{v}_{t}^{w}\\ &\dot{\mathbf{v}}_{t}^{w}=\mathbf{a}_{t}^{w}\\ &\dot{\mathbf{q}}_{w b_{t}}=\mathbf{q}_{w b_{t}} \otimes\left[\begin{array}{c} {0} \\ {\frac{1}{2} \omega^{b_{t}}} \end{array}\right] \end{aligned} p˙wbt=vtwv˙tw=atwq˙wbt=qwbt[021ωbt]

其中 b t b_t bt表示t时刻IMU的body坐标系。

IMU的运动模型

若已知第i时刻IMU的P、V、Q值,可以通过对iMU的测量值进行积分,就可以得到第j时刻的PVQ值,如下:

p w b j = p w b i + v i w Δ t + ∬ t ∈ [ i , j ] ( q w b t a b t − g w ) δ t 2 v j w = v i w + ∫ t ∈ [ i , j ] ( q w b t a b t − g w ) δ t q w b j = ∫ t ∈ [ i , j ] q w b t ⊗ [ 0 1 2 ω b t ] δ t \begin{aligned} &\mathbf{p}_{w b_{j}}=\mathbf{p}_{w b_{i}}+\mathbf{v}_{i}^{w} \Delta t+\iint_{t \in[i, j]}\left(\mathbf{q}_{w b_{t}} \mathbf{a}^{b_{t}}-\mathbf{g}^{w}\right) \delta t^{2}\\ &\mathbf{v}_{j}^{w}=\mathbf{v}_{i}^{w}+\int_{t \in[i, j]}\left(\mathbf{q}_{w b_{t}} \mathbf{a}^{b_{t}}-\mathbf{g}^{w}\right) \delta t\\ &\mathbf{q}_{w b_{j}}=\int_{t \in[i, j]} \mathbf{q}_{w b_{t}} \otimes\left[\begin{array}{c} {0} \\ {\frac{1}{2} \boldsymbol{\omega}^{b_{t}}} \end{array}\right] \delta t \end{aligned} pwbj=pwbi+viwΔt+t[i,j](qwbtabtgw)δt2vjw=viw+t[i,j](qwbtabtgw)δtqwbj=t[i,j]qwbt[021ωbt]δt

上面是一个连续时间上的积分,在写成程序时,需要将上面的式子进行离散化,离散的方式有两种,一种是欧拉法,另外一种是中值法, 中值法的精度比欧拉法的高。

欧拉法

使用欧拉法,即两个相邻时刻k到k+1的位姿是用第k时刻的测量值 a \mathbf{a} a ω \mathbf{\omega} ω来计算。

p w b k + 1 = p w b k + v k w Δ t + 1 2 a Δ t 2 v k + 1 w = v k w + a Δ t q w b k + 1 = q w b k ⊗ [ 1 1 2 ω δ t ] \begin{aligned} &\mathbf{p}_{w b_{k+1}}=\mathbf{p}_{w b_{k}}+\mathbf{v}_{k}^{w} \Delta t+\frac{1}{2} \mathbf{a} \Delta t^{2}\\ &\mathbf{v}_{k+1}^{w}=\mathbf{v}_{k}^{w}+\mathbf{a} \Delta t\\ &\mathbf{q}_{w b_{k+1}}=\mathbf{q}_{w b_{k}} \otimes\left[\begin{array}{c} {1} \\ {\frac{1}{2} \omega \delta t} \end{array}\right] \end{aligned} pwbk+1=pwbk+vkwΔt+21aΔt2vk+1w=vkw+aΔtqwbk+1=qwbk[121ωδt]

其中
a = q w b k ( a b k − b a b k ) − g w ω = ω b k − b g b k \begin{array}{l} {\mathbf{a}=\mathbf{q}_{w b_{k}}\left(\mathbf{a}^{b_{k}}-\mathbf{b}_{a}^{b_k}\right)-\mathbf{g}^{w}} \\ {\omega=\boldsymbol{\omega}^{b_{k}}-\mathbf{b}_{g}^{b_k}} \end{array} a=qwbk(abkbabk)gwω=ωbkbgbk

中值法

使用中值法,即两个相邻时刻k到k+1的位姿是用第k时刻与第k+1时刻的测量值 a \mathbf{a} a ω \mathbf{\omega} ω的平均值来计算。

p w b k + 1 = p w b k + v k w Δ t + 1 2 a Δ t 2 v k + 1 w = v k w + a Δ t q w b k + 1 = q w b k ⊗ [ 1 1 2 ω δ t ] \begin{aligned} &\mathbf{p}_{w b_{k+1}}=\mathbf{p}_{w b_{k}}+\mathbf{v}_{k}^{w} \Delta t+\frac{1}{2} \mathbf{a} \Delta t^{2}\\ &\mathbf{v}_{k+1}^{w}=\mathbf{v}_{k}^{w}+\mathbf{a} \Delta t\\ &\mathbf{q}_{w b_{k+1}}=\mathbf{q}_{w b_{k}} \otimes\left[\begin{array}{c} {1} \\ {\frac{1}{2} \omega \delta t} \end{array}\right] \end{aligned} pwbk+1=pwbk+vkwΔt+21aΔt2vk+1w=vkw+aΔtqwbk+1=qwbk[121ωδt]

其中

a = 1 2 [ q w b k ( a b k − b a b k ) − g w + q w b k + 1 ( a b k + 1 − b a b k ) − g w ] ω = 1 2 [ ( ω b k − b g b k ) + ( ω b k + 1 − b g b k ) ] \begin{aligned} &\mathbf{a}=\frac{1}{2}\left[\mathbf{q}_{w b_{k}}\left(\mathbf{a}^{b_{k}}-\mathbf{b}_{a}^{b_k}\right)-\mathbf{g}^{w}+\mathbf{q}_{w b_{k+1}}\left(\mathbf{a}^{b_{k+1}}-\mathbf{b}_{a}^{b_k}\right)-\mathbf{g}^{w}\right]\\ &\omega=\frac{1}{2}\left[\left(\omega^{b_{k}}-\mathbf{b}_{g}^{b_k}\right)+\left(\omega^{b_{k+1}}-\mathbf{b}_{g}^{b_k}\right)\right] \end{aligned} a=21[qwbk(abkbabk)gw+qwbk+1(abk+1babk)gw]ω=21[(ωbkbgbk)+(ωbk+1bgbk)]

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值