一文看尽4种SLAM中零空间的维护方法

文章目录

    • 写在前面
    • Reference
    • EKF-Base方法对零空间的维护
      • First-Estimate-Jacobian方法
        • 锦囊1. 不依赖IMU的运动方程,从头推导理想情况下的状态传递方程
        • 锦囊2. 使用理想的观测矩阵,从前到后推导能观性矩阵中的某一行,总结出零空间应该是怎么样的
        • 锦囊3. 对同一变量使用第一次预测出的值作为观测方程的线性化点——FEJ
      • Observability-Constraint 方法
        • 锦囊1. 根据IMU运动方程,推导误差状态转移方程的闭式解,并用该理想情况下的转移矩阵传递初始的零空间
        • 锦囊2. 根据状态转移矩阵,求解相邻时刻间零空间的传递情况
        • 锦囊3. 修改状态传递矩阵和观测矩阵,使之满足理想情况的约束
      • 小结
    • DSO对于零空间的维护
      • DSO为什么使用了FEJ还是用别的技术维护零空间?
      • DSO如何维护零空间
        • DSO对于零空间的建模
        • 增量方程对于零空间的正交化
        • 增量对于零空间扰动的正交化
        • 关于正交化的一点点说明和思考
    • VINS对于零空间的维护
    • 总结

 


写在前面

笔者最近在总结整个MSCKF的相关知识的时候,算是比较仔细的推导了与零空间相关的部分,放在之前笔者会认为这部分知识确实是比较难理解的部分,但是花了很多时间总结发现其实都还是有很强的相关性的,所以这里笔者算是总结一下这部分的内容,算是对近来知识的一个总结。

本文主要会涉及4种零空间的维护方法,分别是:

  1. First-Estimate-Jacobian,该方法也是用途最广的维护能观性的方法,可以适用于EKF-base和Graph-base的SLAM系统中;
  2. Observability-Constrainted 方法,该方法用途可能不多,但其有自身的优势在,且是开源的S-MSCKF中使用的方法;
  3. DSO中关于零空间维护的方法,其中不仅使用了FEJ技术,同时对增量方程和求解的增量都做了去除零空间变量的影响;
  4. VINS中关于零空间维护的方法,该方法主要是数值上的维护;

 


Reference

  1. https://zhuanlan.zhihu.com/p/304889273 笔者关于FEJ 的相关总结;
  2. https://zhuanlan.zhihu.com/p/328940891 笔者关于OC-KF的相关总结;
  3. https://blog.csdn.net/wubaobao1993/article/details/105106301 笔者关于DSO对于零空间维护的相关总结,该总结现下看来是不太对的;
  4. https://blog.csdn.net/wubaobao1993/article/details/108354488 笔者关于VINS对于零空间维护的相关总结;
  5. Consistency of EKF-Based Visual-Inertial Odometry. MSCKF能观性的分析论文;

 


EKF-Base方法对零空间的维护

Notation:

  1. 在以下推导中,所有的旋转均使用JPL表示法;
  2. 在以下推导中,变量均选择为旋转,位置和速度,即 x = [ G ℓ q G p ℓ G v ℓ ] T \mathrm{x}=\begin{bmatrix}{}^{\ell}_{G}q & {}^{G}p_{\ell} & {}^{G}v_{\ell}\end{bmatrix}^{T} x=[GqGpGv]T

从前有两位年轻人都致力于EKF-Base(本文更多的是针对MSCKF方法)方法中能观性的分析,但是都遇到了很大的问题。于是两人约定一起到山上去请教一位德高望重的老师。

老师:你二人既然都是研究能观性的分析,那么一定知道能观性分析的评价标准是能观性矩阵吧?
O = [ H 0 H 1 Φ 0 ⋮ H t Φ t − 1 … Φ 0 ] (1) \mathcal{O}= \begin{bmatrix} \mathrm{H}_0 \\ \mathrm{H}_{1}\Phi_{0} \\ \vdots \\ \mathrm{H}_{t}\Phi_{t-1} \dots\Phi_{0} \end{bmatrix} \tag{1} O=H0H1Φ0HtΦt1Φ0(1)
两位年轻人:自然是知道的,对于线性系统而言,系统的能观性主要由能观性矩阵反应。

老师:嗯,很好,既然如此,我就给二位一人三个锦囊,希望你二人能在各自的研究方向上都能悟道。

两位年轻人接过锦囊,开心的下山了。

 

First-Estimate-Jacobian方法

第一位年轻人下山之后便回到了家,继续开始对于能观性的分析,他迫不及待的打开第一个锦囊,上面写着一行字和如下的公式:

锦囊1. 不依赖IMU的运动方程,从头推导理想情况下的状态传递方程

{ G I t + 1 R = I t I t + 1 R G I t R G I t R = ( I − [ I t θ ~ ] × ) G I t R ^ { G v I t + 1 = G v I t + ( G I t R ) T ∫ t l t l + 1 ( I l I τ R ) T a m d τ + g Δ t G v I t = G v ^ I t + G v ~ I t G I t R = ( I − [ I t θ ~ ] × ) G I t R ^ { G p I t + 1 = G p I t + G v I t Δ t + ( G I t R ) T ∫ t l t l + 1 ∫ t l s ( I t I τ R ) T a m d τ d s + 1 2 g Δ t 2 G p I t = G p ^ I t + G p ~ I t G v I t = G v ^ I t + G v ~ I t G I t R = ( I − [ I t θ ~ ] × ) G I t R ^ (2) \begin{aligned} &\begin{cases} {}^{I_{t+1}}_{G}R&={}^{I_{t+1}}_{I_{t}}R \quad{}^{I_{t}}_{G}R \\ {}^{I_{t}}_{G}R&=(\mathbf{I}-\left[ {}^{I_{t}}\tilde{\theta} \right]_{\times}){}^{I_{t}}_{G}\hat{R} \end{cases}\\ &\begin{cases} {}^{G}v_{I_{t+1}} &= {}^{G}v_{I_t} + ({}^{I_{t}}_{G}R)^{T} \int_{t_{l}}^{t_{l+1}} ({}^{I_{\tau}}_{I_{l}}R)^{T} \mathbf{a_m} d \tau + g \Delta{t} \\ {}^{G}v_{I_{t}}&={}^{G}\hat{v}_{I_{t}}+{}^{G}\tilde{v}_{I_{t}} \\ {}^{I_{t}}_{G}R&=(\mathbf{I}-\left[ {}^{I_{t}}\tilde{\theta} \right]_{\times}){}^{I_{t}}_{G}\hat{R} \end{cases} \\ &\begin{cases} {}^{G}p_{I_{t+1}} &= {}^{G}p_{I_t} + {}^{G}v_{I_t}\Delta{t}+ ({}^{I_{t}}_{G}R)^{T} \int_{t_{l}}^{t_{l+1}} \int_{t_{l}}^{s} ({}^{I_{\tau}}_{I_{t}}R)^{T} \mathbf{a_m} d \tau d s + \frac{1}{2} g \Delta{t}^2 \\ {}^{G}p_{I_{t}}&={}^{G}\hat{p}_{I_{t}}+{}^{G}\tilde{p}_{I_{t}} \\ {}^{G}v_{I_{t}}&={}^{G}\hat{v}_{I_{t}}+{}^{G}\tilde{v}_{I_{t}} \\ {}^{I_{t}}_{G}R&=(\mathbf{I}-\left[ {}^{I_{t}}\tilde{\theta} \right]_{\times}){}^{I_{t}}_{G}\hat{R} \end{cases} \end{aligned} \tag{2} GIt+1RGItR=ItIt+1RGItR=(I[Itθ~]×)GItR^GvIt+1GvItGItR=GvIt+(GItR)Ttltl+1(IlIτR)Tamdτ+gΔt=Gv^It+Gv~It=(I[Itθ~]×)GItR^GpIt+1GpItGvItGItR=GpIt+GvItΔt+(GItR)Ttltl+1tls(ItIτR)Tamdτds+21gΔt2=Gp^It+Gp~It=Gv^It+Gv~It=(I[Itθ~]×)GItR^(2)

年轻人反复看了多遍老师的建议,于是经过一段时日,年轻人终于按照提示推出了新的状态传递方程:
[ G I t + 1 θ ~ G p ~ I t + 1 G v ~ I t + 1 ] = [ I t I t + 1 R 0 0 − ⌊ y t ⌋ × ( G I t R ) T I I Δ t − ⌊ s t ⌋ × ( G I t R ) T 0 I ] [ G I t θ ~ G p ~ I t G v ~ I t ] + [ I t I t + 1 θ ~ ( G I t R ) T [ y ~ l ] ( G I t R ) T [ s ~ l ] ] (3) \begin{bmatrix} {}^{I_{t+1}}_{G}\tilde{\theta} \\ {}^{G}\tilde{p}_{I_{t+1}} \\ {}^{G}\tilde{v}_{I_{t+1}} \end{bmatrix} = \begin{bmatrix} {}^{I_{t+1}}_{I_{t}}R & \mathbf{0} & \mathbf{0} \\ -\lfloor{\mathrm{y}}_{t}\rfloor_{\times}({}^{I_t}_{G}R)^{T} & \mathbf{I} & \mathbf{I}\Delta{t} \\ -\lfloor{\mathrm{s}}_{t}\rfloor_{\times}({}^{I_t}_{G}R)^{T} & \mathbf{0} & \mathbf{I} \end{bmatrix} \begin{bmatrix} {}^{I_{t}}_{G}\tilde{\theta} \\ {}^{G}\tilde{p}_{I_{t}} \\ {}^{G}\tilde{v}_{I_{t}} \end{bmatrix} + \begin{bmatrix} {}^{I_{t+1}}_{I_{t}}\tilde{\theta} \\ ({}^{I_t}_{G}R)^{T}\left[\tilde{\mathrm{y}}_{l}\right] \\ ({}^{I_t}_{G}R)^{T}\left[\tilde{\mathrm{s}}_{l}\right] \end{bmatrix} \tag{3} GIt+1θ~Gp~It+1Gv~It+1=ItIt+1Ryt×(GItR)Tst×(GItR)T0I00IΔtIGItθ~Gp~ItGv~It+ItIt+1θ~(GItR)T[y~l](GItR)T[s~l](3)
其中

  1. 所有的变量都是理想情况下的值,也就是并不涉及到时刻的概念(公式中的 t 和 t+1 更多的表示的递进关系,可以理解为当前的位姿经过IMU激励得到下一个位姿),更进一步的讲,某个变量在预测阶段被预测出来,那么由于预测阶段都是理想的,所以该预测值也是相当理想的,即真值;
  2. y t = G p t + 1 − G p t − G v t Δ t − 1 2 g Δ t 2 \mathrm{y}_{t}={}^{G}{p}_{t+1}-{}^{G}{p}_{t}-{}^{G}v_{t}\Delta{t}-\frac{1}{2}g \Delta{t}^2 yt=Gpt+1GptGvtΔt21gΔt2
  3. s t = G v t + 1 − G v t − g Δ t \mathrm{s}_{t}={}^{G}{v}_{t+1}-{}^{G}{v}_{t}-g\Delta{t} st=Gvt+1GvtgΔt

年轻人觉得很开心,觉得新的状态传递方程一定可以帮助他解开心中的迷惑。但是研究良久,年轻人还是一无所获,于是他又拿出第二个锦囊,想看看老师又给了他怎样的启示,只见上面写道:

 

锦囊2. 使用理想的观测矩阵,从前到后推导能观性矩阵中的某一行,总结出零空间应该是怎么样的

年轻人很聪明,他马上把注意力集中在理想情况下的过程,首先他写出了理想情况下的观测矩阵:
H ( I l ∣ l ) = J ( f j ∣ l ) I C R G I l R [ [ G p f j − G p I i ] × ( G I l R ) T ⏟ ∂ e / ∂ θ − I 3 × 3 ⏟ ∂ e / ∂ p 0 3 × 3 ⏟ ∂ e / ∂ v ] H ( f j ∣ l ) = J ( f j ∣ l ) I C R G I l R (4) \begin{aligned} H_{(I_l|l)}&=J_{(f_j|l)} \quad {}^{C}_{I}R \quad {}_{G}^{I_l}R\begin{bmatrix} \underbrace{\left[{}^{G}\mathrm{p}_{f_j}-{}^{G}\mathrm{p}_{I_i}\right]_{\times}({}_{G}^{I_l}R)^{T}}_{ {\partial e}/{\partial \theta}} & \underbrace{ -\mathbf{I}_{3\times3}}_{ {\partial e}/{\partial \mathrm{p}}} & \underbrace{ \mathbf{0}_{3\times3}}_{ {\partial e}/{\partial \mathrm{v}}}\end{bmatrix} \\ H_{(f_j|l)}&=J_{(f_j|l)} \quad {}^{C}_{I}R \quad {}_{G}^{I_l}R \end{aligned} \tag{4} H(Ill)H(fjl)=J(fjl)ICRGIlR[e/θ [GpfjGpIi]×(GIlR)Te/p I3×3e/v 03×3]=J(fjl)ICRGIlR(4)
将公式(4)中的两部分和在一起可得:
H f j ∣ t = J ( f j ∣ t ) I C R G I t R [ ⌊ G p f j − G p I i ⌋ × ( G I l R ) T − I 3 × 3 0 3 × 3 I 3 × 3 ] (5) \mathbf{H}_{f_j|t}=J_{(f_j|t)} \quad {}^{C}_{I}R \quad {}_{G}^{I_t}R \begin{bmatrix}\begin{array}{ccc|c} \lfloor{}^{G}\mathrm{p}_{f_j}-{}^{G}\mathrm{p}_{I_i}\rfloor_{\times}({}_{G}^{I_l}R)^{T} & -\mathbf{I}_{3\times3} & \mathbf{0}_{3\times3} & \mathbf{I}_{3\times3} \end{array}\end{bmatrix} \tag{5} Hfjt=J(fjt)ICRGItR[GpfjGpIi×(GIlR)TI3×303×3I3×3](5)

于是年轻人按照老师的建议,取出其中一行进行推导,如下:
O t = H t Φ ( t , t − 1 ) … Φ ( t 1 , t 0 ) (6) \mathcal{O}_{t}=\mathbf{H}_t\Phi(t,t-1)\dots\Phi(t_1,t_0) \tag{6} Ot=HtΦ(t,t1)Φ(t1,t0)(6)
将公式(3)和公式(5)带入到公式(6)中可得:
O t ∣ 3 × 3 = [ ⌊ G p f j − G p I t ⌋ × ( G I l R ) T − I 3 × 3 0 3 × 3 ] [ G I t R ( G I t − 1 R ) T 0 0 − ⌊ y t − 1 ⌋ × ( G I t − 1 R ) T I I Δ t − ⌊ s t − 1 ⌋ × ( G I t − 1 R ) T 0 I ] [ G I t − 1 R ( G I t − 2 R ) T 0 0 − ⌊ y t − 2 ⌋ × ( G I t − 2 R ) T I I Δ t − ⌊ s t − 2 ⌋ × ( G I t − 2 R ) T 0 I ] … [ G I t 1 R ( I G I t 0 R ) T 0 0 − ⌊ y t 0 ⌋ × ( G I t 0 R ) T I I Δ t − ⌊ s t 0 ⌋ × ( G I t 0 R ) T 0 I ] (7) \mathcal{O}_{t|3\times3}= \begin{bmatrix} \lfloor{}^{G}\mathrm{p}_{f_j}-{}^{G}\mathrm{p}_{I_t}\rfloor_{\times}({}_{G}^{I_l}R)^{T} & -\mathbf{I}_{3\times3} & \mathbf{0}_{3\times3} \end{bmatrix} \begin{bmatrix} {}^{I_{t}}_{G}R({}^{I_{t-1}}_{G}R)^{T} & \mathbf{0} & \mathbf{0} \\ -\lfloor{\mathrm{y}}_{t-1}\rfloor_{\times}({}^{I_{t-1}}_{G}R)^{T} & \mathbf{I} & \mathbf{I}\Delta{t} \\ -\lfloor{\mathrm{s}}_{t-1}\rfloor_{\times}({}^{I_{t-1}}_{G}R)^{T} & \mathbf{0} & \mathbf{I} \end{bmatrix} \\ \begin{bmatrix} {}^{I_{t-1}}_{G}R({}^{I_{t-2}}_{G}R)^{T} & \mathbf{0} & \mathbf{0} \\ -\lfloor{\mathrm{y}}_{t-2}\rfloor_{\times}({}^{I_{t-2}}_{G}R)^{T} & \mathbf{I} & \mathbf{I}\Delta{t} \\ -\lfloor{\mathrm{s}}_{t-2}\rfloor_{\times}({}^{I_{t-2}}_{G}R)^{T} & \mathbf{0} & \mathbf{I} \end{bmatrix} \dots \begin{bmatrix} {}^{I_{t_1}}_{G}R({}^{I_{t_0}}_{I_{G}}R)^{T} & \mathbf{0} & \mathbf{0} \\ -\lfloor{\mathrm{y}}_{t_0}\rfloor_{\times}({}^{I_{t_0}}_{G}R)^{T} & \mathbf{I} & \mathbf{I}\Delta{t} \\ -\lfloor{\mathrm{s}}_{t_0}\rfloor_{\times}({}^{I_{t_0}}_{G}R)^{T} & \mathbf{0} & \mathbf{I} \end{bmatrix} \tag{7} Ot3×3=[GpfjGpIt×(GIlR)TI3×303×3]GItR(GIt1R)Tyt1×(GIt1R)Tst1×(GIt1R)T0I00IΔtIGIt1R(GIt2R)Tyt2×(GIt2R)Tst2×(GIt2R)T0I00IΔtIGIt1R(IGIt0R)Tyt0×(GIt0R)Tst0×(GIt0R)T0I00IΔtI(7)

公式(7)中因为该部分仅涉及到IMU状态部分的分析,因此省去了观测的部分,同时省去了观测矩阵前面的公共部分。

在推导过程中,年轻人发现按照这样乘法下去,在每一次乘法之后都能得到一个很相似的形式,以前面两次乘积为例可以得到:
[ ⌊ G p f j − G p I t ⌋ × ( G I l R ) T − I 3 × 3 0 3 × 3 ] [ G I t R ( G I t − 1 R ) T 0 0 − ⌊ y t − 1 ⌋ × ( G I t − 1 R ) T I I Δ t t − 1 − ⌊ s t − 1 ⌋ × ( G I t − 1 R ) T 0 I ] [ G I t − 1 R ( G I t − 2 R ) T 0 0 − ⌊ y t − 2 ⌋ × ( G I t − 2 R ) T I I Δ t t − 1 − ⌊ s t − 2 ⌋ × ( G I t − 2 R ) T 0 I ] = [ ⌊ G p f j − G p I t − y t − 1 − s t − 1 Δ t ⌋ × ( G I t − 1 R ) T − I − I Δ t t − 1 ] T [ G I t − 1 R ( G I t − 2 R ) T 0 0 − ⌊ y t − 2 ⌋ × ( G I t − 2 R ) T I I Δ t t − 2 − ⌊ s t − 2 ⌋ × ( G I t − 2 R ) T 0 I ] = [ ⌊ G p f j − G p I t − 1 − G v t − 1 Δ t t − 1 − 1 2 g Δ t t − 1 2 ⌋ × ( G I t − 1 R ) T − I − I Δ t t − 1 ] T [ G I t − 1 R ( G I t − 2 R ) T 0 0 − ⌊ y t − 2 ⌋ × ( G I t − 2 R ) T I I Δ t t − 2 − ⌊ s t − 2 ⌋ × ( G I t − 2 R ) T 0 I ] = [ ⌊ G p f j − G p I t − 2 − G v t − 2 Δ t t − 2 t − 1 − 1 2 g ( Δ t t − 2 t − 1 ) 2 ⌋ × ( G I t − 2 R ) T − I − I Δ t t − 2 t − 1 ] T (8) \begin{aligned} &\begin{bmatrix} \lfloor{}^{G}\mathrm{p}_{f_j}-{}^{G}\mathrm{p}_{I_t}\rfloor_{\times}({}_{G}^{I_l}R)^{T} & -\mathbf{I}_{3\times3} & \mathbf{0}_{3\times3} \end{bmatrix} \begin{bmatrix} {}^{I_{t}}_{G}R({}^{I_{t-1}}_{G}R)^{T} & \mathbf{0} & \mathbf{0} \\ -\lfloor{\mathrm{y}}_{t-1}\rfloor_{\times}({}^{I_{t-1}}_{G}R)^{T} & \mathbf{I} & \mathbf{I}\Delta{t}_{t-1} \\ -\lfloor{\mathrm{s}}_{t-1}\rfloor_{\times}({}^{I_{t-1}}_{G}R)^{T} & \mathbf{0} & \mathbf{I} \end{bmatrix} \begin{bmatrix} {}^{I_{t-1}}_{G}R({}^{I_{t-2}}_{G}R)^{T} & \mathbf{0} & \mathbf{0} \\ -\lfloor{\mathrm{y}}_{t-2}\rfloor_{\times}({}^{I_{t-2}}_{G}R)^{T} & \mathbf{I} & \mathbf{I}\Delta{t}_{t-1} \\ -\lfloor{\mathrm{s}}_{t-2}\rfloor_{\times}({}^{I_{t-2}}_{G}R)^{T} & \mathbf{0} & \mathbf{I} \end{bmatrix} \\ &= \begin{bmatrix} \lfloor {}^{G}\mathrm{p}_{f_j}-{}^{G}\mathrm{p}_{I_t}-\mathrm{y}_{t-1}-\mathrm{s}_{t-1}\Delta{t} \rfloor_{\times}({}^{I_{t-1}}_{G}R)^{T} \\ -\mathbf{I} \\ -\mathbf{I}\Delta{t}_{t-1} \end{bmatrix}^{T}\begin{bmatrix} {}^{I_{t-1}}_{G}R({}^{I_{t-2}}_{G}R)^{T} & \mathbf{0} & \mathbf{0} \\ -\lfloor{\mathrm{y}}_{t-2}\rfloor_{\times}({}^{I_{t-2}}_{G}R)^{T} & \mathbf{I} & \mathbf{I}\Delta{t}_{t-2} \\ -\lfloor{\mathrm{s}}_{t-2}\rfloor_{\times}({}^{I_{t-2}}_{G}R)^{T} & \mathbf{0} & \mathbf{I} \end{bmatrix} \\ &= \begin{bmatrix} \lfloor {}^{G}\mathrm{p}_{f_j}-{}^{G}\mathrm{p}_{I_{t-1}}-{}^{G}\mathrm{v}_{t-1}\Delta{t}_{t-1}-\frac{1}{2}g\Delta{t}_{t-1}^{2} \rfloor_{\times}({}^{I_{t-1}}_{G}R)^{T} \\ -\mathbf{I} \\ -\mathbf{I}\Delta{t}_{t-1} \end{bmatrix}^{T} \begin{bmatrix} {}^{I_{t-1}}_{G}R({}^{I_{t-2}}_{G}R)^{T} & \mathbf{0} & \mathbf{0} \\ -\lfloor{\mathrm{y}}_{t-2}\rfloor_{\times}({}^{I_{t-2}}_{G}R)^{T} & \mathbf{I} & \mathbf{I}\Delta{t}_{t-2} \\ -\lfloor{\mathrm{s}}_{t-2}\rfloor_{\times}({}^{I_{t-2}}_{G}R)^{T} & \mathbf{0} & \mathbf{I} \end{bmatrix} \\ &= \begin{bmatrix} \lfloor {}^{G}\mathrm{p}_{f_j}-{}^{G}\mathrm{p}_{I_{t-2}}-{}^{G}\mathrm{v}_{t-2}\Delta{t}^{t-1}_{t-2}-\frac{1}{2}g(\Delta{t}^{t-1}_{t-2})^{2} \rfloor_{\times}({}^{I_{t-2}}_{G}R)^{T} \\ -\mathbf{I} \\ -\mathbf{I}\Delta{t}^{t-1}_{t-2} \end{bmatrix}^{T} \end{aligned} \tag{8} [GpfjGpIt×(GIlR)TI3×303×3]GItR(GIt1R)Tyt1×(GIt1R)Tst1×(GIt1R)T0I00IΔtt1IGIt1R(GIt2R)Tyt2×(GIt2R)Tst2×(GIt2R)T0I00IΔtt1I=GpfjGpItyt1st1Δt×(GIt1R)TIIΔtt1TGIt1R(GIt2R)Tyt2×(GIt2R)Tst2×(GIt2R)T0I00IΔtt2I=GpfjGpIt1Gvt1Δtt121gΔtt12×(GIt1R)TIIΔtt1TGIt1R(GIt2R)Tyt2×(GIt2R)Tst2×(GIt2R)T0I00IΔtt2I=GpfjGpIt2Gvt2Δtt2t121g(Δtt2t1)2×(GIt2R)TIIΔtt2t1T(8)
年轻人很快便总结出了规律,于是在 t0 时刻,整个乘积变作(这里把特征部分的元素给添加回来了):
O t = [ ⌊ G p f j − G p I t 0 − G v t 0 Δ t t 0 t − 1 − 1 2 g ( Δ t t 0 t − 1 ) 2 ⌋ × ( G I t 0 R ) T − I − I Δ t t 0 t − 1 I ] T (9) \mathcal{O}_{t}=\begin{bmatrix} \lfloor {}^{G}\mathrm{p}_{f_j}-{}^{G}\mathrm{p}_{I_{t_0}}-{}^{G}\mathrm{v}_{t_0}\Delta{t}^{t-1}_{t_0}-\frac{1}{2}g(\Delta{t}^{t-1}_{t_0})^{2} \rfloor_{\times}({}^{I_{t_0}}_{G}R)^{T} \\ -\mathbf{I} \\ -\mathbf{I}\Delta{t}^{t-1}_{t_0} \\ \hline \mathbf{I} \end{bmatrix}^{T} \tag{9} Ot=GpfjGpIt0Gvt0Δtt0t121g(Δtt0t1)2×(GIt0R)TIIΔtt0t1IT(9)
所以对应的零空间其实就是:
N t = [ 0 3 G I t 0 R g I 3 − [ G p t 0 ] × g 0 3 − [ G v t 0 ] × g I 3 − [ G p f j ] × g ] (10) \mathbf{N}_{t}= \begin{bmatrix} \mathbf{0}_{3} & {}^{I_{t_0}}_{G}\mathbf{R} \mathbf{g} \\ \mathbf{I}_{3} & -\left[^{G} \mathbf{p}_{t_0}\right]_\times{\mathbf{g}} \\ \mathbf{0}_{3} & -\left[^{G} \mathbf{v}_{t_0}\right]_\times{\mathbf{g}} \\ \hline \mathbf{I}_{3} & -\left[^{G} \mathbf{p}_{f_j}\right]_\times{\mathbf{g}} \\ \end{bmatrix} \tag{10} Nt=03I303I3GIt0Rg[Gpt0]×g[Gvt0]×g[Gpfj]×g(10)
除此之外,年轻人也在推导过程中总结出了一个很重要的规律:之所以乘积最后能满足公式(10)所示的零空间,其比较重要的原因在于在乘积过程中,所有的位姿和速度都用的是一个值(在理想情况下,都使用的是理想值),这保证了相同项之间可以互相抵消。

例如在 Φ ( t , t − 1 ) 11 = G I t R ( G I t − 1 R ) T \Phi(t,t-1)_{11}={}^{I_{t}}_{G}R({}^{I_{t-1}}_{G}R)^{T} Φ(t,t1)11=GItR(GIt1R)T Φ ( t − 1 , t − 2 ) 11 = G I t − 1 R ( G I t − 2 R ) T \Phi(t-1,t-2)_{11}={}^{I_{t-1}}_{G}R({}^{I_{t-2}}_{G}R)^{T} Φ(t1,t2)11=GIt1R(GIt2R)T,其中当 G I t − 1 R {}^{I_{t-1}}_{G}R GIt1R使用同样的值时才可以抵消,不至于引入其他项。

于是年轻人回想自己的推导过程,因为在自己的系统中,整个系统维护了一个滑动窗口,该窗口内记录了一段时间内的位姿数据,该数据会因为新观测而被更新,导致后续在构建观测矩阵时一直使用的是最新的值,也就是同样的位姿和速度,使用了两个时刻的值,这样的方法使得推导过程中增加好很多因为使用不同时刻值的扰动项!例如在时刻 α i + 1 \alpha_{i+1} αi+1 ,则对于第 ℓ \ell 个节点(假设该节点的预测时刻也为 ℓ \ell 时刻)来说形式如下:

O ℓ ( α i + 1 ) = M ℓ ( t ) [ Γ ℓ ( α i + 1 ) + Δ Γ ℓ ( α i + 1 ) − I 3 − Δ t ℓ I 3 I 3 ] (11) \mathcal{O}_{\ell}^{(\alpha_{i+1})}=\mathbf{M}_{\ell}^{(t)} \begin{bmatrix}\begin{array}{ccc|c} \mathbf{\Gamma}_{\ell}^{(\alpha_{i+1})}+\Delta \mathbf{\Gamma}_{\ell}^{(\alpha_{i+1})} &-\mathbf{I}_{3} & -\Delta t_{\ell} \mathbf{I}_{3} & \mathbf{I}_{3} \end{array}\end{bmatrix} \tag{11} O(αi+1)=M(t)[Γ(αi+1)+ΔΓ(αi+1)I3ΔtI3I3](11)

其中:

  1. Γ \Gamma Γ 的形式应与公式(9)中的理想情况相似:
    Γ ℓ ( α i + 1 ) = ⌊ G p ^ f i − G p ^ t 0 ( t 0 ) − G v ^ t 0 ( t 0 ) Δ t ℓ − 1 2 G g Δ t ℓ 2 × ⌋ ( G t 0 R ^ ( t 0 ) ) T \boldsymbol{\Gamma}_{\ell}^{(\alpha_{i+1})}=\left\lfloor^{G} \hat{\mathbf{p}}_{f_{i}}-{ }^{G} \hat{\mathbf{p}}_{t_0}^{(t_0)}-{ }^{G} \hat{\mathbf{v}}_{t_0}^{(t_0)} \Delta t_{\ell}-\frac{1}{2}{ }^{G} \mathbf{g} \Delta t_{\ell}^{2} \times\right\rfloor ({}^{t_0}_{G}\hat{\mathbf{R}}^{(t_0)})^{T} Γ(αi+1)=Gp^fiGp^t0(t0)Gv^t0(t0)Δt21GgΔt2×(Gt0R^(t0))T

  2. Δ Γ \Delta{\Gamma} ΔΓ 是由于不同时刻线性化造成的扰动项,形式如下:
    Δ Γ ℓ ( α i + 1 ) = ( ⌊ G p ^ f j − G p ^ ℓ ( α i ) ⌋ × E ‾ q + E ‾ p + ∑ j = t 1 ℓ − 1 ( ∑ s = t 1 j E v s Δ t + E p j + ∑ s = t 1 Φ v q ( x ^ I s + 1 ( s ) , x ^ I s ( s ) ) G s R ^ ( s ) E q s Δ t + Φ p q ( x ^ I j + 1 ( j ) , x ^ I j ( j ) ) G j R ^ ( j ) E q j ) ) ( G k R ^ ( k ) ) T \begin{aligned} \Delta \boldsymbol{\Gamma}_{\ell}^{(\alpha_{i+1})}=&\left(\left\lfloor^{G} \hat{\mathbf{p}}_{f_{j}}-{ }^{G} \hat{\mathbf{p}}_{\ell}^{(\alpha_{i})} \right\rfloor_{\times} \overline{\mathbf{E}}_{\mathbf{q}}+\overline{\mathbf{E}}_{\mathbf{p}}+\sum_{j=t_1}^{\ell-1}\left(\sum_{s=t_1}^{j} \mathbf{E}_{\mathbf{v}}^{s} \Delta t+\mathbf{E}_{\mathbf{p}}^{j}+\right.\right.\\ &\left.\left.\sum_{s=t_1} \boldsymbol{\Phi}_{\mathbf{v q}}\left(\hat{\mathbf{x}}_{I_{s+1}}^{(s)}, \hat{\mathbf{x}}_{I_{s}}^{(s)}\right) {}_{G}^{s}\hat{\mathbf{R}}^{(s)} \mathbf{E}_{\mathbf{q}}^{s} \Delta t+\Phi_{\mathbf{p q}}\left(\hat{\mathbf{x}}_{I_{j+1}}^{(j)}, \hat{\mathbf{x}}_{I_{j}}^{(j)}\right) {}^{j}_{G}\hat{\mathbf{R}}^{(j)} \mathbf{E}_{\mathbf{q}}^{j}\right)\right) ({}^{k}_{G}\hat{\mathbf{R}}^{(k)})^{T} \end{aligned} ΔΓ(αi+1)=(Gp^fjGp^(αi)×Eq+Ep+j=t11(s=t1jEvsΔt+Epj+s=t1Φvq(x^Is+1(s),x^Is(s))GsR^(s)EqsΔt+Φpq(x^Ij+1(j),x^Ij(j))GjR^(j)Eqj))(GkR^(k))T

    其中形如 X ^ s ( s ) \mathrm{\hat{X}}_{s}^{(s)} X^s(s)就是在 s 时刻第 s 个节点的值,可以看到其中有较多的同一节点在不同时刻的值,这些值导致了扰动项的产生,具体形式可以参考参考【5】中的公式。

  3. M \mathbf{M} M矩阵是一些公共项,这里不多做分析;

 

锦囊3. 对同一变量使用第一次预测出的值作为观测方程的线性化点——FEJ

年轻人从推导理想情况的步骤中得到启发,于是他尝试将同一变量使用同一时刻的值进行实际情况的推导,选择怎样的时刻呢?年轻人有三个选择,以 t 时刻产生的节点为例:

  • 该变量被 t-1 时刻的更新值预测出来的值—— x ^ t ( t − 1 ) \hat{\mathrm{x}}_{t}^{(t-1)} x^t(t1)
  • 该变量在 t 时刻更新之后的值—— x ^ t ( t ) \hat{\mathrm{x}}_{t}^{(t)} x^t(t)
  • 该变量在之后时刻被更新之后的值—— x ^ t ( α i ) \hat{\mathrm{x}}_{t}^{(\alpha_i)} x^t(αi)

最后年轻人选择了第一个,因为在能观性矩阵中涉及到状态转移矩阵 Φ ( x ^ t , x ^ t − 1 ) \Phi(\hat{\mathrm{x}}_{t},\hat{\mathrm{x}}_{t-1}) Φ(x^t,x^t1),此时对于 t t t 节点,仅有刚刚预测出来的值。

于是年轻人对公式做了如下的改动:

  1. 将所有的状态转移矩阵做如下变换:
    Φ ^ ( t , t − 1 ) = [ G I t R ^ ( t − 1 ) ( G I t − 1 R ^ ( t − 1 ) ) T 0 0 − ⌊ y ^ t ( t − 1 ) ⌋ × ( G I t − 1 R ^ ( t − 1 ) ) T I I Δ t − ⌊ s ^ t ( t − 1 ) ⌋ × ( G I t − 1 R ^ ( t − 1 ) ) T 0 I ] ⇒ Φ ^ ( t , t − 1 ) = [ G I t R ^ ( t − 1 ) ( G I t − 1 R ^ ( t − 2 ) ) T 0 0 − ⌊ y ^ t ( t − 1 ) ⌋ × ( G I t − 1 R ^ ( t − 2 ) ) T I I Δ t − ⌊ s ^ t ( t − 1 ) ⌋ × ( G I t − 1 R ^ ( t − 2 ) ) T 0 I ] (12) \begin{aligned} \hat{\Phi}(t, t-1) &= \begin{bmatrix} {}^{I_{t}}_{G}\hat{R}^{(t-1)}({}^{I_{t-1}}_{G}\hat{R}^{(t-1)})^{T} & \mathbf{0} & \mathbf{0} \\ -\lfloor{\mathrm{\hat{y}}}_{t}^{(t-1)}\rfloor_{\times}({}^{I_{t-1}}_{G}\hat{R}^{(t-1)})^{T} & \mathbf{I} & \mathbf{I}\Delta{t} \\ -\lfloor{\mathrm{\hat{s}}}_{t}^{(t-1)}\rfloor_{\times}({}^{I_{t-1}}_{G}\hat{R}^{(t-1)})^{T} & \mathbf{0} & \mathbf{I} \end{bmatrix} \\ \Rightarrow \hat{\Phi}(t, t-1) &= \begin{bmatrix} {}^{I_{t}}_{G}\hat{R}^{(t-1)}({}^{I_{t-1}}_{G}\hat{R}^{(t-2)})^{T} & \mathbf{0} & \mathbf{0} \\ -\lfloor{\mathrm{\hat{y}}}_{t}^{(t-1)}\rfloor_{\times}({}^{I_{t-1}}_{G}\hat{R}^{(t-2)})^{T} & \mathbf{I} & \mathbf{I}\Delta{t} \\ -\lfloor{\mathrm{\hat{s}}}_{t}^{(t-1)}\rfloor_{\times}({}^{I_{t-1}}_{G}\hat{R}^{(t-2)})^{T} & \mathbf{0} & \mathbf{I} \end{bmatrix} \end{aligned} \tag{12} Φ^(t,t1)Φ^(t,t1)=GItR^(t1)(GIt1R^(t1))Ty^t(t1)×(GIt1R^(t1))Ts^t(t1)×(GIt1R^(t1))T0I00IΔtI=GItR^(t1)(GIt1R^(t2))Ty^t(t1)×(GIt1R^(t2))Ts^t(t1)×(GIt1R^(t2))T0I00IΔtI(12)
    里面的 y ^ \hat{\mathrm{y}} y^ s ^ \hat{\mathrm{s}} s^ 中的相应项也要变为FEJ的形式;

  2. 将所有的观测矩阵做如下变换:
    H f j ∣ t = J ( f j ∣ t ) I C R G I t R ^ ( α i ) [ ⌊ G p f j − G p I t ( α i ) ⌋ × ( G I l R ^ ( α i ) ) T − I 3 × 3 0 3 × 3 I 3 × 3 ] ⇒ H f j ∣ t = J ( f j ∣ t ) I C R G I t R ^ ( t − 1 ) [ ⌊ G p f j − G p I t ( t − 1 ) ⌋ × ( G I l R ^ ( t − 1 ) ) T − I 3 × 3 0 3 × 3 I 3 × 3 ] (13) \begin{aligned} \mathbf{H}_{f_j|t}&=J_{(f_j|t)} \quad {}^{C}_{I}R \quad {}_{G}^{I_t}\hat{R}^{(\alpha_i)} \begin{bmatrix}\begin{array}{ccc|c} \lfloor{}^{G}\mathrm{p}_{f_j}-{}^{G}\mathrm{p}_{I_t}^{(\alpha_i)}\rfloor_{\times}({}_{G}^{I_l}\hat{R}^{(\alpha_i)})^{T} & -\mathbf{I}_{3\times3} & \mathbf{0}_{3\times3} & \mathbf{I}_{3\times3} \end{array}\end{bmatrix} \\ \Rightarrow \mathbf{H}_{f_j|t}&=J_{(f_j|t)} \quad {}^{C}_{I}R \quad {}_{G}^{I_t}\hat{R}^{(t-1)} \begin{bmatrix}\begin{array}{ccc|c} \lfloor{}^{G}\mathrm{p}_{f_j}-{}^{G}\mathrm{p}_{I_t}^{(t-1)}\rfloor_{\times}({}_{G}^{I_l}\hat{R}^{(t-1)})^{T} & -\mathbf{I}_{3\times3} & \mathbf{0}_{3\times3} & \mathbf{I}_{3\times3} \end{array}\end{bmatrix} \end{aligned} \tag{13} HfjtHfjt=J(fjt)ICRGItR^(αi)[GpfjGpIt(αi)×(GIlR^(αi))TI3×303×3I3×3]=J(fjt)ICRGItR^(t1)[GpfjGpIt(t1)×(GIlR^(t1))TI3×303×3I3×3](13)

将上述的改动带入到能观性矩阵中之后,果然消掉了所有的扰动项,得到了形如公式(10)的零空间:
N t ( α i ) = [ 0 3 G I t 0 R ^ ( t 0 ) g I 3 − [ G p t 0 ( t 0 ) ] × g 0 3 − [ G v t 0 ( t 0 ) ] × g I 3 − [ G p f j ] × g ] (14) \mathbf{N}_{t}^{(\alpha_i)}= \begin{bmatrix} \mathbf{0}_{3} & {}^{I_{t_0}}_{G}\mathbf{\hat{R}}^{(t_0)} \mathbf{g} \\ \mathbf{I}_{3} & -\left[^{G} \mathbf{p}_{t_0}^{(t_0)}\right]_\times{\mathbf{g}} \\ \mathbf{0}_{3} & -\left[^{G} \mathbf{v}_{t_0}^{(t_0)}\right]_\times{\mathbf{g}} \\ \hline \mathbf{I}_{3} & -\left[^{G} \mathbf{p}_{f_j}\right]_\times{\mathbf{g}} \\ \end{bmatrix} \tag{14} Nt(αi)=03I303I3GIt0R^(t0)g[Gpt0(t0)]×g[Gvt0(t0)]×g[Gpfj]×g(14)
年轻人很开心,他连忙打开老师给予的第三个锦囊,果然老师的提示与自己的想法是一致的。

以上的详细推导可以看参考【1】

 


Observability-Constraint 方法

时间回到第二个年轻人那里,他下了山只有,并没有直接回家,而是去参加了一个朋友主办的研讨会,会议上他了解到如何求解带约束的最优化问题,这个研讨会在后面帮助了他很多。第二个年轻人也从老师的建议中获取了很多;

锦囊1. 根据IMU运动方程,推导误差状态转移方程的闭式解,并用该理想情况下的转移矩阵传递初始的零空间

根据年轻人之前的研究,根据IMU的运动方程推导得到的误差状态微分方程为:
X ~ ˙ I M U = F X ~ I M U + G n I M U (15) \dot{\tilde{\mathbf{X}}}_{\mathrm{IMU}}=\mathbf{F} \tilde{\mathbf{X}}_{\mathrm{IMU}}+\mathbf{G} \mathbf{n}_{\mathrm{IMU}} \tag{15} X~˙IMU=FX~IMU+GnIMU(15)
其中:
F = [ − ⌊ ω ^ × ⌋ 0 3 × 3 0 3 × 3 0 3 × 3 0 3 I 3 × 3 − ( G I l R ) T ⌊ a m ^ × ⌋ 0 3 × 3 0 3 × 3 ] \mathbf{F}=\left[\begin{array}{ccc} -\lfloor\hat{\boldsymbol{\omega}} \times\rfloor & \mathbf{0}_{3 \times 3} & \mathbf{0}_{3 \times 3} \\ \mathbf{0}_{3 \times 3} & \mathbf{0}_{3} & \mathbf{I}_{3 \times 3} \\ -({}_{G}^{I_l}R)^{T}\lfloor\hat{\mathbf{a_m}} \times\rfloor & \mathbf{0}_{3 \times 3} & \mathbf{0}_{3 \times 3} \\ \end{array}\right] F=ω^×03×3(GIlR)Tam^×03×30303×303×3I3×303×3
这里误差驱动矩阵 G \mathbf{G} G不对零空间的分析有贡献,所以暂时就不分析了;

那么根据微分方程,可以得到状态转移方程为:
X ~ ( t l + 1 ) = Φ ( t l + 1 , t l ) X ~ ( t l ) + ∫ t l t l + 1 Φ ( t l + 1 , τ ) G ( τ ) n ( τ ) d τ (16) \boldsymbol{\tilde{\mathrm{X}}}\left(t_{l+1}\right)=\boldsymbol{\Phi}\left(t_{l+1}, t_{l}\right) \boldsymbol{\tilde{\mathrm{X}}}\left(t_{l}\right)+\int_{t_{l}}^{t_{l+1}} \boldsymbol{\Phi}\left(t_{l+1}, \tau\right) \boldsymbol{G}(\tau) \boldsymbol{n}(\tau) \mathrm{d} \tau \tag{16} X~(tl+1)=Φ(tl+1,tl)X~(tl)+tltl+1Φ(tl+1,τ)G(τ)n(τ)dτ(16)
其中:
{ Φ ˙ ( t l + 1 , t l ) = F ( t ) Φ ( t l + 1 , t l ) Φ ( t l + 1 , t l ) = exp ⁡ ( ∫ t l t l + 1 F ( t ) d t ) (17) \begin{cases} \dot{\boldsymbol{\Phi}}\left(t_{l+1}, t_{l}\right) = \boldsymbol{F}(t)\boldsymbol{\Phi}\left(t_{l+1}, t_{l}\right) \\ \boldsymbol{\Phi}\left(t_{l+1}, t_{l}\right)=\exp(\int_{t_{l}}^{t_{l+1}} \boldsymbol{F}(t) \mathrm{d} t) \end{cases} \tag{17} { Φ˙(tl+1,tl)=F(t)Φ(tl+1,tl)Φ(tl+1,tl)=exp(tltl+1F(t)dt)(17)
根据公式(17)可以列出如下公式:
[ Φ ˙ 11 ( t ) Φ ˙ 12 ( t ) Φ ˙ 13 ( t ) Φ ˙ 21 ( t ) Φ ˙ 22 ( t ) Φ ˙ 23 ( t ) Φ ˙ 31 ( t ) Φ ˙ 32 ( t ) Φ ˙ 33 ( t ) ] = [ − ⌊ ω ( t ) ⌋ × 0 3 × 3 0 3 × 3 0 3 × 3 0 3 I 3 × 3 − ( t G R ) T ⌊ a m ( t ) ⌋ × 0 3 × 3 0 3 × 3 ] [ Φ 11 ( t ) Φ 12 ( t ) Φ 13 ( t ) Φ 21 ( t ) Φ 22 ( t ) Φ 23 ( t ) Φ 31 ( t ) Φ 32 ( t ) Φ 33 ( t ) ] [ Φ 11 ( t 0 ) Φ 12 ( t 0 ) Φ 13 ( t 0 ) Φ 21 ( t 0 ) Φ 22 ( t 0 ) Φ 23 ( t 0 ) Φ 31 ( t 0 ) Φ 32 ( t 0 ) Φ 33 ( t 0 ) ] = [ I 0 0 0 I 0 0 0 I ] (18) \begin{aligned} \begin{bmatrix} \dot{\Phi}_{11}(t) & \dot{\Phi}_{12}(t) & \dot{\Phi}_{13}(t) \\ \dot{\Phi}_{21}(t) & \dot{\Phi}_{22}(t) & \dot{\Phi}_{23}(t) \\ \dot{\Phi}_{31}(t) & \dot{\Phi}_{32}(t) & \dot{\Phi}_{33}(t) \\ \end{bmatrix} &=\left[\begin{array}{ccc} -\lfloor{\boldsymbol{\omega}(t)}\rfloor_{\times} & \mathbf{0}_{3 \times 3} & \mathbf{0}_{3 \times 3} \\ \mathbf{0}_{3 \times 3} & \mathbf{0}_{3} & \mathbf{I}_{3 \times 3} \\ -({}^{G}_{t}R)^{T}\lfloor{\mathbf{a_m}(t)}\rfloor_{\times} & \mathbf{0}_{3 \times 3} & \mathbf{0}_{3 \times 3} \\ \end{array}\right] \begin{bmatrix} {\Phi}_{11}(t) & {\Phi}_{12}(t) & {\Phi}_{13}(t) \\ {\Phi}_{21}(t) & {\Phi}_{22}(t) & {\Phi}_{23}(t) \\ {\Phi}_{31}(t) & {\Phi}_{32}(t) & {\Phi}_{33}(t) \\ \end{bmatrix} \\ \begin{bmatrix} {\Phi}_{11}(t_0) & {\Phi}_{12}(t_0) & {\Phi}_{13}(t_0) \\ {\Phi}_{21}(t_0) & {\Phi}_{22}(t_0) & {\Phi}_{23}(t_0) \\ {\Phi}_{31}(t_0) & {\Phi}_{32}(t_0) & {\Phi}_{33}(t_0) \\ \end{bmatrix} &= \begin{bmatrix} \mathbf{I} & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \mathbf{I} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \mathbf{I} \\ \end{bmatrix} \end{aligned} \tag{18} Φ˙11(t)Φ˙21(t)Φ˙31(t)Φ˙12(t)Φ˙22(t)Φ˙32(t)Φ˙13(t)Φ˙23(t)Φ˙33(t)Φ11(t0)Φ21(t0)Φ31(t0)Φ12(t0)Φ22(t0)Φ32(t0)Φ13(t0)Φ23(t0)Φ33(t0)=ω(t)×03×3(tGR)Tam(t)×03×30303×303×3I3×303×3Φ11(t)Φ21(t)Φ31(t)Φ12(t)Φ22(t)Φ32(t)Φ13(t)Φ23(t)Φ33(t)=I000I000I(18)
求解上述的微分方程,易得:
Φ ( t

你可能感兴趣的:(SLAM,SLAM,零空间,FEJ,正交化,VINS-Mono)