【VIO笔记(学习VINS的必备基础)】第五讲(1/2) 手写VIO后端

系列教程来自某学院,侵权删除。
学习完这一系列课程再去看VINS才能做到不吃力,不然直接撸网上的各种VINS解析完全云里雾里-_-!

非线性最小二乘问题求解:solver

回忆上一讲的内容,最小二乘的系统可以表示为:
在这里插入图片描述
其中 ξ \xi ξ是状态量,r表示残差, Σ i \Sigma_i Σi表示协方差。求解这个最小二乘实际上最后会落到迭代求下面这个正定方程:
在这里插入图片描述
在上一讲里我们把它写成了连加形式,便于理解:
在这里插入图片描述
而要求解这个方程,直接取H的逆计算量大,上一讲提到使用舒尔补来求逆,具体来说,考虑纯视觉的BA问题,我们可以把 H Δ x = b \mathbf H\Delta x=b HΔx=b写成:
在这里插入图片描述
其中,下标p表示pose,下标l表示landmark,那么求 Δ x \Delta x Δx的问题可以看成分别求 Δ x p ∗ \Delta x_p^* Δxp Δ x l ∗ \Delta x_l^* Δxl,再拼接起来。例如我们先求 Δ x p ∗ \Delta x_p^* Δxp,利用舒尔补把H矩阵化为下三角:
[ H p p ′ 0 X X ] [ Δ x p ∗ Δ x l ∗ ] = [ − b p ′ − b l ′ ] \begin{bmatrix} H_{pp}' & 0 \\ X & X \end{bmatrix}\begin{bmatrix} \Delta x_p^* \\ \Delta x_l^* \end{bmatrix}=\begin{bmatrix} -b_p' \\ -b_l' \end{bmatrix} [HppX0X][ΔxpΔxl]=[bpbl]
对应的等式右边b也会发生变化,在这里等式左边H矩阵下面两项X的值不重要,使用第一行乘 Δ x \Delta x Δx可以得到变化后的b’,如下:
在这里插入图片描述
那么 Δ x p ∗ \Delta x_p^* Δxp可以表示为左边矩阵的逆乘等式右边,而这个矩阵的维度与之前的H相比降低了很多,方便求解,因为原H矩阵用图表示为下:
在这里插入图片描述
左上角是相机姿态,一个滑动窗口内只有十几个,而路标点往往会达到几百个,所以可以减少整个的计算量,得到了 Δ x p ∗ \Delta x_p^* Δxp后,通过原始的式子可以计算出 Δ x l ∗ \Delta x_l^* Δxl
在这里插入图片描述
这样就计算出了整个 Δ x \Delta x Δx,那么接下来我们回顾一下求解器的整体流程图:
在这里插入图片描述
首先我们要确定误差函数r以及它的雅克比矩阵J,这个在第三讲里面已经讨论过了,之后我们利用最小二乘法求状态量的最佳估计,可以使用舒尔补等方法来进行计算,对于不是slam的问题会使用蓝色框里的一些方法来迭代求解,最后进行不断的迭代直到得到 x ∗ x^* x
最后我们要说一下求解过程中的一些问题,我们知道H矩阵通常不满秩,求解时无法直接求逆,所以我们使用LM法时,由于要添加一个阻尼因子,可以使得H矩阵满秩,然而由于相机都是相对的估计,所以会出现零空间变化的问题,通俗的说其优化后的轨迹的零点可能不是真实空间中的零点,为了解决这个问题,有以下几种方法:
1、添加先验。假设第一帧的x为零点,为了使其不会变化,我们给第一个pose的信息矩阵H加上一个单位阵I,即 H [ 11 ] + = I \mathbf H_{[11]}+=\mathbf I H[

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值