VIO系统在使用IMU测量值进行状态预测时,需要将连续时间的微分方程离散化为差分方程,离散化的本质是积分,根据数值积分近似程度不同,常用的有欧拉法、中点法和四阶龙格库塔法等,OpenVINS和MSCKF_VIO虽然都使用RK4积分,但具体代码实现却有所区别。
姿态使用JPL四元数表示,MSCKF_VIO姿态不使用RK4积分,而是直接使用Zeroth Order Quaternion Integrator积分器,输入是
t
n
t_n
tn时刻的角速度测量值,得到
t
n
+
Δ
t
{t_n} + \Delta t
tn+Δt和
t
n
+
Δ
t
2
{t_n} + \frac{\Delta t}{2}
tn+2Δt时刻的姿态,
ω
=
ω
m
t
n
−
b
g
w
b
q
t
n
+
Δ
t
=
[
ω
∣
ω
∣
sin
(
∣
ω
∣
2
Δ
t
)
cos
(
∣
ω
∣
2
Δ
t
)
]
⊗
w
b
q
t
n
=
(
cos
(
∣
ω
∣
2
Δ
t
)
⋅
I
4
×
4
+
1
∣
ω
∣
sin
(
∣
ω
∣
2
Δ
t
)
⋅
Ω
(
ω
)
)
w
b
q
t
n
w
b
q
t
n
+
Δ
t
2
=
[
ω
∣
ω
∣
sin
(
∣
ω
∣
4
Δ
t
)
cos
(
∣
ω
∣
4
Δ
t
)
]
⊗
w
b
q
t
n
=
(
cos
(
∣
ω
∣
4
Δ
t
)
⋅
I
4
×
4
+
1
∣
ω
∣
sin
(
∣
ω
∣
4
Δ
t
)
⋅
Ω
(
ω
)
)
w
b
q
t
n
输入
t
n
t_n
tn时刻的加速度测量值,对位置和速度进行RK4积分
v
0
=
v
t
n
k
1
=
[
p
˙
1
v
˙
1
]
=
[
v
0
R
{
w
b
q
t
n
}
⊤
(
a
m
t
n
−
b
a
)
+
g
]
k
2
=
[
p
˙
2
v
˙
2
]
=
[
v
0
+
Δ
t
2
v
˙
1
R
{
w
b
q
t
n
+
Δ
t
2
}
⊤
(
a
m
t
n
−
b
a
)
+
g
]
k
3
=
[
p
˙
3
v
˙
3
]
=
[
v
0
+
Δ
t
2
v
˙
2
R
{
w
b
q
t
n
+
Δ
t
2
}
⊤
(
a
m
t
n
−
b
a
)
+
g
]
k
4
=
[
p
˙
4
v
˙
4
]
=
[
v
0
+
Δ
t
v
˙
3
R
{
w
b
q
t
n
+
Δ
t
}
⊤
(
a
m
t
n
−
b
a
)
+
g
]
[
q
t
n
+
Δ
t
p
t
n
+
Δ
t
v
t
n
+
Δ
t
]
=
[
w
b
q
t
n
+
Δ
t
p
t
n
+
Δ
t
6
(
p
˙
1
+
2
p
˙
2
+
2
p
˙
3
+
p
˙
4
)
v
t
n
+
Δ
t
6
(
v
˙
1
+
2
v
˙
2
+
2
v
˙
3
+
v
˙
4
)
]
输入
t
n
t_n
tn和
t
n
+
1
t_{n+1}
tn+1时刻的角速度和加速度测量值,计算角加速度和加加速度(jerk)
α
=
(
ω
m
t
n
+
1
−
b
g
)
−
(
ω
m
t
n
−
b
g
)
Δ
t
j
=
(
a
m
t
n
+
1
−
b
a
)
−
(
a
m
t
n
−
b
a
)
Δ
t
\boldsymbol{\alpha} = \frac{(\boldsymbol{\omega}_{m_{t_{n+1}}} - \mathbf{b}_g) - (\boldsymbol{\omega}_{m_{t_{n}}} - \mathbf{b}_g)}{\Delta t} \\ \mathbf{j} = \frac{(\mathbf{a}_{m_{t_{n+1}}} - \mathbf{b}_a) - (\mathbf{a}_{m_{t_{n}}} - \mathbf{b}_a)}{\Delta t} \\
α=Δt(ωmtn+1−bg)−(ωmtn−bg)j=Δt(amtn+1−ba)−(amtn−ba)
姿态使用JPL四元数表示,姿态积分时有一个trick,积分并不是从
t
n
t_n
tn时刻的姿态开始的,而是从0姿态开始
v
0
=
v
t
n
q
0
=
w
b
q
t
n
Δ
q
0
=
[
0
0
0
1
]
k
1
=
[
Δ
q
˙
1
p
˙
1
v
˙
1
]
=
[
1
2
Ω
(
ω
m
t
n
−
b
g
)
Δ
q
0
v
0
R
{
Δ
q
0
⊗
q
0
}
⊤
(
a
m
t
n
−
b
a
)
−
g
]
Δ
q
1
=
norm
(
Δ
q
0
+
Δ
t
2
Δ
q
˙
1
)
k
2
=
[
Δ
q
˙
2
p
˙
2
v
˙
2
]
=
[
1
2
Ω
(
ω
m
t
n
−
b
g
+
Δ
t
2
α
)
Δ
q
1
v
0
+
Δ
t
2
v
˙
1
R
{
Δ
q
1
⊗
q
0
}
⊤
(
a
m
t
n
−
b
a
+
Δ
t
2
j
)
−
g
]
Δ
q
2
=
norm
(
Δ
q
0
+
Δ
t
2
Δ
q
˙
2
)
k
3
=
[
Δ
q
˙
3
p
˙
3
v
˙
3
]
=
[
1
2
Ω
(
ω
m
t
n
−
b
g
+
Δ
t
2
α
)
Δ
q
2
v
0
+
Δ
t
2
v
˙
2
R
{
Δ
q
2
⊗
q
0
}
⊤
(
a
m
t
n
−
b
a
+
Δ
t
2
j
)
−
g
]
Δ
q
3
=
norm
(
Δ
q
0
+
Δ
t
Δ
q
˙
3
)
k
4
=
[
Δ
q
˙
4
p
˙
4
v
˙
4
]
=
[
1
2
Ω
(
ω
m
t
n
−
b
g
+
Δ
t
α
)
Δ
q
3
v
0
+
Δ
t
v
˙
3
R
{
Δ
q
3
⊗
q
0
}
⊤
(
a
m
t
n
−
b
a
+
Δ
t
j
)
−
g
]
[
q
t
n
+
Δ
t
p
t
n
+
Δ
t
v
t
n
+
Δ
t
]
=
[
norm
(
Δ
q
0
+
Δ
t
6
(
Δ
q
˙
1
+
2
Δ
q
˙
2
+
2
Δ
q
˙
3
+
Δ
q
˙
4
)
)
⊗
w
b
q
t
n
p
t
n
+
Δ
t
6
(
p
˙
1
+
2
p
˙
2
+
2
p
˙
3
+
p
˙
4
)
v
t
n
+
Δ
t
6
(
v
˙
1
+
2
v
˙
2
+
2
v
˙
3
+
v
˙
4
)
]