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
各个符号的解释如下:
- w w w → \rightarrow → 世界坐标系world;
- b b b → \rightarrow → IMU的body坐标系;
- ω ~ b \tilde{\mathbf{\omega}}^b ω~b → \rightarrow → 在IMU的body坐标系下,IMU输出的角速度的测量值;
- ω b \mathbf{\omega}^b ωb → \rightarrow → 在IMU的body坐标系下,IMU的角速度的真值;
- a ~ b \tilde{\mathbf{a}}^b a~b → \rightarrow → 在IMU的body坐标系下,IMU输出的加速度的测量值;
- a b \mathbf{a}^b ab → \rightarrow → 在IMU的body坐标系下,IMU输出的加速度的真值;
- b g b \mathbf{b}_g^b bgb与 b a b \mathbf{b}_a^b bab分别表示在IMU的body坐标系下,加速度计(acc)与陀螺仪(gyro)的偏置值,这个值是可以标定出来的,这是一个干扰值;
- n g b \mathbf{n}_g^b ngb与 n a b \mathbf{n}_a^b nab分别表示在IMU的body坐标系下,加速度计(acc)与陀螺仪(gyro)的测量值中含有的高斯白噪声,这个值是标定不出来的。
- 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](qwbtabt−gw)δt2vjw=viw+∫t∈[i,j](qwbtabt−gw)δ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(abk−babk)−gwω=ωbk−bgbk
中值法
使用中值法,即两个相邻时刻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(abk−babk)−gw+qwbk+1(abk+1−babk)−gw]ω=21[(ωbk−bgbk)+(ωbk+1−bgbk)]