《预积分总结与公式推导》学习笔记2

预积分噪声传播

上一篇博客的最后介绍了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=ij1(ΔR~k+1jTJr((ω~kbkg)Δt)ηkgdΔt) δ ϕ ⃗ i j − 1 → δ ϕ ⃗ i j \delta \vec { \phi } _ { i j - 1 } \rightarrow \delta \vec { \phi } _ { i j } δϕ ij1δϕ 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~jj1δϕ ij1+Jr(ω~j1bj1g)ηj1gdΔt

速度噪声递推式

δ v i j − 1 → δ v i j \delta \mathbf { v } _ { i j - 1 } \rightarrow \delta \mathbf { v } _ { i j } δvij1δ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=δvij1+ΔR~ij1ηj1adΔtΔR~ij1(f~j1bia)δϕ ij1Δt

位移噪声递推式

δ p i j − 1 → δ p i j \delta \mathbf { p } _ { i j - 1 } \rightarrow \delta \mathbf { p } _ { i j } δpij1δ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=δpij1+δvij1Δt21ΔR~ij1(f~j1bia)δϕ ij1Δt2+21ΔR~ij1ηj1adΔ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Δ=Aj1ηij1Δ+Bj1ηj1d其中转移矩阵
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] Aj1=ΔR~jj1ΔR~ij1(f~j1bia)Δt21ΔR~ij1(f~j1bia)Δt20IΔtl00IBj1=Jrj1Δt000ΔR~ij1Δt21ΔR~ij1Δt2只和 [ i , j − 1 ] [i,j-1] [i,j1]时间区间内的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 } ηj1d=[(ηj1gd)T(ηj1ad)T]T表示 j − 1 j-1 j1时刻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=Aj1Σij1Aj1T+Bj1ΣηBj1T

IMU偏置的微量更新对预积分测量值的影响

上述预积分计算中,假设偏置在积分区间内是恒定的。但是当偏置整体变化时(区间内偏置还是恒定不变,只是这个恒定值发生变化),如果重新计算预积分的话,将会十分耗时。因此进行对偏置更新的一阶线性化近似。

一阶线性化

假设偏置更新过程为
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^igbig+δbigb^iabia+δ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)ExpbgΔ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(ω~kbkg)

预积分旋转测量对偏置的雅克比

∂ Δ 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=ij1(Δ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=ij1(ΔRik(f~kbia)bgΔRikΔt)baΔvij=k=ij1(Δ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=ij1[bgΔvikΔt21ΔRik(f~kbia)bgΔRikΔt2]baΔpij=k=ij1[baΔvikΔt21Δ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ΔRijlog[(Δ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

你可能感兴趣的:(碎碎念)