本文涉及很多代码及文字,排版、文字错误请见谅。
本文包含2185文字,阅读时间预计15分
一.DSO
1. DSO简介
SDO是由德国慕尼黑工业大学Engel于2016年发布在arXiv上的一种基于直接法构建稀疏点云地图的视觉里程计(VIO)。它联合优化了所有模型参数(相机位姿、内参矩阵、几何参数、逆深度值)的直接法模型,并在优化过程中用滑动窗口对旧的相机位姿以及离开相机视野的点进行边缘化。但它不是完整的SLAM,因为它不包含回环检测、地图复用的功能。因此,它不可避免地会出现累计误差,尽管很小,但不能消除。
2.DSO特性分析
DSO是少数使用纯直接法(Fully direct)计算视觉里程计的系统之一。相比之下,SVO[2]属于半直接法,仅在前端的Sparse model-based Image Alignment部分使用了直接法,之后的位姿估计、bundle adjustment,则仍旧使用传统的最小化重投影误差的方式。而ORB-SLAM2[3],则属于纯特征法,计算结果完全依赖特征匹配。从方法上来说,DSO是新颖、独树一帜的。
直接法相比于特征点法,有两个非常不同的地方:
1) 特征点法通过最小化重投影误差来计算相机位姿与地图点的位置,而直接法则最小化光度误差(photometric error)。所谓光度误差是说,最小化的目标函数,通常由图像之间的误差来决定,而非重投影之后的几何误差。
2) 直接法将数据关联(data association)与位姿估计(pose estimation)放在了一个统一的非线性优化问题中,而特征点法则分步求解,即,先通过匹配特征点求出数据之间关联,再根据关联来估计位姿。这两步通常是独立的,在第二步中,可以通过重投影误差来判断数据关联中的外点,也可以用于修正匹配结果。
DSO直接法与其他直接法不同之处:
1) 将光度模型、集合模型结合起来,对相机内参、相机姿态、像素点的深度等参数做联合估计;
2) 由于引入了光度模型,算法忽略了其他直接法采用的对图像进行平滑的预处理,而是将相机看做一个传感器,对图像像素进行均匀采样,进行计算。
3) 提出的模型集成了完整的光度校准,考虑了曝光时间、透镜渐晕和非线性相应函数。
4) 通过实验验证,该算法在跟踪精度和鲁棒性方面性能超过了state-of-the-art的算法水平。
3.DSO框架流程
DSO整体代码由四个部分组成:系统与各算法集成于src/FullSystem,后端优化位于src/OptimizationBackend,这二者组成了DSO大部分核心内容。src/utils和src/IOWrapper为一些去畸变、数据集读写和可视化UI代码,具体框架如下: