大佬的世界,你不会懂,就像一行行公式,人家觉得很简单,你却要读很多遍,不过还好,我们从普通人的世界来解读VIO和预积分。
预积分
拿大佬的话来热场,本章要介绍一种在紧耦合系统中十分常见的IMU数据处理方法:预积分(Pre-integraion)[1]。与传统IMU的运动学积分不同,预积分可以将一段时间内的IMU测量数据累计起来,建立预积分测量,因而十分适合以关键帧为基础单元的激光或视觉SLAM系统。如今预积分已经成为诸多与IMU紧耦合的标准方法[2,3,4],下面我们来介绍其基本原理。
啥是预积分,刚开始觉得它是一套系统的统称,看完一遍觉得它是不是预先积分的含义(看完一堆推导和公式,又在质疑不会这么简单吧)。
这里通过高博的代码,得到了一些启发,写在这里和大家分享。
因为IMU中的零偏会不断变化,所以零偏更新后,需要再次重新积分,是不是计算量很大,所以预积分的作者为了解决这个问题,发明了预积分(它的目的就是想:能不能不反复计算),于是他定义了3个变量,如下:
Δ R i j = R i T R j = ∏ k = i j − 1 E x p ( ( ω k ~ − b g , k − η g d , k ) Δ t ) \Delta R_{ij} = {R_{i}^{T}}R_{j}=\prod_{k=i}^{j-1}{Exp(({\tilde{\omega_{k}}-b_{g,k}-\eta_{gd,k}})\Delta{t})} ΔRij=RiTRj=k=i∏j−1Exp((ωk~−bg,k−ηgd,k)Δt)
Δ v i , j = R i T ( v j − v i − g Δ t i , j ) = ∑ k = i j − 1 Δ R i k ( a k ~ − b a , k − η a d , k ) Δ t \Delta v_{i,j}=R_{i}^{T}(v_j-v_i-g{\Delta{t_{i,j}}})=\sum \limits_{k=i}^{j-1}{\Delta{R_{ik}({\tilde{a_k}-b_{a,k}-\eta_{ad,k}}){\Delta{t}}}} Δvi,j=RiT(vj−vi−gΔti,j)=k=i∑j−1ΔRik(ak~−ba,k−ηad,k)Δt
Δ p i , j = R i T ( p j − p i − v i Δ t i , j − 1 2 g Δ t i j 2 ) = ∑ k = i j − 1 [ Δ v i , k Δ t + 1 2 Δ R i , k ( a k ~ − b a , k − η a d , k ) Δ t 2 ] \Delta{p_{i,j}}=R_{i}^{T}(p_{j}-p_{i}-v_{i}{\Delta{t_{i,j}-\frac{1}{2}g{\Delta{t_{ij}^{2}}}}}) =\sum \limits_{k=i}^{j-1}{[\Delta{v_{i,k}\Delta{t}+\frac{1}{2}\Delta{R_{i,k}({\tilde{a_k}-b_{a,k}-\eta_{ad,k}}){\Delta{t^2}}}}]} Δpi,j=RiT(pj−pi−viΔti,j−21gΔtij2)=k=i∑j−1[Δvi,kΔt+21ΔRi,k(ak~−ba,k−ηad,k)Δt2]
是的,上面作者定义的3个变量就是你们心念念的==“预积分”==,请注意,预积分量并没有直接的物理含义,他的出现是为了解决因零偏的改变而要重新积分的问题,那它是怎么解决的?后面当零偏改变时,会有快捷方式更新这个3个变量。那你会问这3个变量更新后有啥用呢?它的作用是在紧耦合的非线性优化中用来构建残差方程的。程序不断的优化更新这个3个变量,来代替原先因为零偏改变而需要重新积分的过程。
作者定义了3个新的变量,完美的解决了这个问题,要只要作者怎么想到的,可能我也要想想?反正目前我们知道了预积分的定义,更新,优化这一整体思路。