SLAM文献之DM-VIO: Delayed Marginalization Visual-Inertial Odometry
1. 算法概述
DM-VIO (Delayed Marginalization Visual-Inertial Odometry) 是一种基于延迟边缘化的视觉-惯性里程计算法,它结合了视觉和惯性测量单元(IMU)的数据进行位姿估计。该算法是VINS-Mono的改进版本,主要创新点在于采用了一种延迟边缘化策略,能够更好地处理非线性问题和保持系统的可观测性。
2. 系统模型
2.1 状态表示
系统的状态向量定义为:
X
=
[
x
0
,
x
1
,
…
,
x
n
,
λ
0
,
λ
1
,
…
,
λ
m
]
X = [ x_0, x_1, \dots, x_n, \lambda_0, \lambda_1, \dots, \lambda_m ]
X=[x0,x1,…,xn,λ0,λ1,…,λm]
其中:
- x_i = [p_i, q_i, v_i, b_a_i, b_g_i] 表示第i个关键帧的状态
- p_i ∈ ℝ³:位置
- q_i ∈ SO(3):姿态(四元数表示)
- v_i ∈ ℝ³:速度
- b_a_i ∈ ℝ³:加速度计偏置
- b_g_i ∈ ℝ³:陀螺仪偏置
- λ_j ∈ ℝ:第j个3D点的逆深度
2.2 IMU预积分
IMU测量模型:
[
a
^
t
=
a
t
+
b
a
+
R
w
t
g
w
+
n
a
]
[ \hat{a}_t = a_t + b_a + R_w^t g^w + n_a ]
[a^t=at+ba+Rwtgw+na]
[ ω ^ t = ω t + b g + n g ] [ \hat{\omega}_t = \omega_t + b_g + n_g ] [ω^t=ωt+bg+ng]
IMU预积分量(两个关键帧i和j之间):
[
Δ
R
i
j
=
∏
k
=
i
j
−
1
exp
(
(
ω
^
k
−
b
g
k
)
Δ
t
)
]
[ \Delta R_{ij} = \prod_{k=i}^{j-1} \exp\left((\hat{\omega}_k - b_{g_k}) \Delta t \right) ]
[ΔRij=k=i∏j−1exp((ω^k−bgk)Δt)]
[
Δ
v
i
j
=
∑
k
=
i
j
−
1
Δ
R
i
k
(
a
^
k
−
b
a
k
)
Δ
t
]
[ \Delta v_{ij} = \sum_{k=i}^{j-1} \Delta R_{ik} (\hat{a}_k - b_{a_k}) \Delta t ]
[Δvij=k=i∑j−1ΔRik(a^k−bak)Δt]
[
Δ
p
i
j
=
∑
k
=
i
j
−
1
[
Δ
v
i
k
Δ
t
+
0.5
Δ
R
i
k
(
a
^
k
−
b
a
k
)
Δ
t
2
]
]
[ \Delta p_{ij} = \sum_{k=i}^{j-1} \left[ \Delta v_{ik} \Delta t + 0.5 \Delta R_{ik} (\hat{a}_k - b_{a_k}) \Delta t^2 \right] ]
[Δpij=k=i∑j−1[ΔvikΔt+0.5ΔRik(a^k−bak)Δt2]]
其中:
- ( Δ R i j ) ( \Delta R_{ij} ) (ΔRij) 表示从时刻 ( i ) ( i ) (i) 到时刻 ( j ) ( j ) (j) 的旋转增量,通过累积旋转误差来计算。
- ( Δ v i j ) ( \Delta v_{ij} ) (Δvij) 和 ( D e l t a p i j ) ( Delta p_{ij} ) (Deltapij) 分别是从时刻 ( i ) ( i ) (i) 到时刻 ( j ) ( j ) (j) 的速度增量和位置增量。
- ( ω ^ k ) ( \hat{\omega}_k ) (ω^k) 是时刻 ( k ) ( k ) (k) 的角速度估计, ( b g k ) ( b_{g_k} ) (bgk) 是角速度偏差。
- ( a ^ k ) ( \hat{a}_k ) (a^k) 是时刻 ( k ) ( k ) (k) 的加速度估计, ( b a k ) ( b_{a_k} ) (bak) 是加速度偏差。
- ( Δ t ) ( \Delta t ) (Δt) 是两个时刻之间的时间间隔。
预积分残差:
[
r
Δ
R
i
j
=
Log
(
Δ
R
i
j
T
R
i
T
R
j
)
]
[ r_{\Delta R_{ij}} = \text{Log}(\Delta R_{ij}^T R_i^T R_j) ]
[rΔRij=Log(ΔRijTRiTRj)]
[
r
Δ
v
i
j
=
R
i
T
(
v
j
−
v
i
−
g
Δ
t
i
j
)
−
Δ
v
i
j
]
[ r_{\Delta v_{ij}} = R_i^T(v_j - v_i - g \Delta t_{ij}) - \Delta v_{ij} ]
[rΔvij=RiT(vj−vi−gΔtij)−Δvij]
[
r
Δ
p
i
j
=
R
i
T
(
p
j
−
p
i
−
v
i
Δ
t
i
j
−
0.5
g
Δ
t
i
j
2
)
−
Δ
p
i
j
]
[ r_{\Delta p_{ij}} = R_i^T(p_j - p_i - v_i \Delta t_{ij} - 0.5 g \Delta t_{ij}^2) - \Delta p_{ij} ]
[rΔpij=RiT(pj−pi−viΔtij−0.5gΔtij2)−Δpij]
其中:
- ( r Δ R i j ) ( r_{\Delta R_{ij}} ) (rΔRij), ( r Δ v i j ) ( r_{\Delta v_{ij}} ) (rΔvij), 和 ( r Δ p i j ) ( r_{\Delta p_{ij}} ) (rΔpij) 分别表示旋转矩阵、速度和位置的残差。
- ( Log ) (\text{Log}) (Log) 是李群的对数映射(通常用于旋转矩阵或四元数的误差表示)。
- ( Δ R i j ) (\Delta R_{ij}) (ΔRij), ( Δ v i j ) (\Delta v_{ij}) (Δvij), 和 ( Δ p i j ) (\Delta p_{ij}) (Δpij) 是旋转、速度和位置的增量或误差项。
- ( R i ) ( R_i ) (Ri) 和 ( R j ) ( R_j ) (Rj) 是对应时刻 ( i ) (i) (i) 和 ( j ) (j) (j) 的旋转矩阵。
- ( v i ) ( v_i ) (vi) 和 ( v j ) ( v_j ) (vj) 是时刻 ( i ) (i) (i) 和 ( j ) (j) (j) 的速度向量。
- ( p i ) ( p_i ) (pi) 和 ( p j ) ( p_j ) (pj) 是时刻 ( i ) (i) (i) 和 ( j ) (j) (j) 的位置向量。
- ( Δ t i j ) ( \Delta t_{ij} ) (Δtij) 是时刻 ( i ) (i) (i) 和 ( j ) (j) (j) 之间的时间间隔。
- ( g ) ( g ) (g) 是重力加速度。
2.3 视觉重投影误差
对于特征点l在帧i中的观测
(
u
i
l
,
v
i
l
)
(u_i^l, v_i^l)
(uil,vil),其重投影误差为:
[
r
c
l
=
[
u
i
l
−
π
(
R
i
(
X
l
−
p
i
)
)
v
i
l
−
π
(
R
i
(
X
l
−
p
i
)
)
]
T
]
[ r_c^l = \begin{bmatrix} u_i^l - \pi(R_i(X_l - p_i)) \\ v_i^l - \pi(R_i(X_l - p_i)) \end{bmatrix}^T ]
[rcl=[uil−π(Ri(Xl−pi))vil−π(Ri(Xl−pi))]T]
其中 X l X_l Xl是3D点坐标,π是投影函数。
使用逆深度参数化时,3D点表示为:
[
X
l
=
p
C
1
+
1
λ
l
R
C
1
[
u
l
v
l
1
]
]
[ X_l = p_{C1} + \frac{1}{\lambda_l} R_{C1} \begin{bmatrix} u_l \\ v_l \\ 1 \end{bmatrix} ]
[Xl=pC1+λl1RC1
ulvl1
]
3. 优化问题
3.1 目标函数
联合优化问题:
[
min
X
{
∑
∥
r
I
(
x
i
,
x
j
)
∥
Σ
I
2
+
∑
ρ
(
∥
r
C
(
x
i
,
λ
l
)
∥
Σ
C
2
)
}
]
[ \min_X \left\{ \sum \left\| r_I(x_i, x_j) \right\|_{\Sigma_I}^2 + \sum \rho \left( \left\| r_C(x_i, \lambda_l) \right\|_{\Sigma_C}^2 \right) \right\} ]
[Xmin{∑∥rI(xi,xj)∥ΣI2+∑ρ(∥rC(xi,λl)∥ΣC2)}]
其中ρ是Huber鲁棒核函数。
3.2 滑动窗口优化
DM-VIO采用滑动窗口优化策略,窗口内保持N个关键帧。当新帧加入时,最旧的关键帧会被边缘化。
4. 延迟边缘化策略
4.1 标准边缘化的问题
传统VIO在边缘化旧帧时:
- 线性化点固定,导致线性化误差
- 可能破坏系统的可观测性
- 对IMU偏置的估计有负面影响
4.2 DM-VIO的解决方案
DM-VIO采用两阶段边缘化:
-
初始边缘化:当关键帧被移出窗口时,只边缘化与视觉相关的状态(位姿和路标点),保留IMU相关状态(速度、偏置)在优化窗口中。
-
延迟边缘化:当这些IMU状态也变得过时时,再进行第二次边缘化。
4.3 数学推导
设要边缘化的状态为 x m x_m xm,保留状态为 x r x_r xr。将Hessian矩阵分块
[ H = [ H m m H m r H r m H r r ] ] [ H = \begin{bmatrix} H_{mm} & H_{mr} \\ H_{rm} & H_{rr} \end{bmatrix} ] [H=[HmmHrmHmrHrr]]
边缘化后的先验信息:
[
H
∗
=
H
r
r
−
H
r
m
H
m
m
−
1
H
m
r
]
[ H^* = H_{rr} - H_{rm} H_{mm}^{-1} H_{mr} ]
[H∗=Hrr−HrmHmm−1Hmr]
[
b
∗
=
b
r
−
H
r
m
H
m
m
−
1
b
m
]
[ b^* = b_r - H_{rm} H_{mm}^{-1} b_m ]
[b∗=br−HrmHmm−1bm]
在DM-VIO中,第一次边缘化:
[
x
m
=
[
p
i
,
q
i
,
λ
j
]
,
x
r
=
[
v
i
,
b
a
i
,
b
g
i
,
…
]
]
[ x_m = [p_i, q_i, \lambda_j], \quad x_r = [v_i, b_{a_i}, b_{g_i}, \dots] ]
[xm=[pi,qi,λj],xr=[vi,bai,bgi,…]]
第二次边缘化:
[
x
m
=
[
v
i
,
b
a
i
,
b
g
i
]
,
x
r
=
[
其他状态
]
]
[ x_m = [v_i, b_{a_i}, b_{g_i}], \quad x_r = [\text{其他状态}] ]
[xm=[vi,bai,bgi],xr=[其他状态]]
其中:
- ( H ) ( H ) (H) 是Hessian矩阵,分为四个子块 ( H m m , H m r , H r m , H r r ) ( H_{mm}, H_{mr}, H_{rm}, H_{rr} ) (Hmm,Hmr,Hrm,Hrr)。
- ( H ∗ ) ( H^* ) (H∗) 和 ( b ∗ ) ( b^* ) (b∗) 是边缘化后的先验信息。
- ( x m ) ( x_m ) (xm) 是边缘化的状态, ( x r ) ( x_r ) (xr) 是保留的状态。
- 在DM-VIO中,第一次边缘化涉及将位置和方向 ( p i , q i , λ j ) ( p_i, q_i, \lambda_j ) (pi,qi,λj)从状态中移除,保留速度、偏差等其他信息。第二次边缘化则是将速度和偏差 (v_i, b_a_i, b_g_i )从状态中移除。
5. 可观测性分析
DM-VIO的延迟边缘化策略有助于保持系统的可观测性:
- 保持IMU状态在窗口中更长时间,可以更好地估计偏置
- 分离视觉和IMU状态的边缘化,减少了线性化误差的传播
- 特别对俯仰和滚转角度的可观测性有改善
6. 实现细节
6.1 关键帧选择策略
基于以下条件选择关键帧:
- 平均视差大于阈值
- 跟踪质量低于阈值
- 距离上一关键帧时间超过阈值
6.2 初始化
采用视觉-惯性联合初始化:
- 纯视觉SfM估计初始位姿和地图
- 视觉惯性对齐估计尺度、重力方向、速度和偏置
- 紧耦合优化 refine 所有参数
6.3 重定位与闭环检测
使用DBoW2进行地点识别,然后进行几何验证和位姿图优化。
7. 实验分析
DM-VIO在EuRoC和TUM-VI数据集上表现出色:
- 比VINS-Mono有更高的精度
- 对IMU偏置估计更准确
- 在快速运动和大旋转情况下更鲁棒
- 计算开销与VINS-Mono相当
8. 总结
DM-VIO通过创新的延迟边缘化策略,解决了传统VIO系统中的几个关键问题:
- 减少了边缘化带来的线性化误差
- 保持了系统的可观测性
- 提高了IMU偏置估计的准确性
- 在不显著增加计算负担的情况下提高了系统鲁棒性