IMU预积分

IMU以100–1000 Hz产生测量值,而相机以10–30 Hz提供关键帧。朴素的VIO表述会将每个IMU读数都插入估计器,导致状态变量数量爆炸。更糟的是,朴素积分是在世界坐标系中完成的:积分结果依赖于区间起点的绝对位姿,因此每当优化器调整该位姿时,所有原始IMU数据都需要重新积分。

预积分(由Lupton和Sukkarieh于2012年提出)解决了这两个问题。两个关键帧时刻 iijj 之间的IMU测量值在关键帧*ii的局部坐标系*中被积分,生成一个紧凑的相对运动摘要:

(ΔRij,  Δvij,  Δpij)\left(\Delta\mathbf{R}_{ij},\; \Delta\mathbf{v}_{ij},\; \Delta\mathbf{p}_{ij}\right)

——相对旋转、速度变化和位置变化。关键的是,这些量只依赖于IMU测量值和偏置估计,不依赖于绝对位姿。它们只需被计算一次、存储起来,并在因子图中充当连接 iijj 处状态的一个单一”IMU因子”。当优化器移动位姿时,不需要重新积分任何东西。

数学原理

从测量模型 ω~t=ωt+bg+ηg\tilde{\boldsymbol{\omega}}_t = \boldsymbol{\omega}_t + \mathbf{b}^g + \boldsymbol{\eta}^g,  a~t=Rt(atg)+ba+ηa\;\tilde{\mathbf{a}}_t = \mathbf{R}_t^\top(\mathbf{a}_t - \mathbf{g}) + \mathbf{b}^a + \boldsymbol{\eta}^a 出发,预积分项在 [i,j)[i, j) 区间内的IMU采样点上累积:

ΔRij=t=ij1Exp ⁣((ω~tbig)δt)\Delta\mathbf{R}_{ij} = \prod_{t=i}^{j-1} \mathrm{Exp}\!\big((\tilde{\boldsymbol{\omega}}_t - \mathbf{b}^g_i)\,\delta t\big)

Δvij=t=ij1ΔRit(a~tbia)δt,Δpij=t=ij1[Δvitδt+12ΔRit(a~tbia)δt2]\Delta\mathbf{v}_{ij} = \sum_{t=i}^{j-1} \Delta\mathbf{R}_{it}\,(\tilde{\mathbf{a}}_t - \mathbf{b}^a_i)\,\delta t, \qquad \Delta\mathbf{p}_{ij} = \sum_{t=i}^{j-1}\Big[\Delta\mathbf{v}_{it}\,\delta t + \tfrac{1}{2}\Delta\mathbf{R}_{it}\,(\tilde{\mathbf{a}}_t - \mathbf{b}^a_i)\,\delta t^2\Big]

注意重力在这里出现——它只在下面的残差中重新出现,那时绝对姿态才可用。用伪代码表示,这个累积过程是一个每个关键帧区间只运行一次的简单循环:

ΔR, Δv, Δp ← I, 0, 0
for each IMU sample (ω̃, ã, δt) in [i, j):
    Δp ← Δp + Δv·δt + ½·ΔR·(ã − bᵃ)·δt²
    Δv ← Δv + ΔR·(ã − bᵃ)·δt
    ΔR ← ΔR · Exp((ω̃ − bᵍ)·δt)
    (propagate covariance and bias Jacobians alongside)

IMU残差

得到的因子将预测的相对运动(由当前的位姿/速度/偏置估计和重力计算得出)与存储的预积分测量值进行比较,这与重投影残差比较预测像素和观测像素的方式完全平行:

rΔR=Log(ΔRijRiRj),rΔv=Ri(vjvigΔtij)Δvij\mathbf{r}_{\Delta R} = \mathrm{Log}\big(\Delta\mathbf{R}_{ij}^\top\,\mathbf{R}_i^\top\mathbf{R}_j\big), \qquad \mathbf{r}_{\Delta v} = \mathbf{R}_i^\top\big(\mathbf{v}_j - \mathbf{v}_i - \mathbf{g}\,\Delta t_{ij}\big) - \Delta\mathbf{v}_{ij}

rΔp=Ri(pjpiviΔtij12gΔtij2)Δpij\mathbf{r}_{\Delta p} = \mathbf{R}_i^\top\big(\mathbf{p}_j - \mathbf{p}_i - \mathbf{v}_i\,\Delta t_{ij} - \tfrac{1}{2}\mathbf{g}\,\Delta t_{ij}^2\big) - \Delta\mathbf{p}_{ij}

并按累积循环中传播的协方差进行加权(这正是IMU noise model参数介入的地方)。

使其实用的两项改进

常见陷阱

对SLAM的意义

预积分是使基于优化的VIO实现实时性的那个单一思想:它将每对关键帧之间数百个高频测量值压缩成一个因子,同时仍能精确地被重新线性化。每一个现代紧耦合VIO系统都建立在它之上,理解 ΔRij\Delta\mathbf{R}_{ij} 是如何形成并进行偏置修正的,是理解任何VIO代码库最快的途径。

相关条目