VINS-Mono之IMU预积分(Pre-integration)

1.前言

本博客基本上借鉴了崔华坤的《VINS论文推导及代码解析》和 VINS-Mono理论学习——IMU预积分 Pre-integration (Jacobian 协方差)的内容,因为确实写得太好了,然后有些地方加入自己一些理解。

VINS-MONO论文中的IV-B. IMU Pre-integration介绍了IMU预积分模型,Foster的倆篇论文对IMU预积分理论进行详细分析。

为什么需要对IMU进行预积分?
传统捷联惯性导航算法,在已知 k k 时刻下的IMU状态量(姿态、速度和位移)情况下,利用IMU测量的线加速度和角速度,通过积分预算得到 k + 1 k+1 时刻下的状态量。

然而在非线性优化的VIO中,各个节点的状态量都是估计值,当算法对这些状态量优化时,每次调整都需要在它们之间重新积分,导致绝对位姿被优化时对状态量进行重复积分。IMU预积分的提出使得优化算法可对IMU的相对测量进行处理,使它与绝对位姿解耦,或者只要线性运算就可以进行矫正

2. IMU模型

IMU测量值包括加速度计得到的 (测量值) 线加速度 a t ^ \hat{a_{t}} 和陀螺仪得到的角加速度 w ^ t \hat{w}_{t} 【论文式(1)】
a ^ t = a t + b a t + R w t g w + n a \hat{a}_{t}=a_{t}+b_{at}+R_{w}^{t}g^{w}+n_{a} w ^ t = w t + b w t + n w \hat{w}_{t}=w_{t}+b_{wt}+n_{w} 其中 t t 下标表示在IMU的体(body)坐标系下, a t a_{t} w t w_{t} 分别表示IMU真实的线加速度和角速度,并受到加速度偏置(bias) b a t b_{at} 、陀螺仪偏置 b w t b_{wt} 和附加噪声 n a n_a n n w n_{n_{w}} 的影响。计算得到的线加速度 a t ^ \hat{a_{t}} 是重力加速度和物体加速度的合矢量。
假设附加噪声为高斯噪声:
n a ( 0 , σ a 2 ) ,   n a ( 0 , σ w 2 ) n_{a}\sim(0,\sigma_{a}^{2}), \ n_{a}\sim(0,\sigma_{w}^{2}) 加速度计偏置和陀螺仪偏置被建模为随机游走,其导数为高斯分布:【论文式(2)】
b ˙ a t = n b a ,   b ˙ w t = n b w \dot{b}_{at}=n_{ba}, \ \dot{b}_{wt}=n_{bw} n b a N ( 0 , σ b a 2 ) ,   n b w N ( 0 , σ b w 2 ) n_{ba}\sim N(0,\sigma_{ba}^{2}), \ n_{bw} \sim N(0, \sigma_{bw}^{2})

3. 基于世界坐标系下的IMU运动模型

3.1 连续形式下的IMU运动模型

对于图像帧 k k k + 1 k+1 , IMU body坐标系对应为 b k b_{k} b k + 1 b_{k+1} 位置、速度和姿态状态值PVQ(Pose、Velocity、Quaternion)可以根据 [ t k , t k + 1 ] [t_{k}, t_{k+1}] 时间间隔内的IMU测量值,在世界坐标系下进行传递:【论文式(3)(4)】
p b k + 1 w = p b k w + v b k w Δ t k + t [ t k , t k + 1 ] ( R t w ( a ^ t b a t n a ) g w ) d t 2 p^{w}_{b_{k+1}}=p^{w}_{bk}+v_{b_{k}}^{w}\Delta t_{k}+\int \int_{t\in[t_{k}, t_{k+1}]}(R_{t}^{w}(\hat{a}_{t}-b_{at}-n_{a})-g^{w})dt^{2} v b k + 1 w = v b k w + t [ t k , t k + 1 ] ( R t w ( a ^ t b a t n a ) g w ) d t v_{b_{k+1}}^{w}=v_{bk}^{w}+\int_{t\in[t_{k},t_{k+1}]}(R^{w}_{t}(\hat{a}_{t}-b_{at}-n_{a})-g^{w})dt q b k + 1 w = q b k w t [ t k , t k + 1 ] 1 2 q t b k [ ( w ^ t b w t n w ) 0 ] d t = q b k t [ t k , t k + 1 ] 1 2 Ω ( w ^ t b w t n w ) q t b k d t (1) q_{b_{k+1}}^{w} = q_{b_{k}}^{w} \otimes \int_{t\in[t_{k}, t_{k+1}]} \frac{1}{2} q_{t}^{b_{k}} \otimes \begin{bmatrix} (\hat{w}_{t}-b_{wt}-n_{w})\\ 0 \end{bmatrix}dt \\ = q_{bk} \otimes \int_{t\in[t_{k}, t_{k+1}]} \frac{1}{2} \Omega (\hat{w}_{t}-b_{wt}-n_{w})q_{t}^{bk}dt \tag{1} Ω ( w ) = [ [ w ] × w w T 0 ] ,   [ w ] × = [ 0 w z w y w z 0 w x w y w x 0 ] \Omega(w)=\begin{bmatrix} -[w]_{\times} & w\\ -w^{T}& 0 \end{bmatrix}, \ [w]_{\times} = \begin{bmatrix} 0 & -w_{z} & w_{y}\\ w_{z} & 0 & -w_{x}\\ -w_{y} & w_{x} & 0 \end{bmatrix} 其中 Δ t k \Delta t_{k} [ t k , t k + 1 ] [t_{k}, t_{k+1}] 之间的时间间隔, R t w R_{t}^{w} 为t时刻IMU body坐标系到世界坐标系的旋转矩阵, q t b k q_{t}^{bk} 为用四元素表示的 t t 时刻从IMU body坐标系到 k k 时刻IMU body坐标系的旋转,这里的四元素实部在后,虚部在前。这里的 Ω ( w ) \Omega(w) 表示四元素右乘。


关于公式 ( 1 ) (1) 的推导,这里首先引入四元素左乘右乘及导数定理:
根据《视觉SLAM14讲》3.4.2 的四元数乘法,我们引入左乘和右乘符号如下:
q a q b = R ( q b ) q a = [ s b z b y b x b z b s b x b y b y b x b s b z b x b y b z b s b ] [ x a y a z a s a ] = L ( q a ) q b = [ s a z a y a x a z a s a x a y a y a x a s a z a x a y a z a s a ] [ x b y b z b s b ] q_{a} \otimes q_{b} = R(q_{b})q_{a} = \begin{bmatrix} s_{b} & z_{b} & -y_{b} & x_{b}\\ -z_{b} & s_{b} & x_{b} & y_{b}\\ y_{b}& -x_{b} & s_{b} & z_{b}\\ -x_{b}& -y_{b} & -z_{b} & s_{b} \end{bmatrix}\begin{bmatrix} x_{a}\\ y_{a}\\ z_{a}\\ s_{a} \end{bmatrix} \\ = L(q_{a})q_{b} = \begin{bmatrix} s_{a} & -z_{a} & y_{a} & x_{a}\\ z_{a} & s_{a} & -x_{a} & y_{a}\\ -y_{a}& x_{a} & s_{a} & z_{a}\\ -x_{a}& -y_{a} & -z_{a} & s_{a} \end{bmatrix}\begin{bmatrix} x_{b}\\ y_{b}\\ z_{b}\\ s_{b} \end{bmatrix}
为了简化,令 q = [ x   y   z   s ] = [ w   s ] q=[x \ y \ z \ s] = [w \ s] , 则有:
R ( q ) = Ω ( w ) + s I 4 × 4 = [ [ w ] × w w T 0 ] + s I 4 × 4 R(q) = \Omega(w)+sI_{4\times4} = \begin{bmatrix} -[w]_{\times} & w\\ -w^{T}& 0 \end{bmatrix} + sI_{4\times4} L ( q ) = Ψ ( w ) + s I 4 × 4 = [ [ w ] × w w T 0 ] + s I 4 × 4 L(q) = \Psi(w)+sI_{4\times4} = \begin{bmatrix} [w]_{\times} & w\\ -w^{T}& 0 \end{bmatrix} + sI_{4\times4}
对于四元素的求导,我们定义 q t q_{t} t t 时刻下的单位四元素, w w q t q_{t} 确定的角速度,则关于 q t q_{t} 的导数为: q ˙ t = 1 2 [ [ w ] × w w T 0 ] q t = 1 2 Ω ( w ) q t = 1 2 R ( [ w 0 ] ) q t = 1 2 q t [ w 0 ] \dot{q}_{t} = \frac{1}{2} \begin{bmatrix} -[w]_{\times} & w\\ -w^{T}& 0 \end{bmatrix}q_{t} = \frac{1}{2}\Omega(w)q_{t}=\frac{1}{2}R(\begin{bmatrix} w\\ 0 \end{bmatrix})q_{t} = \frac{1}{2}q_{t} \otimes \begin{bmatrix} w\\ 0 \end{bmatrix}

因此对于IMU连续形式下的旋转状态(用四元素表示)推导,我们有:
q b k + 1 w = q b k w q b k + 1 b k = q b k w t [ t k , t k + 1 ] q t b k ˙ d t = q b k w t [ t k , t k + 1 ] 1 2 q t b k [ w t b k 0 ] d t = q b k w t [ t k , t k + 1 ] 1 2 q t b k [ w t ^ b w t n w 0 ] d t = = q b k t [ t k , t k + 1 ] 1 2 Ω ( w ^ t b w t n w ) q t b k d t q_{b_{k+1}^{w}}=q_{b_{k}}^{w} \otimes q_{b_{k+1}}^{b_{k}} = q_{b_{k}}^{w} \otimes \int _{t\in [t_{k}, t_{k+1}]} \dot{q_{t}^{b_{k}}} dt = q_{bk}^{w} \otimes \int_{t\in[t_{k}, t_{k+1}]} \frac{1}{2} q_{t}^{b_{k}}\otimes \begin{bmatrix} w_{t}^{b_{k}}\\ 0\end{bmatrix}dt \\ =q_{b_{k}}^{w} \otimes \int_{t \in [t_{k}, t_{k+1}]} \frac{1}{2}q_{t}^{b_{k}} \otimes \begin{bmatrix} \hat{w_{t}}-b_{wt}-n_{w}\\ 0\end{bmatrix} dt \\ = = q_{bk} \otimes \int_{t\in[t_{k}, t_{k+1}]} \frac{1}{2} \Omega (\hat{w}_{t}-b_{wt}-n_{w})q_{t}^{bk}dt


3.2 离散形式下的IMU运动模型
3.2.1 欧拉法
使用欧拉法,即 k + 1 k+1 时刻的位姿是用第 k k 时刻的测量值 a ^ b k \hat{a}_{b_{k}} , w ^ b k \hat{w}_{b_{k}} 来计算的:
p b k + 1 w = p b k w + v b k w Δ t k + 1 2 a ^ b k δ t 2 p^{w}_{b_{k+1}} = p_{b_{k}}^{w} + v_{b_{k}}^{w} \Delta t_{k} + \frac{1}{2}\hat{a}_{b_{k}}\delta t^{2} v b k + 1 w = v b k w + a ^ b k δ t v_{b_{k+1}}^{w} = v_{b_{k}}^{w} + \hat{a}_{b_{k}} \delta t q b k + 1 w = q b k w [ 1 1 2 w ^ b k δ t ] q^{w}_{b_{k+1}} = q^{w}_{b_{k}} \otimes \begin{bmatrix} 1\\ \frac{1}{2}\hat{w}_{b_{k}}\delta t \end{bmatrix} 其中 a ^ b k = q b k w ( a b k b a k ) g w \hat{a}_{b_{k}} = q_{b_{k}}^{w}(a_{b_{k}}-b_{ak})-g^{w} w ^ b k = w b k b w k \hat{w}_{b_{k}} = w_{b_{k}}-b_{wk}

3.2.2 中值法
使用中值法,即 k + 1 k+1 时刻的位姿是用俩个时刻 k k k + 1 k+1 测量值 a a , w w 的平均值来计算的:
p b k + 1 w = p b k w + v b k w Δ t k + 1 2 a ^ ˉ t δ t 2 p^{w}_{b_{k+1}} = p_{b_{k}}^{w} + v_{b_{k}}^{w} \Delta t_{k} + \frac{1}{2}\bar{\hat{a}}_{t}\delta t^{2} v b k + 1 w = v b k w + a ^ ˉ t δ t v_{b_{k+1}}^{w} = v_{b_{k}}^{w} + \bar{\hat{a}}_{t} \delta t q b k + 1 w = q b k w [ 1 1 2 w ^ ˉ t δ t ] q^{w}_{b_{k+1}} = q^{w}_{b_{k}} \otimes \begin{bmatrix} 1\\ \frac{1}{2}\bar{\hat{w}}_{t}\delta t \end{bmatrix} 其中 a ^ ˉ t = 1 2 [ q b k w ( a b k b a k ) g w + q b k + 1 w ( a b k + 1 b a k + 1 ) g w ] \bar{\hat{a}}_{t} = \frac{1}{2}[q_{b_{k}}^{w}(a_{b_{k}}-b_{ak})-g^{w} + q_{b_{k+1}}^{w}(a_{b_{k+1}}-b_{ak+1})-g^{w}] w ^ ˉ t = 1 2 ( w b k b w k + w b k + 1 b w k + 1 ) \bar{\hat{w}}_{t} = \frac{1}{2}(w_{b_{k}}-b_{wk}+w_{b_{k+1}}-b_{wk+1}) 假设在短时间内加速度计和陀螺仪的偏置不变,则有: b a k = b a k + 1 ,   b w k = b w k + 1 b_{ak}=b_{ak+1}, \ b_{wk} = b_{wk+1}

4.IMU预积分 (基于第K帧IMU body坐标系下的运动模型)

通过公式 ( 1 ) (1) 可以看到,IMU 的积分需要依赖与第 k k 帧的 v v R R (基于世界坐标系下的),当我们在后端进行非线性优化时,需要迭代更新第 k k 帧的 v v R R ,这将导致我们需要根据每次迭代后的值重新进行积分,这将非常耗时。我们考虑将优化变量从第 k k 帧到第 k + 1 k+1 帧的 IMU 积分项中分离开来。

4.1 连续形式下的IMU运动模型
IMU预积分的思想就是将参考坐标系从世界坐标系 w w 调整为第 k k 帧的IMU body坐标系 b k b_{k} 下,可通过在等式俩端同时乘以 R w b k R^{b_{k}}_{w} 得到:【论文式[5][6]】
R w b k p b k + 1 w = R w b k ( p b k w + v b k w Δ t k 1 2 g w Δ t k 2 ) + α b k + 1 b k R^{b_{k}}_{w}p^{w}_{b_{k+1}}=R^{b_{k}}_{w}(p_{b_{k}}^{w}+v^{w}_{b_{k}}\Delta t_{k}-\frac{1}{2}g^{w}\Delta t_{k}^{2}) + \alpha^{b_{k}}_{b_{k+1}} R w b k v b k + 1 w = R w b k ( v b k w g w Δ t k ) + β b k + 1 b k R^{b_{k}}_{w}v_{b_{k+1}}^{w} = R_{w}^{b_{k}}(v_{b_{k}}^{w}-g^{w}\Delta t_{k})+\beta^{b_{k}}_{b_{k+1}} q w b k q b k + 1 w = γ b k + 1 b k q_{w}^{b_{k}} \otimes q_{b_{k+1}}^{w} = \gamma _{b_{k+1}} ^{b_{k}}
其中 α b k + 1 b k = t [ t k , t k + 1 ] R t b k ( a ^ t b a t n a ) d t 2 \alpha^{b_{k}}_{b_{k+1}} = \int \int _{t\in [t_{k}, t_{k+1}]} R_{t}^{b_{k}} (\hat{a}_{t}-b_{at}-n_{a}) dt^{2} β b k + 1 b k = t [ t k , t k + 1 ] R t b k ( a ^ t b a t n a ) d t \beta_{b_{k+1}}^{b_{k}} = \int _{t\in [t_{k}, t_{k+1}]}R_{t}^{b_{k}}(\hat{a}_{t}-b_{at}-n_{a})dt γ b k + 1 = t [ t k , t k + 1 ] 1 2 Ω ( w ^ t b w t n w ) γ t b k d t \gamma_{b_{k+1}} = \int _{t \in [t_{k}, t_{k+1}]} \frac{1}{2} \Omega(\hat{w}_{t}-b_{wt}-n_{w}) \gamma_{t}^{b_{k}}dt

此时的积分结果 α b k + 1 b k \alpha^{b_{k}}_{b_{k+1}} β b k + 1 b k \beta^{b_{k}}_{b_{k+1}} γ b k + 1 b k \gamma^{b_{k}}_{b_{k+1}} 可以理解为 b k + 1 b_{k+1} b k b_{k} 的相对运动量, b k b_{k} 的状态并不会对其产生影响,因此将其作为非线性优化变量,可以避免状态的重复传递

注意,这是在假设IMU偏置 b a b_{a} b w b_{w} 已经确定的情况下,实际上偏置也是需要优化的变量,那么每次迭代时, b a b_{a} b w b_{w} 发生改变,得重新根据公式求得所有帧之间的IMU预积分。

当偏置变换很小时,可以将 α b k + 1 b k \alpha_{b_{k+1}}^{b_{k}} β b k + 1 b k \beta_{b_{k+1}}^{b_{k}} γ b k + 1 b k \gamma_{b_{k+1}}^{b_{k}} 按其偏置的一阶近似来调整,否则就进行重新传递。【论文式[12]】(这部分只是抛出一个概念,后面会讲为什么这样写)
α b k + 1 b k α ^ b k + 1 b k + J b a α δ b a + J b w α δ b w \alpha_{b_{k+1}}^{b_{k}} \approx \hat{\alpha}_{b_{k+1}}^{b_{k}} + J_{b_{a}}^{ \alpha} \delta b_{a} + J_{b_{w}}^{ \alpha} \delta b_{w} β b k + 1 b k β ^ b k + 1 b k + J b a β δ b a + J b w β δ b w \beta_{b_{k+1}}^{b_{k}} \approx \hat{\beta}_{b_{k+1}}^{b_{k}} + J_{b_{a}}^{ \beta} \delta b_{a} + J_{b_{w}}^{ \beta} \delta b_{w} γ b k + 1 b k γ ^ b k + 1 b k [ 1 1 2 J b w γ δ b w ] \gamma_{b_{k+1}}^{b_{k}} \approx \hat{\gamma}_{b_{k+1}}^{b_{k}} \begin{bmatrix} 1 \\ \frac{1}{2}J_{b_{w}}^{\gamma}\delta b_{w} \end{bmatrix}

4.2 离散形式下的IMU运动模型
4.2.1 两帧之间 PVQ 增量的欧拉法离散形式
欧拉法给出第i时刻与第i+1时刻的预积分量估计值的关系: 【论文式[7]】
α ^ i + 1 b k = α ^ i b k + β ^ i b k δ t + 1 2 R ( γ ^ i b k ) ( a ^ i b a i ) δ t 2 \hat{\alpha}^{b_{k}}_{i+1} = \hat{\alpha}^{b_{k}}_{i} + \hat{\beta}_{i}^{b_{k}}\delta t + \frac{1}{2} R(\hat{\gamma}_{i}^{b_{k}})(\hat{a}_{i}-b_{ai})\delta t^{2} β ^ i + 1 b k = β ^ i b k + 1 2 R ( γ ^ i b k ) ( a ^ i b a i ) δ t \hat{\beta}^{b_{k}}_{i+1} = \hat{\beta}^{b_{k}}_{i} + \frac{1}{2} R(\hat{\gamma}_{i}^{b_{k}})(\hat{a}_{i}-b_{ai})\delta t γ ^ i + 1 b k = γ ^ i b k γ ^ i + 1 i = γ ^ i b k [ 1 1 2 ( w ^ i b w i ) δ t ] \hat{\gamma}^{b_{k}}_{i+1} = \hat{\gamma}^{b_{k}}_{i} \otimes \hat{\gamma}^{i}_{i+1} = \hat{\gamma}^{b_{k}}_{i} \otimes \begin{bmatrix} 1\\ \frac{1}{2}(\hat{w}_{i}-b_{wi})\delta t \end{bmatrix}
其中 i i [ t k , t k + 1 ] [t_{k}, t_{k+1}] 对应的离散时间

4.2.2 两帧之间 PVQ 增量的中值法离散形式
代码中采用的基于中值法的 IMU 预积分公式,这在Estimator::processIMU()函数 和IntegrationBase::push_back()函数中得以实现,注意这里积分出来的是前后两帧之间的 IMU 增量信息。
α ^ i + 1 b k = α ^ i b k + β ^ i b k δ t + 1 2 a ^ ˉ i δ t 2 \hat{\alpha}^{b_{k}}_{i+1} = \hat{\alpha}^{b_{k}}_{i} + \hat{\beta}_{i}^{b_{k}}\delta t+ \frac{1}{2} \bar{\hat{a}}_{i}\delta t^{2} β ^ i + 1 b k = β ^ i b k + 1 2 a ^ ˉ i δ t \hat{\beta}^{b_{k}}_{i+1} = \hat{\beta}^{b_{k}}_{i} + \frac{1}{2} \bar{\hat{a}}_{i}\delta t γ ^ i + 1 b k = γ ^ i b k γ ^ i + 1 i = γ ^ i b k [ 1 1 2 w ^ ˉ i δ t ] \hat{\gamma}^{b_{k}}_{i+1} = \hat{\gamma}^{b_{k}}_{i} \otimes \hat{\gamma}^{i}_{i+1} = \hat{\gamma}^{b_{k}}_{i} \otimes \begin{bmatrix} 1\\ \frac{1}{2} \bar{\hat{w}}_{i}\delta t \end{bmatrix} 其中 a ^ ˉ t = 1 2 [ q i ( a ^ i b i ) + q i + 1 ( a ^ i + 1 b a i ) ] \bar{\hat{a}}_{t} = \frac{1}{2}[q_{i}(\hat{a}_{i}-b_{i}) + q_{i+1}(\hat{a}_{i+1}-b_{ai})] w ^ ˉ i = 1 2 ( w ^ i + w ^ i + 1 ) b w i \bar{\hat{w}}_{i} = \frac{1}{2}(\hat w_{i} + \hat w_{i+1})-b_{wi}
初始状态下 α b k b k \alpha_{b_{k}}^{b_{k}} β b k b k \beta_{b_{k}}^{b_{k}} 为0, γ b k b k \gamma_{b_{k}}^{b_{k}} 为单位四元素, n a n_{a} n w n_{w} 被视为0, i i 为在 [ k , k + 1 ] [k, k+1] 中IMU测量值的某一时刻, δ t \delta t 为IMU测量值 i i i + 1 i+1 之间的时间间隔。

5. PVQ增量的误差递推方程、协方差及雅克比矩阵


5.1 一个IMU数据作为测量值的噪声协方差我们能够标定,一段时间内多个IMU数据积分形成的预积分量的协方差如何计算?

要推导预积分量的协方差,需要知道IMU噪声和预积分量之间的线性递推关系。

假设已知了相邻时刻误差的线性传递方程:
η i k + 1 = F k η i k + G k n k \eta_{ik+1} = F_{k}\eta_{ik} + G_{k}n_{k} 其中 η i k \eta_{ik} 为状态量误差且 η i k = [ δ θ i k , δ v i k , δ p i k ] \eta_{ik}=[\delta\theta_{ik}, \delta v_{ik}, \delta p_{ik}] n k n_{k} 为测量噪声且 n k = [ n k g , n k g ] n_{k}=[n_{k}^{g}, n_{k}^{g}]
可以看出误差的传递由倆部分组成:当前时刻的误差传递给下一时刻,当前时刻测量噪声传递给下一时刻

5.2 如何实现非线性方程的递推方程?
通常对于状态量之间的递推关系是非线性的方程如 x k + 1 = f ( x k , u k ) x_{k+1} = f(x_{k}, u_{k}) ,其中状态量 x x u u 为系统的输入量。

可以用俩种方法来推导状态误差传递的线性递推关系:

  • 一种是基于一阶泰勒展开的误差递推方程
  • 一种是基于误差随时间变化的递推方程 (是基于误差随时间变化来推导的)

5.2.1 基于一阶泰勒展开的误差递推方程


发布了141 篇原创文章 · 获赞 134 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/Hansry/article/details/104203448