上一篇博客的最后介绍了IMU预积分可以分解为预积分测量值减去预积分噪声值的形式,但是没有给出预积分噪声的传播方式(递推关系)。本节从这一点出发,首先定义预积分噪声为:
η i j Δ ≜ [ δ ϕ ⃗ i j T δ v i j T δ p i j T ] T \boldsymbol { \eta } _ { i j } ^ { \Delta } \triangleq \left[ \begin{array} { c c c } { \delta \vec { \phi } _ { i j } ^ { T } } & { \delta \mathbf { v } _ { i j } ^ { T } } & { \delta \mathbf { p } _ { i j } ^ { T } } \end{array} \right] ^ { T } ηijΔ≜[δϕijTδvijTδpijT]T其中, η i j Δ ∼ N ( 0 9 × 1 , Σ i j ) \boldsymbol { \eta } _ { i j } ^ { \Delta } \sim N \left( \mathbf { 0 } _ { 9 \times 1 } , \mathbf { \Sigma } _ { i j } \right) ηijΔ∼N(09×1,Σij)。下面分别对三个噪声项进行分析。
由于噪声属于小量,所以指数映射的乘积等于指数求和后的指数映射,即 Exp ( δ x 1 ) Exp ( δ x 2 ) ⋯ Exp ( δ x n ) = Exp ( δ x 1 + δ x 1 + ⋯ + δ x n ) \operatorname{Exp}(\delta x_1)\operatorname{Exp}(\delta x_2)\cdots\operatorname{Exp}(\delta x_n)=\operatorname{Exp}(\delta x_1+\delta x_1+\cdots+\delta x_n) Exp(δx1)Exp(δx2)⋯Exp(δxn)=Exp(δx1+δx1+⋯+δxn),所以
δ ϕ ⃗ i j = ∑ k = i j − 1 ( Δ R ~ k + 1 j T ⋅ J r ( ( ω ~ k − b k g ) Δ t ) ⋅ η k g d Δ t ) \delta \vec { \phi } _ { i j } = \sum _ { k = i } ^ { j - 1 } \left( \Delta \tilde { \mathbf { R } } _ { k + 1 j } ^ { T } \cdot \mathbf { J } _ { r } \left( \left( \tilde { \boldsymbol { \omega } } _ { k } - \mathbf { b } _ { k } ^ { g } \right) \Delta t \right) \cdot \boldsymbol { \eta } _ { k } ^ { g d } \Delta t \right) δϕij=k=i∑j−1(ΔR~k+1jT⋅Jr((ω~k−bkg)Δt)⋅ηkgdΔt) δ ϕ ⃗ i j − 1 → δ ϕ ⃗ i j \delta \vec { \phi } _ { i j - 1 } \rightarrow \delta \vec { \phi } _ { i j } δϕij−1→δϕij:
δ ϕ ⃗ i j = Δ R ~ j j − 1 δ ϕ ⃗ i j − 1 + J r ( ω ~ j − 1 − b j − 1 g ) η j − 1 g d Δ t \delta \vec { \phi } _ { i j } =\Delta \tilde { \mathbf { R } } _ { j j - 1 } \delta \vec { \phi } _ { i j - 1 } + \mathbf { J } _ { r } \left( \tilde { \boldsymbol { \omega } } _ { j-1 } - \mathbf { b } _ { j-1 } ^ { g } \right) \mathbf { \eta } _ { j - 1 } ^ { g d } \Delta t δϕij=ΔR~jj−1δϕij−1+Jr(ω~j−1−bj−1g)ηj−1gdΔt
δ v i j − 1 → δ v i j \delta \mathbf { v } _ { i j - 1 } \rightarrow \delta \mathbf { v } _ { i j } δvij−1→δvij:
δ v i j = δ v i j − 1 + Δ R ~ i j − 1 η j − 1 a d Δ t − Δ R ~ i j − 1 ⋅ ( f ~ j − 1 − b i a ) ∧ ⋅ δ ϕ ⃗ i j − 1 ⋅ Δ t \delta \mathbf { v } _ { i j } =\delta \mathbf { v } _ { i j - 1 } + \Delta \tilde { \mathbf { R } } _ { i j - 1 } \mathbf { \eta } _ { j - 1 } ^ { a d } \Delta t - \Delta \tilde { \mathbf { R } } _ { i j - 1 } \cdot \left( \tilde { \mathbf { f } } _ { j - 1 } - \mathbf { b } _ { i } ^ { a } \right) ^ { \wedge } \cdot \delta \vec { \phi } _ { i j - 1 } \cdot \Delta t δvij=δvij−1+ΔR~ij−1ηj−1adΔt−ΔR~ij−1⋅(f~j−1−bia)∧⋅δϕij−1⋅Δt
δ p i j − 1 → δ p i j \delta \mathbf { p } _ { i j - 1 } \rightarrow \delta \mathbf { p } _ { i j } δpij−1→δpij:
δ p i j = δ p i j − 1 + δ v i j − 1 Δ t − 1 2 Δ R ~ i j − 1 ⋅ ( f ~ j − 1 − b i a ) ∧ δ ϕ ⃗ i j − 1 Δ t 2 + 1 2 Δ R ~ i j − 1 η j − 1 a d Δ t 2 \delta \mathbf { p } _ { i j } =\delta \mathbf { p } _ { i j - 1 } + \delta \mathbf { v } _ { i j - 1 } \Delta t - \frac { 1 } { 2 } \Delta \tilde { \mathbf { R } } _ { i j - 1 } \cdot \left( \tilde { \mathbf { f } } _ { j - 1 } - \mathbf { b } _ { i } ^ { a } \right) ^ { \wedge } \delta \vec { \phi } _ { i j - 1 } \Delta t ^ { 2 } + \frac { 1 } { 2 } \Delta \tilde { \mathbf { R } } _ { i j - 1 } \mathbf { \eta } _ { j - 1 } ^ { a d } \Delta t ^ { 2 } δpij=δpij−1+δvij−1Δt−21ΔR~ij−1⋅(f~j−1−bia)∧δϕij−1Δt2+21ΔR~ij−1ηj−1adΔt2
将上述三部分携程矩阵和向量的乘积形式:
η i j Δ = A j − 1 η i j − 1 Δ + B j − 1 η j − 1 d \mathbf { \eta } _ { i j } ^ { \Delta } =\mathbf { A } _ { j - 1 }\mathbf { \eta } _ { i j - 1 } ^ { \Delta }+ \mathbf { B } _ { j - 1 }\boldsymbol { \eta } _ { j - 1 } ^ { d } ηijΔ=Aj−1ηij−1Δ+Bj−1ηj−1d其中转移矩阵
A j − 1 = [ Δ R ~ j j − 1 0 0 − Δ R ~ i j − 1 ⋅ ( f ~ j − 1 − b i a ) ∧ Δ t I 0 − 1 2 Δ R ~ i j − 1 ⋅ ( f ~ j − 1 − b i a ) ∧ Δ t 2 Δ t l I ] B j − 1 = [ J r j − 1 Δ t 0 0 Δ R ~ i j − 1 Δ t 0 1 2 Δ R ~ i j − 1 Δ t 2 ] \mathbf { A } _ { j - 1 }=\left[ \begin{array} { c c c } { \Delta \tilde { \mathbf { R } } _ { j j - 1 } } & { \mathbf { 0 } } & { \mathbf { 0 } } \\ { - \Delta \tilde { \mathbf { R } } _ { i j - 1 } \cdot \left( \tilde { \mathbf { f } } _ { j - 1 } - \mathbf { b } _ { i } ^ { a } \right) ^ { \wedge } \Delta t } & { \mathbf { I } } & { \mathbf { 0 } } \\ { - \frac { 1 } { 2 } \Delta \tilde { \mathbf { R } } _ { i j - 1 } \cdot \left( \tilde { \mathbf { f } } _ { j - 1 } - \mathbf { b } _ { i } ^ { a } \right) ^ { \wedge } \Delta t ^ { 2 } } & { \Delta t \mathbf { l } } & { \mathbf { I } } \end{array} \right]\\ \mathbf { B } _ { j - 1 }=\left[ \begin{array} { c c } { \mathbf { J } _ { r } ^ { j - 1 } \Delta t } & { \mathbf { 0 } } \\ { \mathbf { 0 } } & { \Delta \tilde { \mathbf { R } } _ { i j - 1 } \Delta t } \\ { \mathbf { 0 } } & { \frac { 1 } { 2 } \Delta \tilde { \mathbf { R } } _ { i j - 1 } \Delta t ^ { 2 } } \end{array} \right] Aj−1=⎣⎢⎢⎡ΔR~jj−1−ΔR~ij−1⋅(f~j−1−bia)∧Δt−21ΔR~ij−1⋅(f~j−1−bia)∧Δt20IΔtl00I⎦⎥⎥⎤Bj−1=⎣⎡Jrj−1Δt000ΔR~ij−1Δt21ΔR~ij−1Δt2⎦⎤只和 [ i , j − 1 ] [i,j-1] [i,j−1]时间区间内的IMU测量,偏置有关。 η j − 1 d = [ ( η j − 1 g d ) T ( η j − 1 a d ) T ] T \boldsymbol { \eta } _ { j-1 } ^ { d } = \left[ \left( \boldsymbol { \eta } _ { j-1 } ^ { g d } \right) ^ { T } \quad \left( \mathbf { \eta } _ { j-1 } ^ { a d } \right) ^ { T } \right] ^ { T } ηj−1d=[(ηj−1gd)T(ηj−1ad)T]T表示 j − 1 j-1 j−1时刻IMU的噪声向量,包括IMU角速度和加速度噪声。
从而,噪声的协方差矩阵递推公式如下:
Σ i j = A j − 1 Σ i j − 1 A j − 1 T + B j − 1 Σ η B j − 1 T \boldsymbol { \Sigma } _ { i j } = \mathbf { A } _ { j - 1 } \boldsymbol { \Sigma } _ { i j - 1 } \mathbf { A } _ { j - 1 } ^ { T } + \mathbf { B } _ { j - 1 } \mathbf { \Sigma } _ { \mathbf { \eta } } \mathbf { B } _ { j - 1 } ^ { T } Σij=Aj−1Σij−1Aj−1T+Bj−1ΣηBj−1T
上述预积分计算中,假设偏置在积分区间内是恒定的。但是当偏置整体变化时(区间内偏置还是恒定不变,只是这个恒定值发生变化),如果重新计算预积分的话,将会十分耗时。因此进行对偏置更新的一阶线性化近似。
假设偏置更新过程为
b ^ i g ← b ‾ i g + δ b i g b ^ i a ← b ‾ i a + δ b i a \hat { \mathbf { b } } _ { i } ^ { g } \leftarrow \overline { \mathbf { b } } _ { i } ^ { g } + \delta \mathbf { b } _ { i } ^ { g }\\ \hat { \mathbf { b } } _ { i } ^ { a } \leftarrow \overline { \mathbf { b } } _ { i } ^ { a } + \delta \mathbf { b } _ { i } ^ { a } b^ig←big+δbigb^ia←bia+δbia
偏置更新后,预积分测量值通过对偏置的一阶线性化进行更新:
Δ R ~ i j ( b ^ i g ) ≈ Δ R ~ i j ( b ‾ i g ) ⋅ Exp ( ∂ Δ R ~ i j ( b ‾ i g ) ∂ b ‾ g δ b i g ) Δ v ~ i j ( b ^ i g , b ^ i a ) ≈ Δ v ~ i j ( b ‾ i g , b ‾ i a ) + ∂ Δ v ~ i j ( b ‾ i g , b ‾ i a ) ∂ b ‾ g δ b i g + ∂ Δ v ~ i j ( b ‾ i g , b ‾ i a ) ∂ b ‾ a δ b i a Δ p ~ i j ( b ^ i g , b ^ i a ) ≈ Δ p ~ i j ( b ‾ i g , b ‾ i a ) + ∂ Δ p ~ i j ( b ‾ i g , b ‾ i a ) ∂ b ‾ g δ b i g + ∂ Δ p ~ i j ( b ‾ i g , b ‾ i a ) ∂ b ‾ a δ b i a \Delta \tilde { \mathbf { R } } _ { i j } \left( \hat { \mathbf { b } } _ { i } ^ { g } \right) \approx \Delta \tilde { \mathbf { R } } _ { i j } \left( \overline { \mathbf { b } } _ { i } ^ { g } \right) \cdot \operatorname { Exp } \left( \frac { \partial \Delta \tilde { \mathbf { R } } _ { i j } \left( \overline { \mathbf { b } } _ { i } ^ { g } \right) } { \partial \overline { \mathbf { b } } ^ { g } } \delta \mathbf { b } _ { i } ^ { g } \right)\\ \Delta \tilde { \mathbf { v } } _ { i j } \left( \hat { \mathbf { b } } _ { i } ^ { g } , \hat { \mathbf { b } } _ { i } ^ { a } \right) \approx \Delta \tilde { \mathbf { v } } _ { i j } \left( \overline { \mathbf { b } } _ { i } ^ { g } , \overline { \mathbf { b } } _ { i } ^ { a } \right) + \frac { \partial \Delta \tilde { \mathbf { v } } _ { i j } \left( \overline { \mathbf { b } } _ { i } ^ { g } , \overline { \mathbf { b } } _ { i } ^ { a } \right) } { \partial \overline { \mathbf { b } } ^ { g } } \delta \mathbf { b } _ { i } ^ { g } + \frac { \partial \Delta \tilde { \mathbf { v } } _ { i j } \left( \overline { \mathbf { b } } _ { i } ^ { g } , \overline { \mathbf { b } } _ { i } ^ { a } \right) } { \partial \overline { \mathbf { b } } ^ { a } } \delta \mathbf { b } _ { i } ^ { a }\\ \Delta \tilde { \mathbf { p } } _ { i j } \left( \hat { \mathbf { b } } _ { i } ^ { g } , \hat { \mathbf { b } } _ { i } ^ { a } \right) \approx \Delta \tilde { \mathbf { p } } _ { i j } \left( \overline { \mathbf { b } } _ { i } ^ { g } , \overline { \mathbf { b } } _ { i } ^ { a } \right) + \frac { \partial \Delta \tilde { \mathbf { p } } _ { i j } \left( \overline { \mathbf { b } } _ { i } ^ { g } , \overline { \mathbf { b } } _ { i } ^ { a } \right) } { \partial \overline { \mathbf { b } } ^ { g } } \delta \mathbf { b } _ { i } ^ { g } + \frac { \partial\Delta \tilde { \mathbf { p } } _ { i j } \left( \overline { \mathbf { b } } _ { i } ^ { g } , \overline { \mathbf { b } } _ { i } ^ { a } \right) } { \partial \overline { \mathbf { b } } ^ { a } } \delta \mathbf { b } _ { i } ^ { a } ΔR~ij(b^ig)≈ΔR~ij(big)⋅Exp⎝⎛∂bg∂ΔR~ij(big)δbig⎠⎞Δv~ij(b^ig,b^ia)≈Δv~ij(big,bia)+∂bg∂Δv~ij(big,bia)δbig+∂ba∂Δv~ij(big,bia)δbiaΔp~ij(b^ig,b^ia)≈Δp~ij(big,bia)+∂bg∂Δp~ij(big,bia)δbig+∂ba∂Δp~ij(big,bia)δbia
为了方便书写,简记
Δ R ^ i j ≜ Δ R ~ i j ( b ^ i g ) Δ R ‾ i j ≜ Δ R ~ i j ( b ‾ i g ) Δ v ^ i j ≜ Δ v ~ i j ( b ^ i g , b ^ i a ) Δ v ‾ i j ≜ Δ v ~ i j ( b ‾ i g , b ‾ i a ) Δ p ^ i j ≐ Δ p ~ i j ( b ^ i g , b ^ i a ) Δ p ‾ i j ≐ Δ p ~ i j ( b ‾ i g , b ‾ i a ) \Delta \hat { \mathbf { R } } _ { i j } \triangleq \Delta \tilde { \mathbf { R } } _ { i j } \left( \hat { \mathbf { b } } _ { i } ^ { g } \right) \quad \Delta \overline { \mathbf { R } } _ { i j } \triangleq \Delta \tilde { \mathbf { R } } _ { i j } \left(\overline { \mathbf { b } } _ { i } ^ { g } \right) \\ \Delta \hat { \mathbf {v } } _ { i j }\triangleq \Delta \tilde { \mathbf { v } } _ { i j } \left( \hat { \mathbf { b } } _ { i } ^ { g } , \hat { \mathbf { b } } _ { i } ^ { a } \right)\quad \Delta \overline { \mathbf { v } } _ { i j } \triangleq \Delta \tilde { \mathbf { v } } _ { i j } \left( \overline { \mathbf { b } } _ { i } ^ { g } , \overline { \mathbf { b } } _ { i } ^ { a } \right)\\ \Delta \hat { \mathbf { p } } _ { i j } \doteq \Delta \tilde { \mathbf { p } } _ { i j } \left( \hat { \mathbf { b } } _ { i } ^ { g } , \hat { \mathbf { b } } _ { i } ^ { a } \right)\quad \Delta \overline { \mathbf { p } } _ { i j } \doteq \Delta \tilde { \mathbf { p } } _ { i j } \left( \overline { \mathbf { b } } _ { i } ^ { g } , \overline { \mathbf { b } } _ { i } ^ { a } \right) ΔR^ij≜ΔR~ij(b^ig)ΔRij≜ΔR~ij(big)Δv^ij≜Δv~ij(b^ig,b^ia)Δvij≜Δv~ij(big,bia)Δp^ij≐Δp~ij(b^ig,b^ia)Δpij≐Δp~ij(big,bia)
J r k = J r ( ω ~ k − b k g ) \mathbf { J } _ { r } ^k= \mathbf { J } _ { r }\left( \tilde { \boldsymbol { \omega } } _ { k } - \mathbf { b } _ {k} ^ { g } \right) Jrk=Jr(ω~k−bkg)
∂ Δ R ‾ i j ∂ b ‾ g = ∑ k = i j − 1 ( − Δ R ‾ k + 1 j T J r k Δ t ) \frac { \partial \Delta \overline { \mathbf { R } } _ { i j } } { \partial \overline { \mathbf { b } } ^ { g } } = \sum _ { k = i } ^ { j - 1 } \left( - \Delta \overline { \mathbf { R } } _ { k + 1 j } ^ { T } \mathbf { J } _ { r } ^ { k } \Delta t \right) ∂bg∂ΔRij=k=i∑j−1(−ΔRk+1jTJrkΔt)
∂ Δ v ‾ i j ∂ b ‾ g = − ∑ k = i j − 1 ( Δ R ‾ i k ⋅ ( f ~ k − b ‾ i a ) ∧ ∂ Δ R ‾ i k ∂ b ‾ g Δ t ) ∂ Δ v ‾ i j ∂ b ‾ a = − ∑ k = i j − 1 ( Δ R ‾ i k Δ t ) \frac { \partial \Delta \overline { \mathbf { v } } _ { i j } } { \partial \overline { \mathbf { b } } ^ { g } } = - \sum _ { k = i } ^ { j - 1 } \left( \Delta \overline { \mathbf { R } } _ { i k } \cdot \left( \tilde { \mathbf { f } } _ { k } - \overline { \mathbf { b } } _ { i } ^ { a } \right) ^ { \wedge } \frac { \partial \Delta \overline { \mathbf { R } } _ { i k } } { \partial \overline { \mathbf { b } } ^ { g } } \Delta t \right)\\ \frac { \partial \Delta \overline { \mathbf { v } } _ { i j } } { \partial \overline { \mathbf { b } } ^ { a } } = - \sum _ { k = i } ^ { j - 1 } \left( \Delta \overline { \mathbf { R } } _ { i k } \Delta t \right) ∂bg∂Δvij=−k=i∑j−1(ΔRik⋅(f~k−bia)∧∂bg∂ΔRikΔt)∂ba∂Δvij=−k=i∑j−1(ΔRikΔt)
∂ Δ p ‾ i j ∂ b ‾ g = ∑ k = i j − 1 [ ∂ Δ v ‾ i k ∂ b ‾ g Δ t − 1 2 Δ R ‾ i k ⋅ ( f ~ k − b ‾ i a ) ∧ ∂ Δ R ‾ i k ∂ b ‾ g Δ t 2 ] ∂ Δ p ‾ i j ∂ b ‾ a = ∑ k = i j − 1 [ ∂ Δ v ‾ i k ∂ b ‾ a Δ t − 1 2 Δ R ‾ i k Δ t 2 ] \frac { \partial \Delta \overline { \mathbf { p } } _ { i j } } { \partial \overline { \mathbf { b } } ^ { g } } = \sum _ { k = i } ^ { j - 1 } \left[ \frac { \partial \Delta \overline { \mathbf { v } } _ { i k } } { \partial \overline { \mathbf { b } } ^ { g } } \Delta t - \frac { 1 } { 2 } \Delta \overline { \mathbf { R } } _ { i k } \cdot \left( \tilde { \mathbf { f } } _ { k } - \overline { \mathbf { b } } _ { i } ^ { a } \right) ^ { \wedge } \frac { \partial \Delta \overline { \mathbf { R } } _ { i k } } { \partial \overline { \mathbf { b } } ^ { g } } \Delta t ^ { 2 } \right]\\ \frac { \partial \Delta \overline { \mathbf { p } } _ { i j } } { \partial \overline { \mathbf { b } } ^ { a } } = \sum _ { k = i } ^ { j - 1 } \left[ \frac { \partial \Delta \overline { \mathbf { v } } _ { i k } } { \partial \overline { \mathbf { b } } ^ { a } } \Delta t - \frac { 1 } { 2 } \Delta \overline { \mathbf { R } } _ { i k } \Delta t ^ { 2 } \right] ∂bg∂Δpij=k=i∑j−1[∂bg∂ΔvikΔt−21ΔRik⋅(f~k−bia)∧∂bg∂ΔRikΔt2]∂ba∂Δpij=k=i∑j−1[∂ba∂ΔvikΔt−21ΔRikΔt2]
残差定义为理想值+偏置更新与测量值的差异:
r Δ R i j ≜ log [ ( Δ R ^ i j ) T Δ R i j ] r Δ v i j ≜ Δ v i j − Δ v ^ i j r Δ p i j ≜ Δ p i j − Δ p ^ i j \mathbf { r } _ { \Delta \mathbf { R } _ { i j } }\triangleq \log \left[ \left( \Delta \hat { \mathbf { R } } _ { i j } \right) ^ { T } \Delta \mathbf { R } _ { i j } \right]\\ \mathbf { r } _ { \Delta \mathbf { v } _ { i j } } \triangleq\Delta \mathbf { v } _ { i j } - \Delta \hat { \mathbf { v } } _ { i j }\\ \mathbf { r } _ { \Delta \mathbf { p } _ { ij } }\triangleq \Delta \mathbf { p } _ { i j } - \Delta \hat { \mathbf { p } } _ { i j } rΔRij≜log[(ΔR^ij)TΔRij]rΔvij≜Δvij−Δv^ijrΔpij≜Δpij−Δp^ij
系统状态定义为 i i i和 j j j时刻的旋转,位置和速度,以及区间内的偏置更新: R i , p i , v i , R j , p j , v j , δ b i g , δ b i a \mathbf { R } _ { i } , \mathbf { p } _ { i } , \mathbf { v } _ { i } , \mathbf { R } _ { j } , \mathbf { p } _ { j } , \mathbf { v } _ { j } , \delta \mathbf { b } _ { i } ^ { g } , \delta \mathbf { b } _ { i } ^ { a } Ri,pi,vi,Rj,pj,vj,δbig,δbia。根据残差定义,可以得到各残差对上述8项系统状态的雅克比矩阵,此处略去推导及结果展示,具体参考文献[1]。
[1] 邱笑晨,预积分总结与公式推导,2018