VIO滑窗中的FEJ算法理解

在这里插入图片描述
参考高博PPT中的例子。
过程综述:
如上图所示,在t∈[0, k]时刻,滑窗中的状态向量为 X k X^k Xk,包含6个状态量: ξ i ,  i ∈ [ 1 , 6 ] \xi _i\text{, }i\in \left[ 1,6 \right] ξii[1,6]及其对应的观测量。在k时刻,对 X k X^k Xk进行边缘化处理,marg掉在 ξ 1 \xi_1 ξ1及其观测,在 k ′ k^{'} k时刻,加入新的观测和状态量 ξ 7 \xi_7 ξ7

FEJ算法的步骤:

1. marg发生前,优化过的滑窗都包含哪些信息?
在第k时刻,对 X k X^k Xk用最小二乘法优化完以后,要marg掉变量 ξ 1 \xi_1 ξ1,被marg的状态向量即 X k X^k Xk(此处PPT原文为 X m X_m Xm,但按照本人的思维惯性,认为 X m X_m Xm的含义应该表示的是marg完成以后去掉的变量及其对应测量,因此PPT原文中对应的 X m X_m Xm将在下文同改为 X k X^k Xk),剩余的变量 ξ i ,  i ∈ [ 2 , 5 ] \xi _i\text{, }i\in \left[ 2,5 \right] ξii[2,5]记为 X r X_r Xr
marg前,状态量 X X X以及对应的测量 S S S构建的最小二乘信息矩阵为: b ( k ) = [ b m m ( k ) b m r ( k ) ] = − ∑ ( i , j ) ∈ S J i j T ( k ) Σ i j − 1 r i j ( k ) b\left( k \right) =\left[ \begin{array}{c} b_{mm}\left( k \right)\\ b_{mr}\left( k \right)\\ \end{array} \right] =-\sum_{\left( i,j \right) \in S}{J_{ij}^{\mathrm{T}}\left( k \right) \varSigma _{ij}^{-1}r_{ij}}\left(k\right) b(k)=[bmm(k)bmr(k)]=(i,j)SJijT(k)Σij1rij(k) Λ ( k ) = [ Λ m m ( k ) Λ m r ( k ) Λ r m ( k ) Λ r r ( k ) ] = ∑ ( i , j ) ∈ S J i j T ( k ) Σ i j − 1 J i j ( k ) \varLambda \left( k \right) =\left[ \begin{matrix} \varLambda _{mm}\left( k \right)& \varLambda _{mr}\left( k \right)\\ \varLambda _{rm}\left( k \right)& \varLambda _{rr}\left( k \right)\\ \end{matrix} \right] =\sum_{\left( i,j \right) \in S}{J_{ij}^{\mathrm{T}}\left( k \right) \varSigma _{ij}^{-1}J_{ij}\left( k \right)} Λ(k)=[Λmm(k)Λrm(k)Λmr(k)Λrr(k)]=(i,j)SJijT(k)Σij1Jij(k)

2. marg发生后,留下的到底是什么信息?
marg发生后, X k X^k Xk向量中所有的变量以及对应的测量将被丢弃。同时,这部分信息通过marg操作传递给了保留状态量 X r X_r Xr。marg变量的信息跟 ξ 6 \xi_6 ξ6不相关。即 X k X^k Xk X r X_r Xr
注:本人更倾向于转换一词,因为 X k X^k Xk X r X_r Xr对应的信息矩阵的维数不同,比如本例中,marg前信息矩阵 Λ k ( k ) \varLambda^k \left( k \right) Λk(k)的维度为6×6,marg后信息矩阵 Λ p ( k ) \varLambda _p\left( k \right) Λp(k)的维度4×4,维度不同,无法传递。
b p ( k ) = b m r ( k ) − Λ r m ( k ) Λ m m − 1 ( k ) b m m ( k ) b_p\left( k \right) =b_{mr}\left( k \right) -\varLambda _{rm}\left( k \right) \varLambda _{mm}^{-1}\left( k \right) b_{mm}\left( k \right) bp(k)=bmr(k)Λrm(k)Λmm1(k)bmm(k) Λ p ( k ) = Λ r r ( k ) − Λ r m ( k ) Λ m m − 1 ( k ) Λ m r ( k ) \varLambda _p\left( k \right) =\varLambda _{rr}\left( k \right) -\varLambda _{rm}\left( k \right) \varLambda _{mm}^{-1}\left( k \right) \varLambda _{mr}\left( k \right) Λp(k)=Λrr(k)Λrm(k)Λmm1(k)Λmr(k)下标p表示prior,即这些信息将构建一个关于 X r X_r Xr的先验信息。
此处先验叫法的理解,marg完成后,滑窗中的状态量减少,后面还要补充新的变量和观测,相对于后面加入的变量和观测, X r X_r Xr就是新滑窗的先验。
先验
我们可以从 b p ( k ) b_p\left( k \right) bp(k) Λ p ( k ) \varLambda _p\left( k \right) Λp(k)中反解除一个残差 r p ( k ) r_p\left(k\right) rp(k)(如: r 23 r_{23} r23 r 24 r_{24} r24 r 34 r_{34} r34 r 45 r_{45} r45 r 35 r_{35} r35)和对应的雅克比矩阵 J p ( k ) J_p\left(k\right) Jp(k),但意义不大。需要注意的是,随着剩余状态量 X r ( k ) X_r\left(k\right) Xr(k)的后续不断优化变化(因为后面会加入新的变量和观测,组成新的变量关系),残差 r p ( k ) r_p\left(k\right) rp(k) b p ( k ) b_p\left( k \right) bp(k)也将跟着变化,但雅克比 J p ( k ) J_p\left(k\right) Jp(k)则固定不变了(原因在下文)。

3. 新测量信息和旧测量信息构建新的系统
k ′ k^{'} k时刻,加入新的变量 ξ 7 \xi_7 ξ7以及对应的观测(记作 X n X_n Xn),新的残差 r 27 r_{27} r27和先验信息 b p ( k ) b_p\left( k \right) bp(k) Λ p ( k ) \varLambda _p\left( k \right) Λp(k)以及残差 r 56 r_{56} r56构建新的最小二乘问题,开始新一轮的最小二乘优化:
b ( k ′ ) = Π T b p ( k ) − ∑ ( i , j ) ∈ S a ( k ′ ) J i j T ( k ′ ) Σ i j − 1 r i j ( k ′ ) b\left( k^{'} \right) =\varPi ^{\mathrm{T}}b_p\left( k \right) -\sum_{\left( i,j \right) \in S_a\left( k^{'} \right)}{J_{ij}^{\mathrm{T}}\left( k^{'} \right) \varSigma _{ij}^{-1}r_{ij}}\left( k^{'} \right) b(k)=ΠTbp(k)(i,j)Sa(k)JijT(k)Σij1rij(k) Λ ( k ′ ) = Π T Λ p ( k ) Π + ∑ ( i , j ) ∈ S a ( k ′ ) J i j T ( k ′ ) Σ i j − 1 J i j ( k ′ ) \varLambda \left( k^{'} \right) =\varPi ^{\mathrm{T}}\varLambda _p\left( k \right) \varPi +\sum_{\left( i,j \right) \in S_a\left( k^{'} \right)}{J_{ij}^{\mathrm{T}}\left( k^{'} \right) \varSigma _{ij}^{-1}J_{ij}\left( k^{'} \right)} Λ(k)=ΠTΛp(k)Π+(i,j)Sa(k)JijT(k)Σij1Jij(k)
其中 Π = [ I d i m X r 0 ] \varPi=\left[ \begin{matrix} I_{dimX_r}& 0\\ \end{matrix} \right] Π=[IdimXr0]用来将矩阵的维度进行扩张。 S a S_a Sa用来表示除被marg掉的测量意外的其他测量,如 r 56 r_{56} r56 r 27 r_{27} r27

出现的问题:
· 由于marg的变量以及对应的测量 X k X^k Xk已经被丢弃,先验信息 Λ p ( k ) \varLambda _p\left( k \right) Λp(k)中关于 X r X_r Xr的雅克比 J p ( k ) J_p\left(k\right) Jp(k)在后续求解中没法更新。
这句话个人理解: J p ( k ) J_p\left(k\right) Jp(k)= r p ( k ) r_p\left(k\right) rp(k)/ δ x \delta x δx,因为 X k X^k Xk已丢失,其最后一次迭代的 δ x \delta x δx也已不在(当然, x x x是知道的),因此即便残差 r p ( k ) r_p\left(k\right) rp(k)更新变化, J p ( k ) J_p\left(k\right) Jp(k)也无法再更新。
· 但 X r X_r Xr中的部分变量还跟其他残差由联系,如 ξ 2 \xi_2 ξ2 ξ 5 \xi_5 ξ5。这些残差如 r 27 r_{27} r27 ξ 2 \xi_2 ξ2的雅克比会随着 ξ 2 \xi_2 ξ2的迭代更新而不断在最新的线性化点处计算。
这句话个人理解:先验中关于 ξ 2 \xi_2 ξ2 ξ 5 \xi_5 ξ5的雅克比固定不变,在求解新的最小二乘时, r 27 r_{27} r27会对 ξ 2 \xi_2 ξ2进行迭代更新,其雅克比会在最新的线性化点处计算,而该线性化点与marg前 r 12 r_{12} r12 ξ 2 \xi_2 ξ2附近的线性化点不同,因此这是矛盾的

4. 信息矩阵的零空间变化
滑动窗口算法导致的问题
滑动窗口算法和优化的时候,信息矩阵如上式变成了两部分的和,且两部分计算雅克比时线性化点不同。这可能会导致信息矩阵的零空间发生变化,从而在求解时引入错误的信息。
比如:求解单目SLAM 进行Bundle Adjustment 优化时,问题对应的信息矩阵 Λ ( k ′ ) \varLambda \left( k^{'} \right) Λ(k)不满秩,对应的零空间为N, 用高斯牛顿求解时有
Λ δ x = b \varLambda \delta x=b Λδx=b Λ δ x + N δ x = b \varLambda \delta x+N\delta x=b Λδx+Nδx=b
即存在多个 δ x \delta x δx使得 N δ x = 0 \boldsymbol{N}\delta x=0 Nδx=0
若增量 δ x \delta x δx在零空间维度下变化,并不会改变我们的残差。这意味着系统可以有多个满足最小化损失函数(残差)的解 x x x

参考文献:

  1. 高翔、贺一家、崔华坤的手写VIO
  2. Tue-Cuong Dong-Si and Anastasios I Mourikis. “Consistency analysis for sliding-window visual odometry”. In: 2012 IEEE
    International Conference on Robotics and Automation. IEEE. 2012, pp. 5202–5209.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值