从零开始手写VIO 第5期(Lesson 3)

从零开始手写VIO 第5期(Lesson 3)

呀,之前有别的事情,所以更新被耽误了,本文是VIO课程的第三节课,权当自己的总结,由于github可能比较慢,所以放在了gitee,链接参见之前的博文,欢迎大家参考,更新不易,如需转载,请著名出处,谢谢。

课程内容回顾

   第三节主要讲解了VIO中基于优化的 IMU 与视觉信息融合,首先回顾了最小二乘问题,包括最速下降法,牛顿法,高斯牛顿,LM等;然后讲解了VIO残差函数的构建,以及预计分量的构建和模型;最后推导了残差Jacobian

1 作业1

作业1是编程题,主要是记录下每一次LM迭代的 μ \mu μ值,用于绘制最后的曲线;最后就是根据
《The Levenberg-Marquardt method for nonlinear least squares curve-fitting problems》里面的三种方法替换LM里的 μ \mu μ的迭代过程。
这里记录一下结果:

实现其他更优秀的阻尼因子策略,并给出实验对比

作业中实现了论文里的三种方法,根据参数进行选择即可,以exp函数为例,设置噪声方差sigma = 0.1,得到结果如下:

  • 方法1: Levenberg-Marquardt lambda update

    代码实现在函数Problem::IsGoodStepInLM()lambda_update_type_ == 0的条件

    结果:

    优化结果Lambda曲线
    在这里插入图片描述在这里插入图片描述
  • 方法2: Quadratic update

    代码实现在函数Problem::IsGoodStepInLM()lambda_update_type_ == 1的条件

    结果:

    优化结果Lambda曲线
    在这里插入图片描述在这里插入图片描述
  • 方法3: Nielsen’s lambda update equations

    代码实现在函数Problem::IsGoodStepInLM()lambda_update_type_ == 2的条件

    结果:

    优化结果Lambda曲线
    在这里插入图片描述在这里插入图片描述

    结果说明: 对比发现在指数函数情况下,三种方法都能得到相近的解,Levenberg-Marquardt lambda updateNielsen's lambda update equations方法的迭代次数少,收敛快,但是Lambda变化曲线跳动较大,Quadratic update方法迭代次数多,但是Lambda变化更加平滑;此外,将噪声方差设置为1的时候,也得到相似的结果

2 作业2 公式推导

2.1 f 15 f_{15} f15推导

根据PPT的公式有
a = 1 2 ( q b i b k ( a b k − b k a ) + q b i b k + 1 ( a b k + 1 − b k a ) ) ω = 1 2 ( ω b k − b k g ) + ( ω b k + 1 − b k g ) ) = 1 2 ( ω b k + ω b k + 1 ) − b k g α b i b k + 1 = α b i b k + β b i b k ∗ δ t + 1 2 a ∗ δ t 2 而 b k g 与 ω 相 关 , 与 其 它 的 无 关 , 所 以 \bold a= \frac{1}{2}(q_{b_ib_k}(\bold a^{b_k} -\bold b_k^a) + q_{b_ib_{k+1}}(\bold a^{b_{k+1}} -\bold b_k^a))\\\bold \omega = \frac{1}{2}(\bold \omega^{b_k} -\bold b_k^g) + (\bold \omega^{b_{k+1}} -\bold b_k^g)) = \frac{1}{2}(\bold \omega^{b_k}+ \bold \omega^{b_{k+1}})-\bold b_k^g\\\bold \alpha_{b_ib_{k+1}} = \bold \alpha_{b_ib_k} +\bold \beta_{b_ib_k}*\delta t + \frac{1}{2}\bold a*{\delta t}^2\\而 \bold b_k^g与\bold \omega相关,与其它的无关,所以\\ a=21(qbibk(abkbka)+qbibk+1(abk+1bka))ω=21(ωbkbkg)+(ωbk+1bkg))=21(ωbk+ωbk+1)bkgαbibk+1=αbibk+βbibkδt+21aδt2bkgω,
f 15 = ∂ α b i b k + 1 ∂ δ b k g = ∂ 1 2 a ∗ δ t 2 ∂ δ b k g = ∂ 1 4 ( q b i b k ( a b k − b k a ) + q b i b k + 1 ( a b k + 1 − b k a ) ) ∗ δ t 2 ∂ δ b k g = 1 4 ∂ q b i b k + 1 ( a b k + 1 − b k a ) ∗ δ t 2 ∂ δ b k g = 1 4 ∂ q b i b k ⨂ [ 1 0.5 ∗ ( ω − δ b k g ) ∗ δ t ] ( a b k + 1 − b k a ) ∗ δ t 2 ∂ δ b k g = 1 4 ∂ R b i b k e x p ( [ ( ω − δ b k g ) ∗ δ t ] × ) ( a b k + 1 − b k a ) ∗ δ t 2 ∂ δ b k g = 1 4 ∂ R b i b k e x p ( [ ω ∗ δ t ] × ) e x p ( [ − J r ( ω δ t ) ∗ δ b k g ∗ δ t ) ] × ) ( a b k + 1 − b k a ) ∗ δ t 2 ∂ δ b k g ≈ 1 4 ∂ R b i b k e x p ( [ ω ∗ δ t ] × ) e x p ( [ − δ b k g ∗ δ t ) ] × ) ( a b k + 1 − b k a ) ∗ δ t 2 ∂ δ b k g = − 1 4 ∂ R b i b k + 1 [ ( a b k + 1 − b k a ) ∗ δ t 2 ] × ( − δ b k g ∗ δ t ) ∂ δ b k g = − 1 4 R b i b k + 1 [ ( a b k + 1 − b k a ) ∗ δ t 2 ] × ( − δ t ) f_{15}=\frac{\partial \alpha_{b_ib_{k+1}}}{\partial \delta b_k^g} = \frac{\partial \frac{1}{2}\bold a*{\delta t}^2}{\partial \delta b_k^g} = \frac{\partial \frac{1}{4}(q_{b_ib_k}(\bold a^{b_k} -\bold b_k^a) + q_{b_ib_{k+1}}(\bold a^{b_{k+1}} -\bold b_k^a))*{\delta t}^2}{\partial \delta b_k^g} \\ =\frac{1}{4} \frac{\partial q_{b_ib_{k+1}}(\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2}{\partial \delta b_k^g} \\ = \frac{1}{4} \frac{\partial q_{b_ib_{k}}\bigotimes \left[\begin{matrix} 1 \\ 0.5*(\omega - \delta b_k^g)*\delta t\end{matrix}\right] (\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2}{\partial \delta b_k^g} \\ =\frac{1}{4} \frac{\partial R_{b_ib_k}exp([(\omega - \delta b_k^g)*\delta t]_\times) (\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2}{\partial \delta b_k^g} \\ =\frac{1}{4}\frac{\partial R_{b_ib_k}exp([\omega*\delta t]_\times)exp([-J_r(\bold \omega \delta t)*\delta b_k^g*\delta t)]_\times)(\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2}{\partial \delta b_k^g} \\ \approx \frac{1}{4} \frac{\partial R_{b_ib_k}exp([\omega*\delta t]_\times)exp([-\delta b_k^g*\delta t)]_\times) (\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2}{\partial \delta b_k^g} \\ = -\frac{1}{4} \frac{\partial R_{b_ib_{k+1}}[(\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2]_\times(-\delta b_k^g*\delta t)}{\partial \delta b_k^g} \\ =-\frac{1}{4}{R_{b_ib_{k+1}}[(\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2]_\times(-\delta t)} f15=δbkgαbibk+1=δbkg21aδt2=δbkg41(qbibk(abkbka)+qbibk+1(abk+1bka))δt2=41δbkgqbibk+1(abk+1bka)δt2=41δbkgqbibk[10.5(ωδbkg)δt](abk+1bka)δt2=41δbkgRbibkexp([(ωδbkg)δt]×)(abk+1bka)δt2=41δbkgRbibkexp([ωδt]×)exp([Jr(ωδt)δbkgδt)]×)(abk+1bka)δt241δbkgRbibkexp([ωδt]×)exp([δbkgδt)]×)(abk+1bka)δt2=41δbkgRbibk+1[(abk+1bka)δt2]×(δbkgδt)=41Rbibk+1[(abk+1bka)δt2]×(δt)

2.2 g 12 g_{12} g12推导

根据PPT公式有
a = 1 2 ( q b i b k ( a b k − b k a ) + q b i b k + 1 ( a b k + 1 − b k a ) ) ω = 1 2 ( ω b k ~ + n k g − b k g ) + ( ω b k + 1 ~ + n k + 1 g − b k g ) ) 所 以 , 在 n k g 上 有 一 个 扰 动 , 相 当 于 加 上 一 个 δ n k g α b i b k + 1 = α b i b k + β b i b k ∗ δ t + 1 2 a ∗ δ t 2 而 n k g 与 ω 相 关 , 与 其 它 的 无 关 , 所 以 \bold a= \frac{1}{2}(q_{b_ib_k}(\bold a^{b_k} -\bold b_k^a) + q_{b_ib_{k+1}}(\bold a^{b_{k+1}} -\bold b_k^a)) \\ \bold \omega = \frac{1}{2}(\widetilde {\bold \omega^{b_k}} + \bold n_k^g -\bold b_k^g) + (\widetilde {\bold \omega^{b_{k+1}}} + \bold n_{k+1}^g -\bold b_k^g)) \\ 所以,在\bold n_k^g上有一个扰动,相当于加上一个\delta \bold n_k^g \\ \\ \bold \alpha_{b_ib_{k+1}} = \bold \alpha_{b_ib_k} +\bold \beta_{b_ib_k}*\delta t + \frac{1}{2}\bold a*{\delta t}^2 \\ 而 \bold n_k^g与\bold \omega相关,与其它的无关,所以 \\ a=21(qbibk(abkbka)+qbibk+1(abk+1bka))ω=21(ωbk +nkgbkg)+(ωbk+1 +nk+1gbkg)),nkgδnkgαbibk+1=αbibk+βbibkδt+21aδt2nkgω,

g 12 = ∂ α b i b k + 1 ∂ δ n k g = ∂ 1 2 a ∗ δ t 2 ∂ δ n k g = ∂ 1 4 ( q b i b k ( a b k − b k a ) + q b i b k + 1 ( a b k + 1 − b k a ) ) ∗ δ t 2 ∂ δ n k g = 1 4 ∂ q b i b k + 1 ( a b k + 1 − b k a ) ∗ δ t 2 ∂ δ n k g = 1 4 ∂ q b i b k ⨂ [ 1 0.5 ∗ ( ω + 0.5 ∗ δ n k g ) ∗ δ t ] ( a b k + 1 − b k a ) ∗ δ t 2 ∂ δ n k g = 1 4 ∂ R b i b k e x p ( [ ( ω + 0.5 ∗ δ n k g ) ∗ δ t ] × ) ( a b k + 1 − b k a ) ∗ δ t 2 ∂ δ n k g = 1 4 ∂ R b i b k e x p ( [ ω ∗ δ t ] × ) e x p ( [ J r ( ω δ t ) ∗ ( 0.5 ∗ δ n k g ) ∗ δ t ] × ) ( a b k + 1 − b k a ) ∗ δ t 2 ∂ δ n k g ≈ 1 4 ∂ R b i b k e x p ( [ ω ∗ δ t ] × ) e x p ( [ ( 0.5 ∗ δ n k g ) ∗ δ t ] × ) ( a b k + 1 − b k a ) ∗ δ t 2 ∂ δ n k g = − 1 4 ∂ R b i b k + 1 [ ( a b k + 1 − b k a ) ∗ δ t 2 ] × ( 0.5 ∗ δ n k g ∗ δ t ) ∂ δ n k g = − 1 4 R b i b k + 1 [ ( a b k + 1 − b k a ) ∗ δ t 2 ] × ( 1 2 δ t ) g_{12} = \frac{\partial \alpha_{b_ib_{k+1}}}{\partial \delta \bold n_k^g}= \frac{\partial \frac{1}{2}\bold a*{\delta t}^2}{\partial \delta \bold n_k^g} = \frac{\partial \frac{1}{4}(q_{b_ib_k}(\bold a^{b_k} -\bold b_k^a) + q_{b_ib_{k+1}}(\bold a^{b_{k+1}} -\bold b_k^a))*{\delta t}^2}{\partial \delta \bold n_k^g} \\ =\frac{1}{4} \frac{\partial q_{b_ib_{k+1}}(\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2}{\partial \delta \bold n_k^g} \\ = \frac{1}{4} \frac{\partial q_{b_ib_{k}}\bigotimes \left[\begin{matrix} 1 \\ 0.5*(\omega + 0.5*\delta \bold n_k^g)*\delta t\end{matrix}\right] (\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2}{\partial \delta \bold n_k^g} \\ =\frac{1}{4} \frac{\partial R_{b_ib_k}exp([(\omega + 0.5*\delta \bold n_k^g)*\delta t]_\times) (\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2}{\partial \delta \bold n_k^g} \\ =\frac{1}{4} \frac{\partial R_{b_ib_k}exp([\omega*\delta t]_\times)exp([J_r(\bold \omega \delta t)*(0.5*\delta \bold n_k^g)*\delta t]_\times)(\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2}{\partial \delta \bold n_k^g} \\ \approx \frac{1}{4} \frac{\partial R_{b_ib_k}exp([\omega*\delta t]_\times)exp([(0.5*\delta \bold n_k^g)*\delta t]_\times)(\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2}{\partial \delta \bold n_k^g} \\ = -\frac{1}{4} \frac{\partial R_{b_ib_{k+1}}[(\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2]_\times(0.5*\delta \bold n_k^g*\delta t)}{\partial \delta \bold n_k^g} \\ =-\frac{1}{4}{R_{b_ib_{k+1}}[(\bold a^{b_{k+1}} -\bold b_k^a)*{\delta t}^2]_\times(\frac{1}{2}\delta t)} g12=δnkgαbibk+1=δnkg21aδt2=δnkg41(qbibk(abkbka)+qbibk+1(abk+1bka))δt2=41δnkgqbibk+1(abk+1bka)δt2=41δnkgqbibk[10.5(ω+0.5δnkg)δt](abk+1bka)δt2=41δnkgRbibkexp([(ω+0.5δnkg)δt]×)(abk+1bka)δt2=41δnkgRbibkexp([ωδt]×)exp([Jr(ωδt)(0.5δnkg)δt]×)(abk+1bka)δt241δnkgRbibkexp([ωδt]×)exp([(0.5δnkg)δt]×)(abk+1bka)δt2=41δnkgRbibk+1[(abk+1bka)δt2]×(0.5δnkgδt)=41Rbibk+1[(abk+1bka)δt2]×(21δt)

3 证明题

证明式(9)

证明:

根据 Levenberg-Marquardt Method方法,可以得到:
( J T J + μ I ) Δ x l m = − J T f , μ ≥ 0 (\bold J^T\bold J+\mu I)\Delta \bold x_{lm} = -\bold J^T\bold f,\quad\quad\quad\quad \mu \geq 0 (JTJ+μI)Δxlm=JTf,μ0
J T J J^TJ JTJ进行特征值分解,可以得到 J T J = V Λ V T \bold J^T\bold J=\bold V\bold \Lambda \bold V^T JTJ=VΛVT,

其中
V = [ v 1 , . . . , v n ] 为 正 交 矩 阵 , v 1 , . . . , v n 为 特 征 向 量 Λ = [ λ 1 . . . λ n ] , 为 对 角 矩 阵 , 对 角 线 上 的 元 素 为 特 征 值 \bold V = \left[\begin{matrix} \bold v_1,...,\bold v_n \end{matrix}\right]为正交矩阵,\bold v_1,...,\bold v_n为特征向量 \\ \bold \Lambda = \left[\begin{matrix} \lambda_1 & & \\& ... & \\& & \lambda_n \end{matrix}\right],为对角矩阵,对角线上的元素为特征值 V=[v1,...,vn]v1,...,vnΛ=λ1...λn,线
所以有:
( J T J + μ I ) Δ x l m = ( V Λ V T + V μ V T ) Δ x l m = ( [ v 1 , . . . , v n ] [ λ 1 + μ . . . λ n + μ ] [ v 1 T . . . v n T ] ) Δ x l m = − J T f = − F ′ T (\bold J^T\bold J+\mu \bold I)\Delta \bold x_{lm} = (\bold V\bold \Lambda \bold V^T+\bold V\mu \bold V^T)\Delta \bold x_{lm} \\ =(\left[\begin{matrix} \bold v_1,...,\bold v_n \end{matrix}\right] \left[\begin{matrix} \lambda_1+\mu & & \\& ... & \\& & \lambda_n+\mu \end{matrix}\right]\left[\begin{matrix} \bold v_1^T\\...\\\bold v_n^T \end{matrix}\right]) \Delta \bold x_{lm} = -\bold J^T\bold f=-\bold F'^T \\ (JTJ+μI)Δxlm=(VΛVT+VμVT)Δxlm=([v1,...,vn]λ1+μ...λn+μv1T...vnT)Δxlm=JTf=FT
所以可以得到:
= = > [ λ 1 + μ . . . λ n + μ ] [ v 1 T . . . v n T ] Δ x l m = − [ v 1 T . . . v n T ] F ′ T = = > [ v 1 T . . . v n T ] Δ x l m = − [ λ 1 + μ . . . λ n + μ ] − 1 [ v 1 T . . . v n T ] F ′ T = = > Δ x l m = − [ v 1 , . . . , v n ] [ λ 1 + μ . . . λ n + μ ] − 1 [ v 1 T . . . v n T ] F ′ T = − ∑ j = 1 n v j v j T λ j + μ F ′ T 因 为 v j 是 列 向 量 , F ′ T 是 列 向 量 , 所 以 有 v j T F ′ T = c 是 一 个 数 , 所 以 v j ( v j T F ′ T ) = ( v j T F ′ T ) v j − ∑ j = 1 n v j v j T λ j + μ F ′ T = − ∑ j = 1 n v j T F ′ T λ j + μ v j ==>\left[\begin{matrix} \lambda_1+\mu & & \\& ... & \\& & \lambda_n+\mu \end{matrix}\right]\left[\begin{matrix} \bold v_1^T\\...\\\bold v_n^T \end{matrix}\right] \Delta \bold x_{lm} = -\left[\begin{matrix} \bold v_1^T\\...\\\bold v_n^T \end{matrix}\right]\bold F'^T \\ ==>\left[\begin{matrix} \bold v_1^T\\...\\\bold v_n^T \end{matrix}\right] \Delta \bold x_{lm}=-\left[\begin{matrix} \lambda_1+\mu & & \\& ... & \\& & \lambda_n+\mu \end{matrix}\right]^{-1}\left[\begin{matrix} \bold v_1^T\\...\\\bold v_n^T \end{matrix}\right]\bold F'^T \\ ==> \Delta \bold x_{lm}=-\left[\begin{matrix} \bold v_1,...,\bold v_n \end{matrix}\right]\left[\begin{matrix} \lambda_1+\mu & & \\& ... & \\& & \lambda_n+\mu \end{matrix}\right]^{-1}\left[\begin{matrix} \bold v_1^T\\...\\\bold v_n^T \end{matrix}\right]\bold F'^T \\ =-\sum_{j=1}^n\frac{\bold v_j\bold v_j^T}{\lambda_j + \mu}\bold F'^T \\ 因为\bold v_j是列向量,\bold F'^T是列向量,所以有\bold v_j^T\bold F'^T =c是一个数,所以\bold v_j\bold(v_j^T\bold F'^T) = (\bold v_j^T\bold F'^T)\bold v_j \\ -\sum_{j=1}^n\frac{\bold v_j\bold v_j^T}{\lambda_j + \mu}\bold F'^T=-\sum_{j=1}^n\frac{\bold v_j^T\bold F'^T}{\lambda_j + \mu}\bold v_j ==>λ1+μ...λn+μv1T...vnTΔxlm=v1T...vnTFT==>v1T...vnTΔxlm=λ1+μ...λn+μ1v1T...vnTFT==>Δxlm=[v1,...,vn]λ1+μ...λn+μ1v1T...vnTFT=j=1nλj+μvjvjTFTvjFTvjTFT=cvj(vjTFT)=(vjTFT)vjj=1nλj+μvjvjTFT=j=1nλj+μvjTFTvj
所以式(9)得证。

总结

参考链接

[1] 深蓝学院SLAM/VIO课程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值