IMU预积分

wen IT资讯 26

本文目录导读:

IMU预积分

  1. 为什么需要IMU预积分?—— 解决核心痛点
  2. 核心数学模型与符号说明
  3. 预积分在因子图中的应用:形成约束
  4. 总结与关键点
  5. 直观理解

这是一个非常核心且深入的SLAM/多传感器融合问题,你提到的“IMU预积分”是现代视觉-惯性里程计(VIO)和惯性SLAM系统中,处理高频IMU数据与低频视觉/激光数据的关键技术。

IMU预积分的目的是:在两个关键帧之间,对IMU的测量数据(加速度和角速度)进行预先积分,生成一个相对运动约束,这个约束描述了从一个关键帧到下一个关键帧的相对位置、速度和姿态变化。

下面为你详细拆解其原理、数学公式、为什么需要它以及它在因子图中的应用。

为什么需要IMU预积分?—— 解决核心痛点

在传统的SLAM中,如果你直接使用IMU积分,会遇到一个严重问题,IMU的测量频率非常高(100Hz-1000Hz),而视觉/激光关键帧频率低(10-30Hz)。

  • 原始问题:每次优化图优化(调整所有关键帧的位姿)时,如果状态(位置、速度、姿态)发生了变化,就需要根据新状态从头开始重新积分所有IMU数据,这计算开销巨大,且破坏了IMU数据的独立性。

    • 你有一个1000Hz的IMU数据段连接两个关键帧,每次调整关键帧位姿,都要重新积分这1000个数据点,非常低效。
  • 预积分的创新:预积分将IMU积分与全局状态解耦,它把两个关键帧之间的IMU数据积分成一个相对增量(相对旋转、相对速度、相对位移),这个增量不依赖于积分起点(第一个关键帧)的绝对状态。

    • 优点:当优化调整全局状态时(比如调整关键帧位姿),只需要更新预积分项的起点状态,而无需重新积分整个IMU数据段,这极大地提高了计算效率,使实时运行成为可能。

核心数学模型与符号说明

为了清晰,我们定义一些符号:

  • 世界坐标系 (w):通常与重力方向对齐。

  • IMU/机体坐标系 (b):固定在IMU传感器上。

  • 关键帧 (i) 和 (j):两个连续的关键帧,时间戳为 (t_i) 和 (t_j)。

  • 状态量

    • (R_{wbi}, p{wbi}, v{wb_i}) :在 (t_i) 时刻,IMU(注意,是IMU的b系,不是相机)在世界坐标系中的旋转、位置、速度。
    • (b^a_i, b^g_i) :在 (t_i) 时刻,加速度计和陀螺仪的偏置(bias)。这是预积分的关键,后续会看到偏置的影响
  • IMU测量模型(简化,不考虑噪声):

    • 测量角速度: (\tilde{\omega}_{b_i bk} = \omega{b_i b_k} + b^g_i + \eta^g) (陀螺仪偏置和噪声)
    • 测量加速度: (\tilde{a}_{bk} = R^{T}{wbk}(a{wb_k} - g_w) + b^a_i + \eta^a) (将世界坐标系加速度转到机体坐标系,并减去重力 (g_w))
  • 连续时间的IMU运动学(世界坐标系下的微分方程): [ \dot{R}{wb} = R{wb} \cdot \omega^\wedge{bb} ] [ \dot{v}{wb} = a{wb} ] [ \dot{p}{wb} = v_{wb} ]

关键步骤:预积分公式推导

我们想直接得到 (t_i) 到 (t_j) 之间的相对运动,而不依赖于 (t_i) 的绝对状态。

通过对 (\Delta t) 内的测量值进行离散积分(使用欧拉法或中值法),我们得到:

  1. 预积分旋转: [ \Delta R{ij} = R^{T}{wbi} R{wbj} ] 我们通过积分陀螺仪测量值得到: (\Delta \tilde{R}{ij} = \prod{k=i}^{j-1} \text{Exp}( (\tilde{\omega}{b_k} - b^g_i) \Delta t )) 注意:这里使用了初始时刻 (t_i) 的偏置,后续优化时,我们通常假设偏置变化很小,可以通过一次线性展开修正。

  2. 预积分速度: [ \Delta v{ij} = R^{T}{wbi} (v{wbj} - v{wb_i} - gw \Delta t) ] 通过对加速度积分得到: (\Delta \tilde{v}{ij} = \sum{k=i}^{j-1} \Delta R{ik} \cdot ( \tilde{a}_{b_k} - b^a_i ) \Delta t)

  3. 预积分位移: [ \Delta p{ij} = R^{T}{wbi} ( p{wbj} - p{wbi} - v{wb_i} \Delta t - \frac{1}{2} gw \Delta t^2) ] 通过对加速度双重积分得到: (\Delta \tilde{p}{ij} = \sum{k=i}^{j-1} \left[ \Delta v{ik} \Delta t + \frac{1}{2} \Delta R{ik} \cdot ( \tilde{a}{b_k} - b^a_i ) \Delta t^2 \right])

关键结论:(\Delta \tilde{R}{ij}, \Delta \tilde{v}{ij}, \Delta \tilde{p}_{ij}) 完全由IMU测量值决定,与 (ti) 时刻的绝对状态 (R{wbi}, v{wbi}, p{wb_i}) 无关(除了偏置)。

预积分在因子图中的应用:形成约束

在因子图优化中,预积分作为一个边(Edge) 连接两个关键帧节点((i) 和 (j))。

  • 节点:每个关键帧 (k) 的状态变量是 (Xk = [R{wbk}, p{wbk}, v{wb_k}, b^a_k, b^g_k])。

  • 因子(边)

    • IMU预积分因子:连接节点 (i) 和 (j),它的残差是: [ r{\text{IMU}} = \begin{bmatrix} \text{Log}( \Delta \tilde{R}{ij}^T \cdot (R^{T}_{wbi} R{wbj}) ) \ R^{T}{wbi} (v{wbj} - v{wb_i} - gw \Delta t) - \Delta \tilde{v}{ij} \ R^{T}_{wbi} ( p{wbj} - p{wbi} - v{wb_i} \Delta t - \frac{1}{2} gw \Delta t^2) - \Delta \tilde{p}{ij} \end{bmatrix} ] 这个残差衡量了观测值(预积分测量)预测值(根据当前优化的状态推算出的相对运动) 之间的差异。
  • 偏置处理:预积分值依赖于初始偏置 (b^a_i, b^g_i),在优化过程中,偏置也会被优化,我们假设偏置变化很小,可以对预积分值进行一次线性化(基于雅可比矩阵),从而将偏置的变化映射到预积分值的修正上,而不必完全重新积分。

总结与关键点

  • 核心目的:将高频IMU数据浓缩成低频关键帧之间的相对运动约束,解耦全局状态与局部积分,提高计算效率
  • 核心思想:计算 (\Delta R, \Delta v, \Delta p) 这些不依赖于起点绝对状态的相对量。
  • 关键数值问题
    1. 噪声传递:通过协方差传递公式处理积分过程中噪声的累积。
    2. 偏置更新:通过雅可比矩阵实现偏置变化对预积分值的高效修正。
    3. 初始化:需要准确的初始速度和重力估计,否则预积分误差会累积。
  • 常用开源实现
    • VINS-Mono:经典的视觉惯性SLAM系统,预积分模块非常清晰。
    • ORB-SLAM3:同样使用了预积分,并且处理了更多细节(如关键帧的插入策略)。
    • GTSAM / Ceres / g2o:这些优化库都支持直接集成预积分因子,提供了预积分数学的库支持。

直观理解

想象你在跑步,每隔一段时间(关键帧)拍照。

  • 没有预积分:每次拍完照,想更新你的位置,你需要从头开始重新数你的每一步(重新积分),这很慢。
  • 有预积分:你每段跑步(两次拍照之间)的步数、步长、方向变化都被预先算好并记录下来(预积分增量),当你拍完下一张照片,想修正你的位置时,你只需要知道起始点的姿态和速度,然后加上这段预先算好的相对位移即可,如果起始点姿态变了(比如你转了个身),你只需要把这段预先算好的相对位移旋转一下,而不需要重新跑一遍这段路。

希望这个解释能帮助你理解IMU预积分,如果想深入理解代码或具体细节,可以查阅VINS-Mono的源码(vins_estimator/src/factor/integration_base.h.cpp),其中有非常清晰的实现和注释。

抱歉,评论功能暂时关闭!