1.前言
本博客基本上借鉴了崔华坤的《VINS论文推导及代码解析》和 VINS-Mono理论学习——IMU预积分 Pre-integration (Jacobian 协方差) 的内容,因为确实写得太好了,然后有些地方加入自己一些理解。
VINS-MONO论文中的IV-B. IMU Pre-integration介绍了IMU预积分模型,Foster的倆篇论文对IMU预积分理论进行详细分析。
为什么需要对IMU进行预积分? 传统捷联惯性导航算法,在已知
k
k
k 时刻下的IMU状态量(姿态、速度和位移)情况下,利用IMU测量的线加速度和角速度,通过积分预算得到
k
+
1
k+1
k + 1 时刻下的状态量。
然而在非线性优化的VIO中,各个节点的状态量都是估计值,当算法对这些状态量优化时,每次调整都需要在它们之间重新积分,导致绝对位姿被优化时对状态量进行重复积分。IMU预积分的提出使得优化算法可对IMU的相对测量进行处理,使它与绝对位姿解耦,或者只要线性运算就可以进行矫正 。
2. IMU模型
IMU测量值包括加速度计得到的 (测量值) 线加速度
a
t
^
\hat{a_{t}}
a t ^ 和陀螺仪得到的角加速度
w
^
t
\hat{w}_{t}
w ^ t 【论文式(1)】
a
^
t
=
a
t
+
b
a
t
+
R
w
t
g
w
+
n
a
\hat{a}_{t}=a_{t}+b_{at}+R_{w}^{t}g^{w}+n_{a}
a ^ t = a t + b a t + R w t g w + n a
w
^
t
=
w
t
+
b
w
t
+
n
w
\hat{w}_{t}=w_{t}+b_{wt}+n_{w}
w ^ t = w t + b w t + n w 其中
t
t
t 下标表示在IMU的体(body)坐标系下,
a
t
a_{t}
a t 、
w
t
w_{t}
w t 分别表示IMU真实的线加速度和角速度,并受到加速度偏置(bias)
b
a
t
b_{at}
b a t 、陀螺仪偏置
b
w
t
b_{wt}
b w t 和附加噪声
n
a
n_a
n a 、
n
n
w
n_{n_{w}}
n n w 的影响。计算得到的线加速度
a
t
^
\hat{a_{t}}
a t ^ 是重力加速度和物体加速度的合矢量。 假设附加噪声为高斯噪声:
n
a
∼
(
0
,
σ
a
2
)
,
n
a
∼
(
0
,
σ
w
2
)
n_{a}\sim(0,\sigma_{a}^{2}), \ n_{a}\sim(0,\sigma_{w}^{2})
n a ∼ ( 0 , σ a 2 ) , n a ∼ ( 0 , σ w 2 ) 加速度计偏置和陀螺仪偏置被建模为随机游走,其导数为高斯分布:【论文式(2)】
b
˙
a
t
=
n
b
a
,
b
˙
w
t
=
n
b
w
\dot{b}_{at}=n_{ba}, \ \dot{b}_{wt}=n_{bw}
b ˙ a t = n b a , b ˙ w t = n b w
n
b
a
∼
N
(
0
,
σ
b
a
2
)
,
n
b
w
∼
N
(
0
,
σ
b
w
2
)
n_{ba}\sim N(0,\sigma_{ba}^{2}), \ n_{bw} \sim N(0, \sigma_{bw}^{2})
n b a ∼ N ( 0 , σ b a 2 ) , n b w ∼ N ( 0 , σ b w 2 )
3. 基于世界坐标系下的IMU运动模型
3.1 连续形式下的IMU运动模型
对于图像帧
k
k
k 和
k
+
1
k+1
k + 1 , IMU body坐标系对应为
b
k
b_{k}
b k 和
b
k
+
1
b_{k+1}
b k + 1 ,位置、速度和姿态状态值PVQ(Pose、Velocity、Quaternion)可以根据
[
t
k
,
t
k
+
1
]
[t_{k}, t_{k+1}]
[ t k , t k + 1 ] 时间间隔内的IMU测量值,在世界坐标系下进行传递 :【论文式(3)(4)】
p
b
k
+
1
w
=
p
b
k
w
+
v
b
k
w
Δ
t
k
+
∫
∫
t
∈
[
t
k
,
t
k
+
1
]
(
R
t
w
(
a
^
t
−
b
a
t
−
n
a
)
−
g
w
)
d
t
2
p^{w}_{b_{k+1}}=p^{w}_{bk}+v_{b_{k}}^{w}\Delta t_{k}+\int \int_{t\in[t_{k}, t_{k+1}]}(R_{t}^{w}(\hat{a}_{t}-b_{at}-n_{a})-g^{w})dt^{2}
p b k + 1 w = p b k w + v b k w Δ t k + ∫ ∫ t ∈ [ t k , t k + 1 ] ( R t w ( a ^ t − b a t − n a ) − g w ) d t 2
v
b
k
+
1
w
=
v
b
k
w
+
∫
t
∈
[
t
k
,
t
k
+
1
]
(
R
t
w
(
a
^
t
−
b
a
t
−
n
a
)
−
g
w
)
d
t
v_{b_{k+1}}^{w}=v_{bk}^{w}+\int_{t\in[t_{k},t_{k+1}]}(R^{w}_{t}(\hat{a}_{t}-b_{at}-n_{a})-g^{w})dt
v b k + 1 w = v b k w + ∫ t ∈ [ t k , t k + 1 ] ( R t w ( a ^ t − b a t − n a ) − g w ) d t
q
b
k
+
1
w
=
q
b
k
w
⊗
∫
t
∈
[
t
k
,
t
k
+
1
]
1
2
q
t
b
k
⊗
[
(
w
^
t
−
b
w
t
−
n
w
)
0
]
d
t
=
q
b
k
⊗
∫
t
∈
[
t
k
,
t
k
+
1
]
1
2
Ω
(
w
^
t
−
b
w
t
−
n
w
)
q
t
b
k
d
t
(1)
q_{b_{k+1}}^{w} = q_{b_{k}}^{w} \otimes \int_{t\in[t_{k}, t_{k+1}]} \frac{1}{2} q_{t}^{b_{k}} \otimes \begin{bmatrix} (\hat{w}_{t}-b_{wt}-n_{w})\\ 0 \end{bmatrix}dt \\ = q_{bk} \otimes \int_{t\in[t_{k}, t_{k+1}]} \frac{1}{2} \Omega (\hat{w}_{t}-b_{wt}-n_{w})q_{t}^{bk}dt \tag{1}
q b k + 1 w = q b k w ⊗ ∫ t ∈ [ t k , t k + 1 ] 2 1 q t b k ⊗ [ ( w ^ t − b w t − n w ) 0 ] d t = q b k ⊗ ∫ t ∈ [ t k , t k + 1 ] 2 1 Ω ( w ^ t − b w t − n w ) q t b k d t ( 1 )
Ω
(
w
)
=
[
−
[
w
]
×
w
−
w
T
0
]
,
[
w
]
×
=
[
0
−
w
z
w
y
w
z
0
−
w
x
−
w
y
w
x
0
]
\Omega(w)=\begin{bmatrix} -[w]_{\times} & w\\ -w^{T}& 0 \end{bmatrix}, \ [w]_{\times} = \begin{bmatrix} 0 & -w_{z} & w_{y}\\ w_{z} & 0 & -w_{x}\\ -w_{y} & w_{x} & 0 \end{bmatrix}
Ω ( w ) = [ − [ w ] × − w T w 0 ] , [ w ] × = ⎣ ⎡ 0 w z − w y − w z 0 w x w y − w x 0 ⎦ ⎤ 其中
Δ
t
k
\Delta t_{k}
Δ t k 是
[
t
k
,
t
k
+
1
]
[t_{k}, t_{k+1}]
[ t k , t k + 1 ] 之间的时间间隔,
R
t
w
R_{t}^{w}
R t w 为t时刻IMU body坐标系到世界坐标系的旋转矩阵,
q
t
b
k
q_{t}^{bk}
q t b k 为用四元素表示的
t
t
t 时刻从IMU body坐标系到
k
k
k 时刻IMU body坐标系的旋转,这里的四元素实部在后,虚部在前 。这里的
Ω
(
w
)
\Omega(w)
Ω ( w ) 表示四元素右乘。
关于公式
(
1
)
(1)
( 1 ) 的推导,这里首先引入四元素左乘右乘及导数定理: 根据《视觉SLAM14讲》3.4.2 的四元数乘法,我们引入左乘和右乘符号 如下:
q
a
⊗
q
b
=
R
(
q
b
)
q
a
=
[
s
b
z
b
−
y
b
x
b
−
z
b
s
b
x
b
y
b
y
b
−
x
b
s
b
z
b
−
x
b
−
y
b
−
z
b
s
b
]
[
x
a
y
a
z
a
s
a
]
=
L
(
q
a
)
q
b
=
[
s
a
−
z
a
y
a
x
a
z
a
s
a
−
x
a
y
a
−
y
a
x
a
s
a
z
a
−
x
a
−
y
a
−
z
a
s
a
]
[
x
b
y
b
z
b
s
b
]
q_{a} \otimes q_{b} = R(q_{b})q_{a} = \begin{bmatrix} s_{b} & z_{b} & -y_{b} & x_{b}\\ -z_{b} & s_{b} & x_{b} & y_{b}\\ y_{b}& -x_{b} & s_{b} & z_{b}\\ -x_{b}& -y_{b} & -z_{b} & s_{b} \end{bmatrix}\begin{bmatrix} x_{a}\\ y_{a}\\ z_{a}\\ s_{a} \end{bmatrix} \\ = L(q_{a})q_{b} = \begin{bmatrix} s_{a} & -z_{a} & y_{a} & x_{a}\\ z_{a} & s_{a} & -x_{a} & y_{a}\\ -y_{a}& x_{a} & s_{a} & z_{a}\\ -x_{a}& -y_{a} & -z_{a} & s_{a} \end{bmatrix}\begin{bmatrix} x_{b}\\ y_{b}\\ z_{b}\\ s_{b} \end{bmatrix}
q a ⊗ q b = R ( q b ) q a = ⎣ ⎢ ⎢ ⎡ s b − z b y b − x b z b s b − x b − y b − y b x b s b − z b x b y b z b s b ⎦ ⎥ ⎥ ⎤ ⎣ ⎢ ⎢ ⎡ x a y a z a s a ⎦ ⎥ ⎥ ⎤ = L ( q a ) q b = ⎣ ⎢ ⎢ ⎡ s a z a − y a − x a − z a s a x a − y a y a − x a s a − z a x a y a z a s a ⎦ ⎥ ⎥ ⎤ ⎣ ⎢ ⎢ ⎡ x b y b z b s b ⎦ ⎥ ⎥ ⎤ 为了简化,令
q
=
[
x
y
z
s
]
=
[
w
s
]
q=[x \ y \ z \ s] = [w \ s]
q = [ x y z s ] = [ w s ] , 则有:
R
(
q
)
=
Ω
(
w
)
+
s
I
4
×
4
=
[
−
[
w
]
×
w
−
w
T
0
]
+
s
I
4
×
4
R(q) = \Omega(w)+sI_{4\times4} = \begin{bmatrix} -[w]_{\times} & w\\ -w^{T}& 0 \end{bmatrix} + sI_{4\times4}
R ( q ) = Ω ( w ) + s I 4 × 4 = [ − [ w ] × − w T w 0 ] + s I 4 × 4
L
(
q
)
=
Ψ
(
w
)
+
s
I
4
×
4
=
[
[
w
]
×
w
−
w
T
0
]
+
s
I
4
×
4
L(q) = \Psi(w)+sI_{4\times4} = \begin{bmatrix} [w]_{\times} & w\\ -w^{T}& 0 \end{bmatrix} + sI_{4\times4}
L ( q ) = Ψ ( w ) + s I 4 × 4 = [ [ w ] × − w T w 0 ] + s I 4 × 4 对于四元素的求导 ,我们定义
q
t
q_{t}
q t 为
t
t
t 时刻下的单位四元素,
w
w
w 为
q
t
q_{t}
q t 确定的角速度,则关于
q
t
q_{t}
q t 的导数为:
q
˙
t
=
1
2
[
−
[
w
]
×
w
−
w
T
0
]
q
t
=
1
2
Ω
(
w
)
q
t
=
1
2
R
(
[
w
0
]
)
q
t
=
1
2
q
t
⊗
[
w
0
]
\dot{q}_{t} = \frac{1}{2} \begin{bmatrix} -[w]_{\times} & w\\ -w^{T}& 0 \end{bmatrix}q_{t} = \frac{1}{2}\Omega(w)q_{t}=\frac{1}{2}R(\begin{bmatrix} w\\ 0 \end{bmatrix})q_{t} = \frac{1}{2}q_{t} \otimes \begin{bmatrix} w\\ 0 \end{bmatrix}
q ˙ t = 2 1 [ − [ w ] × − w T w 0 ] q t = 2 1 Ω ( w ) q t = 2 1 R ( [ w 0 ] ) q t = 2 1 q t ⊗ [ w 0 ]
因此对于IMU连续形式下的旋转状态(用四元素表示)推导 ,我们有:
q
b
k
+
1
w
=
q
b
k
w
⊗
q
b
k
+
1
b
k
=
q
b
k
w
⊗
∫
t
∈
[
t
k
,
t
k
+
1
]
q
t
b
k
˙
d
t
=
q
b
k
w
⊗
∫
t
∈
[
t
k
,
t
k
+
1
]
1
2
q
t
b
k
⊗
[
w
t
b
k
0
]
d
t
=
q
b
k
w
⊗
∫
t
∈
[
t
k
,
t
k
+
1
]
1
2
q
t
b
k
⊗
[
w
t
^
−
b
w
t
−
n
w
0
]
d
t
=
=
q
b
k
⊗
∫
t
∈
[
t
k
,
t
k
+
1
]
1
2
Ω
(
w
^
t
−
b
w
t
−
n
w
)
q
t
b
k
d
t
q_{b_{k+1}^{w}}=q_{b_{k}}^{w} \otimes q_{b_{k+1}}^{b_{k}} = q_{b_{k}}^{w} \otimes \int _{t\in [t_{k}, t_{k+1}]} \dot{q_{t}^{b_{k}}} dt = q_{bk}^{w} \otimes \int_{t\in[t_{k}, t_{k+1}]} \frac{1}{2} q_{t}^{b_{k}}\otimes \begin{bmatrix} w_{t}^{b_{k}}\\ 0\end{bmatrix}dt \\ =q_{b_{k}}^{w} \otimes \int_{t \in [t_{k}, t_{k+1}]} \frac{1}{2}q_{t}^{b_{k}} \otimes \begin{bmatrix} \hat{w_{t}}-b_{wt}-n_{w}\\ 0\end{bmatrix} dt \\ = = q_{bk} \otimes \int_{t\in[t_{k}, t_{k+1}]} \frac{1}{2} \Omega (\hat{w}_{t}-b_{wt}-n_{w})q_{t}^{bk}dt
q b k + 1 w = q b k w ⊗ q b k + 1 b k = q b k w ⊗ ∫ t ∈ [ t k , t k + 1 ] q t b k ˙ d t = q b k w ⊗ ∫ t ∈ [ t k , t k + 1 ] 2 1 q t b k ⊗ [ w t b k 0 ] d t = q b k w ⊗ ∫ t ∈ [ t k , t k + 1 ] 2 1 q t b k ⊗ [ w t ^ − b w t − n w 0 ] d t = = q b k ⊗ ∫ t ∈ [ t k , t k + 1 ] 2 1 Ω ( w ^ t − b w t − n w ) q t b k d t
3.2 离散形式下的IMU运动模型 3.2.1 欧拉法 使用欧拉法,即
k
+
1
k+1
k + 1 时刻的位姿是用第
k
k
k 时刻的测量值
a
^
b
k
\hat{a}_{b_{k}}
a ^ b k ,
w
^
b
k
\hat{w}_{b_{k}}
w ^ b k 来计算的:
p
b
k
+
1
w
=
p
b
k
w
+
v
b
k
w
Δ
t
k
+
1
2
a
^
b
k
δ
t
2
p^{w}_{b_{k+1}} = p_{b_{k}}^{w} + v_{b_{k}}^{w} \Delta t_{k} + \frac{1}{2}\hat{a}_{b_{k}}\delta t^{2}
p b k + 1 w = p b k w + v b k w Δ t k + 2 1 a ^ b k δ t 2
v
b
k
+
1
w
=
v
b
k
w
+
a
^
b
k
δ
t
v_{b_{k+1}}^{w} = v_{b_{k}}^{w} + \hat{a}_{b_{k}} \delta t
v b k + 1 w = v b k w + a ^ b k δ t
q
b
k
+
1
w
=
q
b
k
w
⊗
[
1
1
2
w
^
b
k
δ
t
]
q^{w}_{b_{k+1}} = q^{w}_{b_{k}} \otimes \begin{bmatrix} 1\\ \frac{1}{2}\hat{w}_{b_{k}}\delta t \end{bmatrix}
q b k + 1 w = q b k w ⊗ [ 1 2 1 w ^ b k δ t ] 其中
a
^
b
k
=
q
b
k
w
(
a
b
k
−
b
a
k
)
−
g
w
\hat{a}_{b_{k}} = q_{b_{k}}^{w}(a_{b_{k}}-b_{ak})-g^{w}
a ^ b k = q b k w ( a b k − b a k ) − g w
w
^
b
k
=
w
b
k
−
b
w
k
\hat{w}_{b_{k}} = w_{b_{k}}-b_{wk}
w ^ b k = w b k − b w k
3.2.2 中值法 使用中值法,即
k
+
1
k+1
k + 1 时刻的位姿是用俩个时刻
k
k
k 和
k
+
1
k+1
k + 1 测量值
a
a
a ,
w
w
w 的平均值来计算的:
p
b
k
+
1
w
=
p
b
k
w
+
v
b
k
w
Δ
t
k
+
1
2
a
^
ˉ
t
δ
t
2
p^{w}_{b_{k+1}} = p_{b_{k}}^{w} + v_{b_{k}}^{w} \Delta t_{k} + \frac{1}{2}\bar{\hat{a}}_{t}\delta t^{2}
p b k + 1 w = p b k w + v b k w Δ t k + 2 1 a ^ ˉ t δ t 2
v
b
k
+
1
w
=
v
b
k
w
+
a
^
ˉ
t
δ
t
v_{b_{k+1}}^{w} = v_{b_{k}}^{w} + \bar{\hat{a}}_{t} \delta t
v b k + 1 w = v b k w + a ^ ˉ t δ t
q
b
k
+
1
w
=
q
b
k
w
⊗
[
1
1
2
w
^
ˉ
t
δ
t
]
q^{w}_{b_{k+1}} = q^{w}_{b_{k}} \otimes \begin{bmatrix} 1\\ \frac{1}{2}\bar{\hat{w}}_{t}\delta t \end{bmatrix}
q b k + 1 w = q b k w ⊗ [ 1 2 1 w ^ ˉ t δ t ] 其中
a
^
ˉ
t
=
1
2
[
q
b
k
w
(
a
b
k
−
b
a
k
)
−
g
w
+
q
b
k
+
1
w
(
a
b
k
+
1
−
b
a
k
+
1
)
−
g
w
]
\bar{\hat{a}}_{t} = \frac{1}{2}[q_{b_{k}}^{w}(a_{b_{k}}-b_{ak})-g^{w} + q_{b_{k+1}}^{w}(a_{b_{k+1}}-b_{ak+1})-g^{w}]
a ^ ˉ t = 2 1 [ q b k w ( a b k − b a k ) − g w + q b k + 1 w ( a b k + 1 − b a k + 1 ) − g w ]
w
^
ˉ
t
=
1
2
(
w
b
k
−
b
w
k
+
w
b
k
+
1
−
b
w
k
+
1
)
\bar{\hat{w}}_{t} = \frac{1}{2}(w_{b_{k}}-b_{wk}+w_{b_{k+1}}-b_{wk+1})
w ^ ˉ t = 2 1 ( w b k − b w k + w b k + 1 − b w k + 1 ) 假设在短时间内加速度计和陀螺仪的偏置不变,则有:
b
a
k
=
b
a
k
+
1
,
b
w
k
=
b
w
k
+
1
b_{ak}=b_{ak+1}, \ b_{wk} = b_{wk+1}
b a k = b a k + 1 , b w k = b w k + 1
4.IMU预积分 (基于第K帧IMU body坐标系下的运动模型)
通过公式
(
1
)
(1)
( 1 ) 可以看到,IMU 的积分需要依赖与第
k
k
k 帧的
v
v
v 和
R
R
R (基于世界坐标系下的),当我们在后端进行非线性优化时,需要迭代更新第
k
k
k 帧的
v
v
v 和
R
R
R ,这将导致我们需要根据每次迭代后的值重新进行积分,这将非常耗时。我们考虑将优化变量从第
k
k
k 帧到第
k
+
1
k+1
k + 1 帧的 IMU 积分项中分离开来。
4.1 连续形式下的IMU运动模型 IMU预积分的思想就是将参考坐标系从世界坐标系
w
w
w 调整为第
k
k
k 帧的IMU body坐标系
b
k
b_{k}
b k 下,可通过在等式俩端同时乘以
R
w
b
k
R^{b_{k}}_{w}
R w b k 得到:【论文式[5][6]】
R
w
b
k
p
b
k
+
1
w
=
R
w
b
k
(
p
b
k
w
+
v
b
k
w
Δ
t
k
−
1
2
g
w
Δ
t
k
2
)
+
α
b
k
+
1
b
k
R^{b_{k}}_{w}p^{w}_{b_{k+1}}=R^{b_{k}}_{w}(p_{b_{k}}^{w}+v^{w}_{b_{k}}\Delta t_{k}-\frac{1}{2}g^{w}\Delta t_{k}^{2}) + \alpha^{b_{k}}_{b_{k+1}}
R w b k p b k + 1 w = R w b k ( p b k w + v b k w Δ t k − 2 1 g w Δ t k 2 ) + α b k + 1 b k
R
w
b
k
v
b
k
+
1
w
=
R
w
b
k
(
v
b
k
w
−
g
w
Δ
t
k
)
+
β
b
k
+
1
b
k
R^{b_{k}}_{w}v_{b_{k+1}}^{w} = R_{w}^{b_{k}}(v_{b_{k}}^{w}-g^{w}\Delta t_{k})+\beta^{b_{k}}_{b_{k+1}}
R w b k v b k + 1 w = R w b k ( v b k w − g w Δ t k ) + β b k + 1 b k
q
w
b
k
⊗
q
b
k
+
1
w
=
γ
b
k
+
1
b
k
q_{w}^{b_{k}} \otimes q_{b_{k+1}}^{w} = \gamma _{b_{k+1}} ^{b_{k}}
q w b k ⊗ q b k + 1 w = γ b k + 1 b k 其中
α
b
k
+
1
b
k
=
∫
∫
t
∈
[
t
k
,
t
k
+
1
]
R
t
b
k
(
a
^
t
−
b
a
t
−
n
a
)
d
t
2
\alpha^{b_{k}}_{b_{k+1}} = \int \int _{t\in [t_{k}, t_{k+1}]} R_{t}^{b_{k}} (\hat{a}_{t}-b_{at}-n_{a}) dt^{2}
α b k + 1 b k = ∫ ∫ t ∈ [ t k , t k + 1 ] R t b k ( a ^ t − b a t − n a ) d t 2
β
b
k
+
1
b
k
=
∫
t
∈
[
t
k
,
t
k
+
1
]
R
t
b
k
(
a
^
t
−
b
a
t
−
n
a
)
d
t
\beta_{b_{k+1}}^{b_{k}} = \int _{t\in [t_{k}, t_{k+1}]}R_{t}^{b_{k}}(\hat{a}_{t}-b_{at}-n_{a})dt
β b k + 1 b k = ∫ t ∈ [ t k , t k + 1 ] R t b k ( a ^ t − b a t − n a ) d t
γ
b
k
+
1
=
∫
t
∈
[
t
k
,
t
k
+
1
]
1
2
Ω
(
w
^
t
−
b
w
t
−
n
w
)
γ
t
b
k
d
t
\gamma_{b_{k+1}} = \int _{t \in [t_{k}, t_{k+1}]} \frac{1}{2} \Omega(\hat{w}_{t}-b_{wt}-n_{w}) \gamma_{t}^{b_{k}}dt
γ b k + 1 = ∫ t ∈ [ t k , t k + 1 ] 2 1 Ω ( w ^ t − b w t − n w ) γ t b k d t
此时的积分结果
α
b
k
+
1
b
k
\alpha^{b_{k}}_{b_{k+1}}
α b k + 1 b k 、
β
b
k
+
1
b
k
\beta^{b_{k}}_{b_{k+1}}
β b k + 1 b k 、
γ
b
k
+
1
b
k
\gamma^{b_{k}}_{b_{k+1}}
γ b k + 1 b k 可以理解为
b
k
+
1
b_{k+1}
b k + 1 对
b
k
b_{k}
b k 的相对运动量,
b
k
b_{k}
b k 的状态并不会对其产生影响,因此将其作为非线性优化变量,可以避免状态的重复传递 。
注意,这是在假设IMU偏置
b
a
b_{a}
b a 、
b
w
b_{w}
b w 已经确定的情况下,实际上偏置也是需要优化的变量,那么每次迭代时,
b
a
b_{a}
b a 、
b
w
b_{w}
b w 发生改变,得重新根据公式求得所有帧之间的IMU预积分。
当偏置变换很小时,可以将
α
b
k
+
1
b
k
\alpha_{b_{k+1}}^{b_{k}}
α b k + 1 b k 、
β
b
k
+
1
b
k
\beta_{b_{k+1}}^{b_{k}}
β b k + 1 b k 、
γ
b
k
+
1
b
k
\gamma_{b_{k+1}}^{b_{k}}
γ b k + 1 b k 按其偏置的一阶近似来调整,否则就进行重新传递。【论文式[12]】(这部分只是抛出一个概念,后面会讲为什么这样写)
α
b
k
+
1
b
k
≈
α
^
b
k
+
1
b
k
+
J
b
a
α
δ
b
a
+
J
b
w
α
δ
b
w
\alpha_{b_{k+1}}^{b_{k}} \approx \hat{\alpha}_{b_{k+1}}^{b_{k}} + J_{b_{a}}^{ \alpha} \delta b_{a} + J_{b_{w}}^{ \alpha} \delta b_{w}
α b k + 1 b k ≈ α ^ b k + 1 b k + J b a α δ b a + J b w α δ b w
β
b
k
+
1
b
k
≈
β
^
b
k
+
1
b
k
+
J
b
a
β
δ
b
a
+
J
b
w
β
δ
b
w
\beta_{b_{k+1}}^{b_{k}} \approx \hat{\beta}_{b_{k+1}}^{b_{k}} + J_{b_{a}}^{ \beta} \delta b_{a} + J_{b_{w}}^{ \beta} \delta b_{w}
β b k + 1 b k ≈ β ^ b k + 1 b k + J b a β δ b a + J b w β δ b w
γ
b
k
+
1
b
k
≈
γ
^
b
k
+
1
b
k
[
1
1
2
J
b
w
γ
δ
b
w
]
\gamma_{b_{k+1}}^{b_{k}} \approx \hat{\gamma}_{b_{k+1}}^{b_{k}} \begin{bmatrix} 1 \\ \frac{1}{2}J_{b_{w}}^{\gamma}\delta b_{w} \end{bmatrix}
γ b k + 1 b k ≈ γ ^ b k + 1 b k [ 1 2 1 J b w γ δ b w ]
4.2 离散形式下的IMU运动模型 4.2.1 两帧之间 PVQ 增量的欧拉法离散形式 欧拉法给出第i时刻与第i+1时刻的预积分量估计值的关系: 【论文式[7]】
α
^
i
+
1
b
k
=
α
^
i
b
k
+
β
^
i
b
k
δ
t
+
1
2
R
(
γ
^
i
b
k
)
(
a
^
i
−
b
a
i
)
δ
t
2
\hat{\alpha}^{b_{k}}_{i+1} = \hat{\alpha}^{b_{k}}_{i} + \hat{\beta}_{i}^{b_{k}}\delta t + \frac{1}{2} R(\hat{\gamma}_{i}^{b_{k}})(\hat{a}_{i}-b_{ai})\delta t^{2}
α ^ i + 1 b k = α ^ i b k + β ^ i b k δ t + 2 1 R ( γ ^ i b k ) ( a ^ i − b a i ) δ t 2
β
^
i
+
1
b
k
=
β
^
i
b
k
+
1
2
R
(
γ
^
i
b
k
)
(
a
^
i
−
b
a
i
)
δ
t
\hat{\beta}^{b_{k}}_{i+1} = \hat{\beta}^{b_{k}}_{i} + \frac{1}{2} R(\hat{\gamma}_{i}^{b_{k}})(\hat{a}_{i}-b_{ai})\delta t
β ^ i + 1 b k = β ^ i b k + 2 1 R ( γ ^ i b k ) ( a ^ i − b a i ) δ t
γ
^
i
+
1
b
k
=
γ
^
i
b
k
⊗
γ
^
i
+
1
i
=
γ
^
i
b
k
⊗
[
1
1
2
(
w
^
i
−
b
w
i
)
δ
t
]
\hat{\gamma}^{b_{k}}_{i+1} = \hat{\gamma}^{b_{k}}_{i} \otimes \hat{\gamma}^{i}_{i+1} = \hat{\gamma}^{b_{k}}_{i} \otimes \begin{bmatrix} 1\\ \frac{1}{2}(\hat{w}_{i}-b_{wi})\delta t \end{bmatrix}
γ ^ i + 1 b k = γ ^ i b k ⊗ γ ^ i + 1 i = γ ^ i b k ⊗ [ 1 2 1 ( w ^ i − b w i ) δ t ] 其中
i
i
i 是
[
t
k
,
t
k
+
1
]
[t_{k}, t_{k+1}]
[ t k , t k + 1 ] 对应的离散时间
4.2.2 两帧之间 PVQ 增量的中值法离散形式 代码中采用的基于中值法的 IMU 预积分公式,这在Estimator::processIMU()函数 和IntegrationBase::push_back()函数中得以实现,注意这里积分出来的是前后两帧之间的 IMU 增量信息。
α
^
i
+
1
b
k
=
α
^
i
b
k
+
β
^
i
b
k
δ
t
+
1
2
a
^
ˉ
i
δ
t
2
\hat{\alpha}^{b_{k}}_{i+1} = \hat{\alpha}^{b_{k}}_{i} + \hat{\beta}_{i}^{b_{k}}\delta t+ \frac{1}{2} \bar{\hat{a}}_{i}\delta t^{2}
α ^ i + 1 b k = α ^ i b k + β ^ i b k δ t + 2 1 a ^ ˉ i δ t 2
β
^
i
+
1
b
k
=
β
^
i
b
k
+
1
2
a
^
ˉ
i
δ
t
\hat{\beta}^{b_{k}}_{i+1} = \hat{\beta}^{b_{k}}_{i} + \frac{1}{2} \bar{\hat{a}}_{i}\delta t
β ^ i + 1 b k = β ^ i b k + 2 1 a ^ ˉ i δ t
γ
^
i
+
1
b
k
=
γ
^
i
b
k
⊗
γ
^
i
+
1
i
=
γ
^
i
b
k
⊗
[
1
1
2
w
^
ˉ
i
δ
t
]
\hat{\gamma}^{b_{k}}_{i+1} = \hat{\gamma}^{b_{k}}_{i} \otimes \hat{\gamma}^{i}_{i+1} = \hat{\gamma}^{b_{k}}_{i} \otimes \begin{bmatrix} 1\\ \frac{1}{2} \bar{\hat{w}}_{i}\delta t \end{bmatrix}
γ ^ i + 1 b k = γ ^ i b k ⊗ γ ^ i + 1 i = γ ^ i b k ⊗ [ 1 2 1 w ^ ˉ i δ t ] 其中
a
^
ˉ
t
=
1
2
[
q
i
(
a
^
i
−
b
i
)
+
q
i
+
1
(
a
^
i
+
1
−
b
a
i
)
]
\bar{\hat{a}}_{t} = \frac{1}{2}[q_{i}(\hat{a}_{i}-b_{i}) + q_{i+1}(\hat{a}_{i+1}-b_{ai})]
a ^ ˉ t = 2 1 [ q i ( a ^ i − b i ) + q i + 1 ( a ^ i + 1 − b a i ) ]
w
^
ˉ
i
=
1
2
(
w
^
i
+
w
^
i
+
1
)
−
b
w
i
\bar{\hat{w}}_{i} = \frac{1}{2}(\hat w_{i} + \hat w_{i+1})-b_{wi}
w ^ ˉ i = 2 1 ( w ^ i + w ^ i + 1 ) − b w i 初始状态下
α
b
k
b
k
\alpha_{b_{k}}^{b_{k}}
α b k b k 、
β
b
k
b
k
\beta_{b_{k}}^{b_{k}}
β b k b k 为0,
γ
b
k
b
k
\gamma_{b_{k}}^{b_{k}}
γ b k b k 为单位四元素,
n
a
n_{a}
n a 、
n
w
n_{w}
n w 被视为0,
i
i
i 为在
[
k
,
k
+
1
]
[k, k+1]
[ k , k + 1 ] 中IMU测量值的某一时刻,
δ
t
\delta t
δ t 为IMU测量值
i
i
i 和
i
+
1
i+1
i + 1 之间的时间间隔。
5. PVQ增量的误差递推方程、协方差及雅克比矩阵
5.1 一个IMU数据作为测量值的噪声协方差我们能够标定,一段时间内多个IMU数据积分形成的预积分量的协方差如何计算?
要推导预积分量的协方差,需要知道IMU噪声和预积分量之间的线性递推关系。
假设已知了相邻时刻误差的线性传递方程:
η
i
k
+
1
=
F
k
η
i
k
+
G
k
n
k
\eta_{ik+1} = F_{k}\eta_{ik} + G_{k}n_{k}
η i k + 1 = F k η i k + G k n k 其中
η
i
k
\eta_{ik}
η i k 为状态量误差且
η
i
k
=
[
δ
θ
i
k
,
δ
v
i
k
,
δ
p
i
k
]
\eta_{ik}=[\delta\theta_{ik}, \delta v_{ik}, \delta p_{ik}]
η i k = [ δ θ i k , δ v i k , δ p i k ] ,
n
k
n_{k}
n k 为测量噪声且
n
k
=
[
n
k
g
,
n
k
g
]
n_{k}=[n_{k}^{g}, n_{k}^{g}]
n k = [ n k g , n k g ] 。 可以看出误差的传递由倆部分组成:当前时刻的误差传递给下一时刻,当前时刻测量噪声传递给下一时刻 。
5.2 如何实现非线性方程的递推方程? 通常对于状态量之间的递推关系是非线性的方程如
x
k
+
1
=
f
(
x
k
,
u
k
)
x_{k+1} = f(x_{k}, u_{k})
x k + 1 = f ( x k , u k ) ,其中状态量
x
x
x 、
u
u
u 为系统的输入量。
可以用俩种方法来推导状态误差传递的线性递推关系:
一种是基于一阶泰勒展开的误差递推方程
一种是基于误差随时间变化的递推方程 (是基于误差随时间变化来推导的)
5.2.1 基于一阶泰勒展开的误差递推方程