1. 前言
本文内容主要来自于对邱笑晨博士IMU.pdf和高博对预积分讲解视频的个人理解。
2. IMU应用原理
原理:IMU可以测得载体运动过程中的加速度,在初始位姿+初始速度已知的情况下,通过积分可以得到实时速度,再积分即可得到实时位置;
需要解决的事情:该加速度是在载体坐标系下的,即由于载体在运动使得每次测量所对应的坐标系是不同的,因此需要有个换算过程将其统一到同一个坐标系下。此时就需要不断更新每次测量的载体姿态,用于将IMU测量换算到世界坐标系下;
问题:
①IMU测量的加速度其实是包含了反向重力加速度的比力,可以理解为静止时IMU输出为垂直向上的重力加速度,自由落体时IMU输出为0;
②IMU的测量存在噪声,导致积分过程噪声不断累加;
应用:基于BA的VIO算法中,IMU预积分提供了两帧之间位姿变化的测量,该测量结果可以作为两帧之间的位姿边参与图优化中,就像是为卡尔曼滤波中增加了运动方程(个人理解);同时这种结合还带来了几个优点:
①IMU与绝对位姿解耦了,即IMU积分需要的这个位姿不再完全依赖自己提供,SLAM会维护这个位姿而它本身只需在两帧之间提供积分运算,因此优化速度得到了提高;
②重力存在使得SLAM系统中俯仰角和横滚角可观(x,z轴旋转客观,不包含y轴航向角),这让系统有了绝对姿态;
③IMU之外的传感器提供的观测使得IMU的bias可观从而被估计出来,有效地抑制了IMU的累计误差;
④IMU提供的距离信息解决了单目视觉的尺度问题;
3.IMU模型
3.1 坐标关系
在VIO系统中有3个常用坐标系:世界坐标系W,IMU坐标系B和相机坐标系C;
我们将IMU坐标系在世界坐标系下的表示定义为:
T
W
B
=
(
R
W
B
,
p
W
)
T_{WB}=(R_{WB}, p_W)
TWB=(RWB,pW),IMU系到相机系的坐标变化定义为:
T
B
C
T_{BC}
TBC
3.2 测量模型
此时我们有IMU的测量模型为:
{
w
^
W
B
(
t
)
=
w
W
B
(
t
)
+
b
g
(
t
)
+
η
g
(
t
)
a
^
B
(
t
)
=
R
W
B
T
(
a
W
(
t
)
−
g
W
)
+
b
a
(
t
)
+
η
a
(
t
)
\left\{ \begin{array}{lr} \hat w_{WB}(t) = w_{WB}(t)+b_{g}(t)+\eta_{g}(t) \\ \hat a_{B}(t) = R_{WB}^T(a_{W}(t)-g_{W})+b_{a}(t)+\eta_{a}(t) \end{array} \right.
{w^WB(t)=wWB(t)+bg(t)+ηg(t)a^B(t)=RWBT(aW(t)−gW)+ba(t)+ηa(t)上述两式分别对应陀螺仪测量模型+加速度计测量模型,即:
测量角速度/加速度 = 真实角速度/加速度 + 时变的bias + 白噪声
两个测量结果都是IMU坐标系下的表示,另外这里的两个bias其实是两个随机游走,导数具有如下形式:
b
˙
g
(
t
)
=
η
b
g
,
b
˙
a
(
t
)
=
η
b
a
\dot b_{g}(t) = \eta^{bg}, \dot b_{a}(t) = \eta^{ba}
b˙g(t)=ηbg,b˙a(t)=ηba知道了测量模型,我们可以得到VIO中的需要估计的状态量,与VO相比需要估计的东西多了一个三维的速度和两个三位的bias,状态量如下:
x
i
=
[
R
i
,
p
i
,
v
i
,
b
g
i
,
b
a
i
]
x_i = [R_i, p_i, v_i, b_{g_{i}}, b_{a_{i}}]
xi=[Ri,pi,vi,bgi,bai]
3.3 运动模型
运动学为微分模型:
{
v
˙
W
=
a
W
p
˙
W
=
v
W
R
˙
W
B
=
R
W
B
∗
(
w
W
B
)
ˆ
\left\{ \begin{array}{lr} \dot v_W = a_W \\ \dot p_W = v_W \\ \dot R_{WB} = R_{WB}*(w_{WB})\ \^{} \end{array} \right.
⎩
⎨
⎧v˙W=aWp˙W=vWR˙WB=RWB∗(wWB) ˆ通过积分可以得到
Δ
t
\Delta t
Δt时间后的运动状态为,连续域下的积分形式:
{
v
W
(
t
+
Δ
t
)
=
v
W
(
t
)
+
∫
t
t
+
Δ
t
a
W
(
τ
)
d
τ
p
W
(
t
+
Δ
t
)
=
p
W
(
t
)
+
∫
t
t
+
Δ
t
v
W
(
τ
)
d
τ
+
∫
∫
t
t
+
Δ
t
a
W
(
τ
)
(
d
τ
)
2
R
W
B
(
t
+
Δ
t
)
=
R
W
B
∗
E
x
p
(
∫
t
t
+
Δ
t
w
W
B
(
τ
)
d
τ
)
\left\{ \begin{array}{lr} v_W(t+\Delta t) = v_W(t) + \int_t^{t+\Delta t}a_W(\tau)\ d\tau \\ p_W(t+\Delta t) = p_W(t) + \int_t^{t+\Delta t} v_W(\tau)\ d\tau + \int\int_t^{t+\Delta t}a_W(\tau)\ (d\tau)^2 \\ R_{WB}(t+\Delta t) = R_{WB}*Exp(\int_t^{t+\Delta t} w_{WB}(\tau)\ d\tau) \end{array} \right.
⎩
⎨
⎧vW(t+Δt)=vW(t)+∫tt+ΔtaW(τ) dτpW(t+Δt)=pW(t)+∫tt+ΔtvW(τ) dτ+∫∫tt+ΔtaW(τ) (dτ)2RWB(t+Δt)=RWB∗Exp(∫tt+ΔtwWB(τ) dτ)由于IMU的观测时
Δ
t
\Delta t
Δt时刻一次离散的形式,只能假设在这段时间内是不变的,因此将连续表示转换成离散形式:
{
v
W
(
t
+
Δ
t
)
=
v
W
(
t
)
+
a
W
(
t
)
Δ
t
p
W
(
t
+
Δ
t
)
=
p
W
(
t
)
+
v
W
(
t
)
Δ
t
+
1
2
a
W
(
t
)
(
Δ
t
)
2
R
W
B
(
t
+
Δ
t
)
=
R
W
B
∗
E
x
p
(
w
W
B
(
t
)
Δ
t
)
\left\{ \begin{array}{lr} v_W(t+\Delta t) = v_W(t) + a_W(t)\ \Delta t \\ p_W(t+\Delta t) = p_W(t) + v_W(t)\ \Delta t + \frac{1}{2}a_W(t)\ (\Delta t)^2 \\ R_{WB}(t+\Delta t) = R_{WB}*Exp(w_{WB}(t)\Delta t) \end{array} \right.
⎩
⎨
⎧vW(t+Δt)=vW(t)+aW(t) ΔtpW(t+Δt)=pW(t)+vW(t) Δt+21aW(t) (Δt)2RWB(t+Δt)=RWB∗Exp(wWB(t)Δt)
3.4 观测+运动结合
观测方程带入运动模型即可得到IMU观测下的运动方程:
{
v
W
(
t
+
Δ
t
)
=
v
W
(
t
)
+
g
W
Δ
t
+
(
a
^
B
(
t
)
−
b
a
(
t
)
−
η
a
(
t
)
)
Δ
t
p
W
(
t
+
Δ
t
)
=
p
W
(
t
)
+
v
W
(
t
)
Δ
t
+
1
2
g
W
Δ
t
+
1
2
(
a
^
B
(
t
)
−
b
a
(
t
)
−
η
a
(
t
)
)
(
Δ
t
)
2
R
W
B
(
t
+
Δ
t
)
=
R
W
B
∗
E
x
p
(
(
w
^
W
B
(
t
)
−
b
g
(
t
)
−
η
g
(
t
)
)
Δ
t
)
\left\{ \begin{array}{lr} v_W(t+\Delta t) = v_W(t) + g_{W}\Delta t + (\hat a_{B}(t) -b_{a}(t)-\eta_{a}(t))\ \Delta t \\ p_W(t+\Delta t) = p_W(t) + v_W(t)\ \Delta t + \frac{1}{2}g_{W}\Delta t + \frac{1}{2}(\hat a_{B}(t) -b_{a}(t)-\eta_{a}(t))\ (\Delta t)^2 \\ R_{WB}(t+\Delta t) = R_{WB}*Exp((\hat w_{WB}(t)-b_{g}(t)-\eta_{g}(t))\Delta t) \end{array} \right.
⎩
⎨
⎧vW(t+Δt)=vW(t)+gWΔt+(a^B(t)−ba(t)−ηa(t)) ΔtpW(t+Δt)=pW(t)+vW(t) Δt+21gWΔt+21(a^B(t)−ba(t)−ηa(t)) (Δt)2RWB(t+Δt)=RWB∗Exp((w^WB(t)−bg(t)−ηg(t))Δt)这个式子就是预积分的基础了,这里还存在一个问题,即IMU中的两个bias是不知道的,而预积分的处理方式就是通过两个照片帧得到的观测集合IMU的积分结果处理这个bias;
4. IMU预积分
在两个关键帧i和j之间,将IMU数据积分得到两帧之间的运动关系有:
{
v
j
=
v
i
+
g
Δ
t
i
j
+
∑
k
=
i
j
−
1
(
R
k
(
a
^
k
−
b
k
a
−
η
k
a
)
Δ
t
)
p
j
=
p
i
+
∑
k
=
i
j
−
1
(
v
k
Δ
t
+
1
2
g
Δ
t
+
1
2
R
k
(
a
^
k
−
b
k
a
−
η
k
a
)
Δ
t
2
)
R
j
=
R
i
∗
∏
k
=
i
j
−
1
E
x
p
(
(
w
^
k
−
b
k
g
−
η
k
g
)
Δ
t
)
\left\{ \begin{array}{lr} v_j = v_i + g\Delta t_{ij} + \sum_{k=i}^{j-1}(R_k(\hat a_{k} -b_{ka}-\eta_{ka})\Delta t) \\ p_j = p_i + \sum_{k=i}^{j-1}(v_k\ \Delta t + \frac{1}{2}g\Delta t + \frac{1}{2}R_{k}(\hat a_k -b_{ka}-\eta_{ka})\ \Delta t^2) \\ R_j = R_i*\prod_{k=i}^{j-1} Exp((\hat w_{k}-b_{kg}-\eta_{kg})\Delta t) \end{array} \right.
⎩
⎨
⎧vj=vi+gΔtij+∑k=ij−1(Rk(a^k−bka−ηka)Δt)pj=pi+∑k=ij−1(vk Δt+21gΔt+21Rk(a^k−bka−ηka) Δt2)Rj=Ri∗∏k=ij−1Exp((w^k−bkg−ηkg)Δt)将两帧之间的速度、位置、旋转变化量对齐到上一帧位置处,得到两帧之间的IMU观测模型:
{
Δ
v
i
j
=
R
i
T
(
v
j
−
v
i
−
g
Δ
t
i
j
)
=
∑
k
=
i
j
Δ
R
i
k
(
a
^
k
−
b
k
a
−
η
k
a
)
Δ
t
Δ
p
i
j
=
R
i
T
(
p
j
−
p
i
−
v
i
Δ
t
i
j
−
1
2
∑
k
=
i
j
−
1
g
(
Δ
t
)
2
)
=
∑
k
=
i
j
(
Δ
v
i
k
Δ
t
+
1
2
Δ
R
i
k
(
a
^
k
−
b
k
a
−
η
k
a
)
Δ
t
2
)
Δ
R
i
j
=
R
i
T
R
j
=
∏
k
=
i
j
−
1
E
x
p
(
(
w
^
k
−
b
k
g
−
η
k
g
)
Δ
t
)
\left\{ \begin{array}{lr} \Delta v_{ij} = R_i^T(v_j - v_i - g\Delta t_{ij}) = \sum_{k=i}^{j}\Delta R_{ik}(\hat a_{k} -b_{ka}-\eta_{ka})\Delta t \\ \Delta p_{ij} = R_i^T(p_j -p_i - v_i\Delta t_{ij} - \frac{1}{2}\sum_{k=i}^{j-1}g(\Delta t)^2) = \sum_{k=i}^j(\Delta v_{ik}\ \Delta t + \frac{1}{2}\Delta R_{ik}(\hat a_k -b_{ka}-\eta_{ka})\ \Delta t^2) \\ \Delta R_{ij} = R_i^TRj = \prod_{k=i}^{j-1} Exp((\hat w_{k}-b_{kg}-\eta_{kg})\Delta t) \end{array} \right.
⎩
⎨
⎧Δvij=RiT(vj−vi−gΔtij)=∑k=ijΔRik(a^k−bka−ηka)ΔtΔpij=RiT(pj−pi−viΔtij−21∑k=ij−1g(Δt)2)=∑k=ij(Δvik Δt+21ΔRik(a^k−bka−ηka) Δt2)ΔRij=RiTRj=∏k=ij−1Exp((w^k−bkg−ηkg)Δt)注意注意注意,这里是将IMU的bias部分对齐到了上一帧i表示的坐标系,因此等号右边都是
Δ
∗
i
k
\Delta *_{ik}
Δ∗ik的形式,至此IMU预积分的残差公式就推导完毕了,后续还涉及bias和噪声的处理以及一些细微的推导等以后有功夫再写吧;