VINS-Mono之后端非线性优化 (目标函数中视觉残差和IMU残差,及其对状态量的雅克比矩阵、协方差递推方程的推导)

1. 前言

之前看过崔华坤的《VINS论文推导及代码解析》还有深蓝学院的VIO课程,对VINS的后端非线性优化有了较为清晰的认识,但是一直没有时间整理写成笔记,最近看到Manni的博客VINS-Mono理论学习——后端非线性优化 概括得很不错,针对这三份资料还有自己的一些理解重新整理下,感谢优秀的大佬们提供的参考资料。

2. 非线性最小二乘

尽管非线性最小二乘是很常见的问题,可参考《SLAM14讲》第六章节,《多视图几何》附录6,乔治梅森大学Timothy Sauer的《数值分析》(忘记第几章了,书也没带回家,哭.jpg),在我之前的博客非线性最小二乘也对Guass-Newton和LM进行了介绍,这里简单回顾一下,由于VINS-Mono中在视觉重投影误差添加了鲁棒核函数,因此也整理下对 残差(也可以说是误差,一个意思,以下内容不分残差和误差) 添加鲁棒核函数对需要优化的状态量增量方程的影响。

2.1 Guass-Newton 和 Levenberg-Marquardt

对于最常见的最小二乘问题有: m i n x F ( x ) = m i n x 1 2 ∥ f ( x ) ∥ 2 2 \underset{x}{min}F(x) = \underset{x}{min}\frac{1}{2} \left \| f(x) \right \|_{2}^{2} xminF(x)=xmin21f(x)22 将残差写成组合向量的形式: f ( x ) = [ f 1 ( x ) ⋯ f m ( x ) ] f(x) = \begin{bmatrix} f_{1}(x) \\ \cdots \\ f_{m}(x)\end{bmatrix} f(x)=f1(x)fm(x), 则 F ( x ) = 1 2 ∥ f ( x ) ∥ 2 2 = 1 2 f T ( x ) f ( x ) = 1 2 ∑ i = 1 m ( f i ( x ) ) 2 F(x)=\frac{1}{2} \left \| f(x) \right \|_{2}^{2}=\frac{1}{2} f^{T}(x)f(x)=\frac{1}{2} \sum_{i=1}^{m}(f_{i}(x))^{2} F(x)=21f(x)22=21fT(x)f(x)=21i=1m(fi(x))2 同理,如果记 J i ( x ) = ∂ f i ( x ) ∂ x J_{i}(x) = \frac{\partial {f_{i}(x)}}{\partial x} Ji(x)=xfi(x), 则有: ∂ f ( x ) ∂ x = J m × n = [ J 1 ( x ) ⋯ J m ( x ) ]   ,   J i ( x ) 1 × n = [ ∂ f i ( x ) ∂ x 1   ∂ f i ( x ) ∂ x 2    ⋯   ∂ f i ( x ) ∂ x n ] \frac{\partial {f(x)}}{\partial x} = J^{m \times n} = \begin{bmatrix} J_{1}(x) \\ \cdots \\ J_{m}(x)\end{bmatrix}\ , \ J_{i}(x) ^{1 \times n} = \begin{bmatrix} \frac{\partial f_{i}(x)}{\partial x_{1}} \ \frac{\partial f_{i}(x)}{\partial x_{2}}\ \ \cdots \ \frac{\partial f_{i}(x)} {\partial x_{n}}\end{bmatrix} xf(x)=Jm×n=J1(x)Jm(x) , Ji(x)1×n=[x1fi(x) x2fi(x)   xnfi(x)]

对残差函数 f ( x ) f(x) f(x)进行一阶泰勒展开: f ( x + Δ x ) = f ( x ) + J Δ x f(x+\Delta x ) = f(x) + J \Delta x f(x+Δx)=f(x)+JΔx, 其中 J J J是残差函数 f f f的雅可比矩阵,代入损失函数(以下推导用 f f f代替 f ( x ) f(x) f(x)): F ( x + Δ x ) ≈ L ( Δ x ) = 1 2 ( f + J Δ x ) T ( f + J Δ x ) = 1 2 f T f + Δ x T J T f + 1 2 Δ x T J T J Δ x = F ( x ) + Δ x T J T f + 1 2 Δ x T J T J Δ x (1) F(x+\Delta x) \approx L(\Delta x) = \frac{1}{2} ( f + J \Delta x)^{T}(f + J \Delta x) = \frac{1}{2} f^{T}f + \Delta x^{T} J^{T} f + \frac{1}{2} \Delta x^{T}J^{T}J\Delta x \\ = F(x) + \Delta x^{T} J^{T} f + \frac{1}{2} \Delta x^{T}J^{T}J\Delta x \tag{1} F(x+Δx)L(Δx)=21(f+JΔx)T(f+JΔx)=21fTf+ΔxTJTf+21ΔxTJTJΔx=F(x)+ΔxTJTf+21ΔxTJTJΔx(1) 这样损失函数就近似成了一个二次函数,如果雅可比矩阵是满秩的(并不一定满秩),则 J T J J^{T}J JTJ正定,损失函数有最小值,且易得 F ′ ( x ) = ( J T f ) T ,   F ′ ′ ( x ) = J T J F'(x) = (J^{T}f)^{T}, \ F''(x) = J^{T}J F(x)=(JTf)T, F(x)=JTJ

Gauss-Newton Method:
令公式(1)的一阶导数等于0,得到 ( J T J ) Δ x g n = − J T f (J^{T}J) \Delta x_{gn} = -J^{T}f (JTJ)Δxgn=JTf 由于 H = J T J H= J^{T}J H=JTJ可能出现H矩阵奇异或者病态,此时高斯牛顿法增量的稳定性较差,导致算法不收敛。同时对于步长问题,若求出来的 Δ x g n Δx_{gn} Δxgn太长,则可能出现局部近似不够准确,无法保证迭代收敛。

Levenberg-Marquardt Method (LM):
在高斯牛顿法的基础上引入阻尼因子: ( J T J + μ I ) Δ x l m = − J T f ,     s . t .    μ ≥ 0 (J^{T}J + \mu I) \Delta x_{lm} = -J^{T}f, \ \ \ s.t. \ \ \mu \geq 0 (JTJ+μI)Δxlm=JTf,   s.t.  μ0 其中 μ \mu μ称为阻尼因子。

阻尼因子的作用: μ > 0 \mu > 0 μ>0保证 ( J T J + μ I ) (J^{T}J+\mu I) (JTJ+μI)正定,迭代朝着下降方向进行。
阻尼因子的初始化: μ 0 = τ   m a x { ( J T J ) i j } \mu_{0} = \tau \ max \begin{Bmatrix} (J^{T}J)_{ij} \end{Bmatrix} μ0=τ max{ (JTJ)ij}, 按需设定 τ ∈ [ 1 0 − 8 , 1 ] \tau \in [10^{-8}, 1] τ[108,1]
阻尼因子 μ \mu μ的更新策略:

  • 如果 Δ x → F ( x ) ↑ \Delta x \rightarrow F(x) \uparrow ΔxF(x),则 μ ↑ → Δ x ↓ \mu \uparrow \rightarrow \Delta x \downarrow μΔx,增大阻尼减小步长,拒绝本次迭代。
  • 如果 Δ x → F ( x ) ↓ \Delta x \rightarrow F(x) \downarrow ΔxF(x),则 μ ↓ → Δ x ↑ \mu \downarrow \rightarrow \Delta x \uparrow μΔx,减小阻尼增加步长,减少迭代次数。

Δ x \Delta x Δx和阻尼因子 μ \mu μ的关系:
阻尼因子的更新由比例因子来确定:
ρ = F ( x ) − F ( x + Δ x l m ) L ( 0 ) − L ( Δ x l m ) = 实 际 下 降 近 似 下 降 \rho = \frac{F(x) - F(x+\Delta x_{lm})}{L(0) - L(\Delta x_{lm})} = \frac{ {实际下降}}{近似下降} ρ=L(0)L(Δxlm)F(x)F(x+Δxlm)= 其中 L ( 0 ) − L ( Δ x l m ) = − Δ x l m T J T f − 1 2 Δ x l m T J T J Δ x = − 1 2 Δ x l m T ( 2 J T f + ( J T J + μ I − μ I ) Δ x l m ) = − 1 2 Δ x l m T ( J T f − μ I Δ x l m ) = 1 2 Δ x l m T ( μ Δ x l m − J T f ) L(0)-L(\Delta x_{lm}) = - \Delta x_{lm}^{T} J^{T} f - \frac{1}{2} \Delta x_{lm}^{T}J^{T}J\Delta x \\ =-\frac{1}{2} \Delta x_{lm}^{T} (2 J^{T}f + (J^{T}J+\mu I - \mu I) \Delta x_{lm}) \\ = -\frac{1}{2} \Delta x_{lm}^{T} ( J^{T}f - \mu I\Delta x_{lm}) \\ = \frac{1}{2} \Delta x_{lm}^{T}(\mu \Delta x_{lm} - J^{T}f) L(0)L(Δxlm)=ΔxlmTJTf21ΔxlmTJTJΔx=21ΔxlmT(2JTf+(JTJ+μIμI)Δxlm)=21ΔxlmT(JTfμIΔxlm)=21ΔxlmT(μΔxlmJTf) 首先比例因子分母始终大于 0 0 0,因为是沿负梯度方向进行的 Δ x l m \Delta x_{lm} Δxlm的调整,故 L ( 0 ) > L ( Δ x l m ) L(0) > L(\Delta x_{lm}) L(0)>L(Δxlm),如果:

  • ρ < 0 \rho<0 ρ<0,则 F ( x ) ↑ F(x) \uparrow F(x),应该 μ ↑ → Δ x ↓ \mu \uparrow \rightarrow \Delta x \downarrow μΔx,增大阻尼减小步长。
  • 如果 ρ > 0 \rho>0 ρ>0且比较大,减小 μ \mu μ,让LM接近Gauss-Newton使得系统更快收敛。
  • 反之,如果是比较小的正数,则增大阻尼 μ \mu μ,缩小迭代步长。

2.2 鲁棒核函数下状态量增量方程的构建

由上得 F ( x ) = 1 2 ∥ f ( x ) ∥ 2 2 = 1 2 f T ( x ) f ( x ) = 1 2 ∑ i = 1 m ( f i ( x ) ) 2 F(x)=\frac{1}{2} \left \| f(x) \right \|_{2}^{2}=\frac{1}{2} f^{T}(x)f(x)=\frac{1}{2} \sum_{i=1}^{m}(f_{i}(x))^{2} F(x)=21f(x)22=21fT(x)f(x)=21i=1m(fi(x))2 鲁棒核函数直接作用于残差 f i ( x ) f_{i}(x) fi(x)上,则有
m i n x 1 2 ∑ i ρ ( ∥ f i ( x ) ∥ 2 2 ) = m i n x 1 2 ∑ i ρ ( f i ( x ) 2 ) \underset{x}{min} \frac{1}{2} \sum_{i} \rho (\left \| f_{i}(x) \right \|_{2}^{2}) = \underset{x}{min} \frac{1}{2} \sum_{i} \rho (f_{i}(x) ^{2}) xmin21iρ(fi(x)22)=xmin21iρ(fi(x)2) 将误差的平方项记作 s i = ∥ f i ( x ) ∥ 2 2 s_{i}=\left \|f_{i}(x) \right \|_{2}^{2} si=fi(x)22,对鲁棒核误差函数进行二阶泰勒展开有:
ρ ( s + Δ s ) ≈ ρ ( s ) + ρ ′ ( s ) Δ s + 1 2 ρ ′ ′ ( s ) Δ 2 s (2) \rho(s+\Delta s) \approx \rho(s) + \rho'(s) \Delta s + \frac{1}{2} \rho '' (s) \Delta^{2} s \tag{2} ρ(s+Δs)ρ(s)+ρ(s)Δs+21ρ(s)Δ2s(2)


对于 Δ s \Delta s Δs的计算,我们有:
Δ s = ∥ f i ( x + Δ x ) ∥ 2 2 − ∥ f i ( x ) ∥ 2 2 ≈ ∥ f i ( x ) + J i Δ x ∥ 2 2 − ∥ f i ( x ) ∥ 2 2 = ( f i ( x ) + J i Δ x ) 2 − f i 2 ( x ) = 2 f i T ( x ) J i Δ x + ( Δ x ) T J i T J i Δ x (3.1) \Delta s = \left \| f_{i}(x + \Delta x) \right \|^{2}_{2} - \left \| f_{i}(x) \right \|^{2}_{2} \approx \left \| f_{i}(x) + J_{i} \Delta x \right \|^{2}_{2} - \left \| f_{i}(x) \right \|_{2}^{2} \\ = (f_{i}(x) + J_{i} \Delta x)^{2} - f_{i}^{2}(x) = 2f^{T}_{i}(x)J_{i}\Delta x + (\Delta x)^{T}J^{T}_{i}J_{i}\Delta x \tag{3.1} Δs=fi(x+Δx)22fi(x)22fi(x)+JiΔx22fi(x)22=(fi(x)+JiΔx)2fi2(x)=2fiT(x)JiΔx+(Δx)TJiTJiΔx(3.1)
若误差项为 Σ \Sigma Σ范数(表征为误差项的协方差矩阵,协方差为对称矩阵,故协方差的逆(称为信息矩阵)亦为对称矩阵)而非二范数,我们有:
Δ s = ∥ f i ( x + Δ x ) ∥ Σ i 2 − ∥ f i ( x ) ∥ Σ i 2 ≈ ∥ f i ( x ) + J i Δ x ∥ Σ i 2 − ∥ f i ( x ) ∥ Σ i 2 = ( f i ( x ) + J i Δ x ) T Σ i − 1 ( f i ( x ) + J i Δ x ) − f i T ( x ) Σ i − 1 f i ( x ) = ( Σ i − T f i ( x ) ) T J i Δ x + ( J i Δ x ) T Σ i − 1 f i ( x ) + Δ x T J i T Σ i − 1 J i Δ x = 2 f i T ( x ) Σ i − 1 J i Δ x + Δ x T J i T Σ i − 1 J i Δ x (3.2) \Delta s = \left \| f_{i}(x + \Delta x) \right \|^{2}_{\Sigma_{i}} - \left \| f_{i}(x) \right \|^{2}_{\Sigma_{i}} \approx \left \| f_{i}(x) + J_{i} \Delta x \right \|^{2}_{\Sigma_{i}} - \left \| f_{i}(x) \right \|_{\Sigma_{i}}^{2} \\ = (f_{i}(x) + J_{i} \Delta x)^{T}\Sigma_{i}^{-1}(f_{i}(x) + J_{i} \Delta x) - f_{i}^{T}(x)\Sigma_{i}^{-1}f_{i}(x) \\ = (\Sigma_{i}^{-T}f_{i}(x))^{T}J_{i}\Delta x + (J_{i}\Delta x)^{T}\Sigma_{i}^{-1}f_{i}(x) + \Delta x^{T}J_{i}^{T}\Sigma^{-1}_{i}J_{i}\Delta x \\ = 2f^{T}_{i}(x)\Sigma_{i}^{-1}J_{i}\Delta x + \Delta x^{T}J_{i}^{T}\Sigma^{-1}_{i}J_{i}\Delta x \tag{3.2} Δs=fi(x+Δx)Σi2fi(x)Σi2fi(x)+JiΔxΣi2fi(x)Σi2=(fi(x)+JiΔx)TΣi1(fi(x)+JiΔx)fiT(x)Σi1fi(x)=(ΣiTfi(x))TJiΔx+(JiΔx)TΣi1fi(x)+ΔxTJiTΣi1JiΔx=2fiT(x)Σi1JiΔx+ΔxTJiTΣi1JiΔx(3.2)


将公式 ( 3 ) (3) (3)代入公式 ( 2 ) (2) (2),令 f i ( x ) = f i f_{i} (x)= f_{i} fi(x)=fi ρ = ρ ( s ) \rho = \rho(s) ρ=ρ(s),可得
1 2 ρ ( s + Δ s ) ≈ 1 2 ( ρ ( s ) + ρ ′ ( s ) Δ s + 1 2 ρ ′ ′ ( s ) Δ 2 s ) = 1 2 ( ρ + ρ ′ [ 2 f i T J i Δ x + ( Δ x ) T J i T J i Δ x ] + 1 2 ρ ′ ′ [ 2 f i T J i Δ x + ( Δ x ) T J i T J i Δ x ] 2 ) ≈ ρ + ρ ′ f i T J i Δ x + 1 2 ρ ′ ( Δ x ) T J i T J i T Δ x + ρ ′ ′ ( Δ x ) T J i T f i f i T J i Δ x = ρ + ρ ′ f i T J i Δ x + 1 2 ( Δ x ) T J i T ( ρ ′ I + 2 ρ ′ ′ f i f i T ) J i Δ x (4.1) \frac{1}{2} \rho(s+\Delta s) \approx \frac{1}{2} (\rho(s) + \rho'(s) \Delta s + \frac{1}{2} \rho '' (s) \Delta^{2} s )\\ = \frac{1}{2}(\rho + \rho'[2f^{T}_{i}J_{i}\Delta x + (\Delta x)^{T}J^{T}_{i}J_{i}\Delta x]+ \frac{1}{2} \rho ''[2f^{T}_{i}J_{i}\Delta x + (\Delta x)^{T}J^{T}_{i}J_{i}\Delta x]^{2}) \\ \approx \rho + \rho'f_{i}^{T}J_{i}\Delta x + \frac{1}{2} \rho'(\Delta x)^{T}J_{i}^{T}J_{i}^{T}\Delta x + \rho ''(\Delta x)^{T}J_{i}^{T}f_{i}f_{i}^{T}J_{i}\Delta x \\ = \rho + \rho ' f_{i}^{T}J_{i}\Delta x + \frac{1}{2} (\Delta x)^{T}J_{i}^{T}(\rho ' I + 2 \rho '' f_{i}f_{i}^{T})J_{i}\Delta x \tag{4.1} 21ρ(s+Δs)21(ρ(s)+ρ(s)Δs+21ρ(s)Δ2s)=21(ρ+ρ[2fiTJiΔx+(Δx)TJiTJiΔx]+21ρ[2fiTJiΔx+(Δx)TJiTJiΔx]2)ρ+ρfiTJiΔx+21ρ(Δx)TJiTJiTΔx+ρ(Δx)TJiTfifiTJiΔx=ρ+ρfiTJiΔx+21(Δx)TJiT(ρI+2ρfifiT)JiΔx(4.1)
若误差项为 Σ \Sigma Σ范数:
1 2 ρ ( s + Δ s ) ≈ 1 2 ( ρ ( s ) + ρ ′ ( s ) Δ s + 1 2 ρ ′ ′ ( s ) Δ 2 s ) = 1 2 ( ρ + ρ ′ [ 2 f i T Σ i − 1 J i Δ x + ( Δ x ) T J i T Σ i − 1 J i Δ x ] + 1 2 ρ ′ ′ [ 2 f i T Σ i − 1 J i Δ x + ( Δ x ) T J i T Σ i − 1 J i Δ x ] 2 ) ≈ ρ + ρ ′ f i T Σ i − 1 J i Δ x + 1 2 ρ ′ ( Δ x ) T J i T Σ i − 1 J i Δ x + ρ ′ ′ ( Δ x ) T J i T Σ i − 1 f i f i T Σ i − 1 J i Δ x = ρ + ρ ′ f i T Σ i − 1 J i Δ x + 1 2 ( Δ x ) T J i T ( ρ ′ Σ i − 1 + 2 ρ ′ ′ Σ i − 1 f i f i T Σ i − 1 ) J i Δ x (4.2) \frac{1}{2} \rho(s+\Delta s) \approx \frac{1}{2} (\rho(s) + \rho'(s) \Delta s + \frac{1}{2} \rho '' (s) \Delta^{2} s )\\ = \frac{1}{2}(\rho + \rho'[2f^{T}_{i}\Sigma_{i}^{-1}J_{i}\Delta x + (\Delta x)^{T}J^{T}_{i}\Sigma_{i}^{-1}J_{i}\Delta x]+ \frac{1}{2} \rho ''[2f^{T}_{i}\Sigma_{i}^{-1}J_{i}\Delta x + (\Delta x)^{T}J^{T}_{i}\Sigma_{i}^{-1}J_{i}\Delta x]^{2}) \\ \approx \rho + \rho'f_{i}^{T}\Sigma_{i}^{-1}J_{i}\Delta x + \frac{1}{2} \rho'(\Delta x)^{T}J_{i}^{T}\Sigma_{i}^{-1}J_{i}\Delta x + \rho ''(\Delta x)^{T}J_{i}^{T}\Sigma_{i}^{-1}f_{i}f_{i}^{T}\Sigma_{i}^{-1}J_{i}\Delta x \\ = \rho + \rho ' f_{i}^{T}\Sigma_{i}^{-1}J_{i}\Delta x + \frac{1}{2} (\Delta x)^{T}J_{i}^{T}(\rho ' \Sigma_{i}^{-1} + 2 \rho '' \Sigma_{i}^{-1}f_{i}f_{i}^{T}\Sigma_{i}^{-1})J_{i}\Delta x \tag{4.2} 21ρ(s+Δs)21(ρ(s)+ρ(s)Δs+21ρ(s)Δ2s)=21(ρ+ρ[2fiTΣi1JiΔx+(Δx)TJiTΣi1JiΔx]+21ρ[2fiTΣi1JiΔx+(Δx)TJiTΣi1JiΔx]2)ρ+ρfiTΣi1JiΔx+21ρ(Δx)TJiTΣi1JiΔx+ρ(Δx)TJiTΣi1fifiTΣi1JiΔx=ρ+ρfiTΣi1JiΔx+21(Δx)TJiT(ρΣi1+2ρΣi1fifiTΣi1)JiΔx(4.2)


由于 Δ x \Delta x Δx是一个极小量,故其三阶及以上的项数值很小,近似忽略 Δ x \Delta x Δx三阶及其以上的项。
对公式 ( 4 ) (4) (4)中的 Δ x \Delta x Δx进行求导后,令其等于0,得到: ∑ i J i T ( ρ ′ I + 2 ρ ′ ′ f i f i T ) J i Δ x = − ∑ i ρ ′ J i T f i \sum_{i} J_{i}^{T}(\rho ' I+2 \rho '' f_{i}f_{i}^{T})J_{i} \Delta x = -\sum_{i}\rho ' J_{i}^{T}f_{i} iJiT(ρI+2ρfifiT)JiΔx=iρJiTfi 化简得: ∑ i J i T W J i Δ x = − ∑ i ρ ′ J i T f i \sum_{i} J_{i}^{T} W J_{i}\Delta x = -\sum_{i}\rho ' J_{i}^{T}f_{i} iJiTWJiΔx=iρJiTfi 其中 W = ρ ′ I + 2 ρ ′ ′ f i f i T W=\rho ' I+2 \rho '' f_{i}f_{i}^{T} W=ρI+2ρfifiT

若误差项为 Σ \Sigma Σ范数:
∑ i J i T ( ρ ′ Σ i − 1 + 2 ρ ′ ′ Σ i − 1 f i f i T Σ i − 1 ) J i Δ x = − ∑ i ρ ′ J i T Σ i − 1 f i \sum_{i} J_{i}^{T}(\rho ' \Sigma_{i}^{-1}+2 \rho '' \Sigma_{i}^{-1}f_{i}f_{i}^{T}\Sigma_{i}^{-1})J_{i} \Delta x = -\sum_{i}\rho ' J_{i}^{T}\Sigma_{i}^{-1}f_{i} iJiT(ρΣi1+2ρΣi1fifiTΣi1)JiΔx=iρJiTΣi1fi 化简得: ∑ i J i T W J i Δ x = − ∑ i ρ ′ J i T Σ i − 1 f i \sum_{i} J_{i}^{T} W J_{i}\Delta x = -\sum_{i}\rho ' J_{i}^{T}\Sigma_{i}^{-1}f_{i} iJiTWJiΔx=iρJiTΣi1fi 其中 W = ρ ′ Σ i − 1 + 2 ρ ′ ′ Σ i − 1 f i f i T Σ i − 1 W=\rho ' \Sigma_{i}^{-1}+2 \rho '' \Sigma_{i}^{-1}f_{i}f_{i}^{T}\Sigma_{i}^{-1} W=ρΣi1+2ρΣi1fifiTΣi1


3. 局部Bundle Adjustment代价函数的构建

对于需要优化的状态向量,包括滑动窗口内的所有IMU状态 x k \mathbf{x}_{k} xk(位姿 P P P、速度 V V V、旋转 Q Q Q、加速度偏置 b a b_{a} ba,陀螺仪偏置 b w b_{w} bw)、相机到IMU的外参 x c b \mathbf{x}_{c}^{b} xcb、所有3D点的逆深度 λ m \lambda_{m} λm:【论文公式(21)】 X = [ x 0 , x 1 , ⋯   , x n , x c b , λ 0 , λ 1 , ⋯   , λ m ] \mathcal{X} = [\mathbf{x}_{0}, \mathbf{x}_{1}, \cdots , \mathbf{x}_{n}, \mathbf{x}_{c}^{b}, \mathbf{\lambda}_{0}, \mathbf{\lambda}_{1}, \cdots, \mathbf{\lambda}_{m}] X=[x0,x1,,xn,xcb,λ0,λ1,,λm] x k = [ p b k w , v b k w , q b k w , b a , b g ] , k ∈ [ 0 , n ] \mathbf{x}_{k} = [\mathbf{p}_{b_{k}}^{w}, \mathbf{v}_{b_{k}}^{w}, \mathbf{q}_{b_{k}}^{w}, \mathbf{b}_{a}, \mathbf{b}_{g}], k\in[0,n] xk=[pbkw,vbkw,qbkw,ba,bg],k[0,n] x c b = [ p c b , q c b ] \mathbf{x}_{c}^{b} = [\mathbf{p}_{c}^{b}, \mathbf{q}_{c}^{b}] xcb=[pcb,qcb] 其中 x k \mathbf{x}_{k} xk代表相机获取图片时对应时刻 k k k的IMU状态, n n n为滑动窗口内的关键帧的数量, m m m为滑动窗口内3D视觉特征(空间点)的数量, λ m \lambda_{m} λm为第 m m m个3D视觉特征的逆深度(第一次被观察时计算得到的值)。
目标函数为 【论文公式(22)(23)】: m i n X { ∥ r p − H p X ∥ 2 + ∑ k ∈ B ∥ r B ( z ^ b k + 1 b k , X ) ∥ P b k + 1 b k 2 + ∑ ( l , j ) ∈ C ρ ( ∥ r C ( z ^ l c j , X ) ∥ P l c j 2 ) } (5) \underset{\mathbf{\mathcal{X}}}{min}\begin{Bmatrix}\left \| \mathbf{r}_{p}-\mathbf{H}_{p} \mathbf{\mathcal{X}} \right \|^{2} + \underset{k \in \mathcal{B}}{\sum} \left \| \mathbf{r}_{\mathcal{B}}(\hat{\mathbf{z}}_{b_{k+1}}^{b_{k}}, \mathbf{\mathcal{X}} )\right \| _{\mathbf{P}_{b_{k+1}}^{b_{k}}} ^{2} + \underset{(l,j)\in \mathcal{C}}{\sum} \rho(\left \| \mathbf{r}_{\mathcal{C}}(\hat{\mathbf{z}}_{l}^{c_{j}}, \mathbf{\mathcal{X}})\right \|_{\mathbf{P}_{l}^{c_{j}}}^{2}) \end{Bmatrix} \tag{5} Xmin{ rpHpX2+kBrB(z^bk+1bk,X)Pbk+1bk2+(l,j)Cρ(rC(z^lcj,X)Plcj2)}(5) ρ ( s ) = { 1 , s ≥ 1 2 s − 1 , s < 1 \rho(s)=\left\{\begin{matrix} 1, s\geq 1\\ 2\sqrt{s}-1, s<1 \end{matrix}\right. ρ(s)={ 1,s12s 1,s<1 其中这三项分别为边缘化的先验信息 (由滑动窗口产生的关键帧边缘化)、IMU的测量误差、视觉的重投影误差,三种残差都是用马氏距离表示。 P b k + 1 b k \mathbf{P}_{b_{k+1}}^{b_{k}} Pbk+1bk代表IMU残差的协方差, P l c j \mathbf{P}_{l}^{c_{j}} Plcj代表视觉重投影误差的协方差,通过协方差的逆 (即信息矩阵) 对各个变量计算残差时进行加权 ρ ( s ) \rho(s) ρ(s)为Huber核函数。

4. IMU测量残差 (增量误差) 及其对状态量雅克比矩阵、协方差递推方程的推导

4.1 IMU测量残差 (增量误差)

在IMU预积分中我们已经得到了:
R w b k p b k + 1 w = R w b k ( p b k w + v b k w Δ t k − 1 2 g w Δ t k 2 ) + α b k + 1 b k R^{b_{k}}_{w}p^{w}_{b_{k+1}}=R^{b_{k}}_{w}(p_{b_{k}}^{w}+v^{w}_{b_{k}}\Delta t_{k}-\frac{1}{2}g^{w}\Delta t_{k}^{2}) + \alpha^{b_{k}}_{b_{k+1}} Rwbkpbk+1w=Rwbk(pbkw+vbkwΔtk21gwΔtk2)+αbk+1bk R w b k v b k + 1 w = R w b k ( v b k w − g w Δ t k ) + β b k + 1 b k R^{b_{k}}_{w}v_{b_{k+1}}^{w} = R_{w}^{b_{k}}(v_{b_{k}}^{w}-g^{w}\Delta t_{k})+\beta^{b_{k}}_{b_{k+1}} Rwbkvbk+1w=Rwbk(vbkwgwΔtk)+βbk+1bk q w b k ⊗ q b k + 1 w = γ b k + 1 b k q_{w}^{b_{k}} \otimes q_{b_{k+1}}^{w} = \gamma _{b_{k+1}} ^{b_{k}} qwbkqbk+1w=γbk+1bk
因此俩帧之间的PVQ和bias的变化量(增量)误差为:【论文公式[24]】
r B 15 × 1 ( z ^ b k + 1 b k , X ) = [ δ α b k + 1 b k δ β b k + 1 b k δ θ b k + 1 b k δ b a δ b w ] = [ R w b k ( p b k + 1 w − p b k w − v k w Δ t k + 1 2 g w Δ t k 2 ) − α b k + 1 b k R w b k

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值