介绍

DSO 即 Direct Sparse Odometry,直接稀疏里程计。作为vSLAM直接法中开山鼻祖,在vSLAM方法中具有比较高的地位,并且其算法原理考虑内容比较多,代码的实现上更是接近底层(甚至底层到优化过程、字节对齐都是自己实现)。因此我认为DSO是一个非常值得学习和借鉴的vSLAM直接法。

在这本篇中,我打算着重解释什么是Direct,什么是Indirect;什么是Sparse,什么是Dense。它们之间到底有什么区别,具体的优劣势又在哪?

1. 直接法 和 非直接法

在SLAM十四讲中的第8章(视觉里程计2)中,提到了直接法的概念和基本原理,重点在于像素级别的灰度不变性,通过灰度不变假设构建优化模型。这里与非直接法,通过构建重投影误差有本质区别。

1.1 直接法

$$ r_k = I_j[p_j] - I_i[p_i] $$
$$ p_j = \pi(T_{ji} * \frac{\pi^{-1}(p_i)}{d_{pi}}) $$

正如上面的公式描述的一样,残差应该是ij两帧之间的像素差值。根据灰度不变假设,当\(p_i\)\(p_j\)之间描述的是同一个3d空间中的点时,\(r_k\)最小,应该为0。为了重点突出灰度不变的假设,并没有考虑仅用一个点投影的非鲁棒性(实际情况下,需要考虑一个patch——像素块的灰度不变假设,这样更鲁邦一些)。

$$ \frac{\partial r_k}{\partial \delta \xi_{ji}} = \frac{\partial r_k}{\partial I_j} * \frac{\partial I_j}{\partial p_j} * \frac{\partial p_j}{\partial \delta \xi_{ji}} $$
$$ \frac{\partial r_k}{\partial d_{pi}} = \frac{\partial r_k}{\partial I_j} * \frac{\partial I_j}{\partial p_j} * \frac{\partial p_j}{\partial d_{pi}} $$

根据链式法则,可以看到残差对位姿的雅可比矩阵与\(I_j\)帧的像素梯度有关系。然而由于图像的非凸性比较明显,在经验上,图像的梯度仅能表示2个像素范围内的灰度变化。因此当使用直接法对图像进行跟踪时,需要较好的初始值,并且当跟踪丢失后,就很难进行重定位了。

但是由于直接法构建的是灰度之间的差异,而不是特征点的计算。因此直接法在算法运行速度上,要比非直接法快得多。

1.2 非直接法

我最先能想到的非直法就是 ORB-SLAM系列。经典的特征点匹配,通过BA构建重投影误差。针对非直接法来讲,像素的灰度变化并不会导致非直接法的强烈波动。原因在于,非直接法的特征点是由关键点和描述子两部分组成,具有相当强的稳定性。

非直接法之所以被称为非直接,是因为非直接法需要将得到的数据进行初步的加工处理,而不是直接使用传感器得到的结果。针对视觉SLAM来讲,传感器得到的数据就是像素点的灰度,而非直接法需要根据灰度和像素位置两方面的信息进行某种方式的计算,从而提取出特征点。而这部分计算任务往往是非直接法中最耗时的部分。

由于非直接法的特征点计算总是和像素梯度强相关,当图像中存在弱梯度时,特征点的提取可能失败,并且图像中的梯度越弱,提取出的特征点的鲁棒性和稳定性相对较差。因此特征点法对图像的梯度较敏感。

1.3 优缺点汇总

根据上面的分析,直接法的优劣势如下:

  1. 直接法的速度更快,因为不需要计算特征点。
  2. 直接法对图像的梯度不是那么敏感。
  3. 直接法在优化过程中会涉及到像素梯度,因此跟踪失败后,重定位相对困难。

除此之外,要是以回环闭合的角度去讨论的话,非直接法可能更具优势,因为目前视觉SLAM中比较常用的回环检测方法都是基于词袋的。而词袋方法的直接依据往往都是特征点的描述子。

2. 稀疏 和 稠密

在视觉SLAM中,稀疏和稠密主要是用来描述建图过程中是否会考虑点与点之间的关系。在视觉SLAM中,稀疏的方法往往占据主流,因为以优化的角度去讨论,稀疏方法往往不考虑点与点之间的关系,反映在优化的H矩阵中,表现为稀疏的矩阵,或者说引用视觉SLAM十四讲的内容,应该为一个箭头矩阵。只有这种稀疏的箭头矩阵,才能使用Schur消元的方式去加速事实求解。

当然,目前也有半稠密的视觉SLAM方法,比如说LSD-SLAM,LSD的方法考虑了点与点之间的连通性关系,但是LSD并没有使用所有的像素点来构建地图,因此在学术上称这种方法为半稠密。LSD使用了GPU,来实时的解一个稠密的H矩阵。

考虑像素中的所有点,并且考虑点与点之间的关系问题,在SFM问题中比较常见,即3D重建任务(从移动中恢复结构)。这种问题往往都是离线,使用多GPU的方式求解,重点在于恢复3D空间结构,而不是实时的给出相机位姿。

喜欢这篇文章吗?喜欢就分享吧: TwitterFacebookEmail


孙善路-github Avatar 孙善路-github 对SLAM和DL感兴趣的理工男
孙善路-bilibili Avatar 孙善路-bilibili 对SLAM和DL感兴趣的理工男
Comments

有什么问题吗,有任何问题欢迎你在下面评论留言或者邮件联系我!


Keep Reading


Published

Category

DSO

Tags

Contact Me