当前位置: 首页 > news >正文

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=ij1exp((ω^kbgk)Δ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=ij1ΔRik(a^kbak)Δ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=ij1[ΔvikΔt+0.5ΔRik(a^kbak)Δ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(vjvigΔ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(pjpiviΔtij0.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(Xlpi))vilπ(Ri(Xlpi))]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在边缘化旧帧时:

  1. 线性化点固定,导致线性化误差
  2. 可能破坏系统的可观测性
  3. 对IMU偏置的估计有负面影响

4.2 DM-VIO的解决方案

DM-VIO采用两阶段边缘化:

  1. 初始边缘化:当关键帧被移出窗口时,只边缘化与视觉相关的状态(位姿和路标点),保留IMU相关状态(速度、偏置)在优化窗口中。

  2. 延迟边缘化:当这些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=HrrHrmHmm1Hmr]
[ b ∗ = b r − H r m H m m − 1 b m ] [ b^* = b_r - H_{rm} H_{mm}^{-1} b_m ] [b=brHrmHmm1bm]

在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的延迟边缘化策略有助于保持系统的可观测性:

  1. 保持IMU状态在窗口中更长时间,可以更好地估计偏置
  2. 分离视觉和IMU状态的边缘化,减少了线性化误差的传播
  3. 特别对俯仰和滚转角度的可观测性有改善

6. 实现细节

6.1 关键帧选择策略

基于以下条件选择关键帧:

  1. 平均视差大于阈值
  2. 跟踪质量低于阈值
  3. 距离上一关键帧时间超过阈值

6.2 初始化

采用视觉-惯性联合初始化:

  1. 纯视觉SfM估计初始位姿和地图
  2. 视觉惯性对齐估计尺度、重力方向、速度和偏置
  3. 紧耦合优化 refine 所有参数

6.3 重定位与闭环检测

使用DBoW2进行地点识别,然后进行几何验证和位姿图优化。

7. 实验分析

DM-VIO在EuRoC和TUM-VI数据集上表现出色:

  1. 比VINS-Mono有更高的精度
  2. 对IMU偏置估计更准确
  3. 在快速运动和大旋转情况下更鲁棒
  4. 计算开销与VINS-Mono相当

8. 总结

DM-VIO通过创新的延迟边缘化策略,解决了传统VIO系统中的几个关键问题:

  1. 减少了边缘化带来的线性化误差
  2. 保持了系统的可观测性
  3. 提高了IMU偏置估计的准确性
  4. 在不显著增加计算负担的情况下提高了系统鲁棒性

相关文章:

  • 大模型之Hugging Face
  • 信奥还能考吗?未来三年科技特长生政策变化
  • 【开发教程】学生团队项目开发协调管理文档库构建以及使用指南
  • #4 为什么要物联以及 物联网的整体结构
  • linux tracepoint系列宏定义(TRACE_EVENT,DEFINE_TRACE等)展开过程分析之三 define_trace.h头文件
  • 【blender小技巧】Blender导出带贴图的FBX模型,并在unity中提取材质模型使用
  • telepresence使用指南
  • 【LH-开发记录】
  • Dockerfile 学习指南和简单实战
  • 一文介绍关于多模态的基础知识 !!
  • PHP弱类型hash比较缺陷
  • 高速连接器设计的技术挑战和解决方案
  • Dify智能体平台源码二次开发笔记(5) - 多租户的SAAS版实现(2)
  • 添加登录和注册功能
  • 图像预处理(OpenCV)-part2
  • 3.6 函数图像描绘
  • 3.6 集合
  • SpringBoot Starter自定义:创建可复用的自动配置模块
  • 基于QtC++音乐播放器whisper语音转文字歌词解析
  • 奇趣点播系统测试报告
  • 朝中社发表评论文章,谴责美军部署B1-B轰炸机至日本
  • 陕西省烹饪餐饮行业领军人物黄建军逝世,终年53岁
  • 宁夏中卫深化公立医院机构编制改革:市人民医院机构规格升为正处级
  • 全红婵、李宁亮相中国航天日论坛,体育和航天这一次紧密相连
  • “动漫短剧”值不值得做?
  • 夜读丨秦腔里的乡魂