本篇文章先系统介绍下SVO的原理,方便后面对代码的理解

系统流程可以用下面这张图概括

其实这张图少了系统中一个步骤,就是初始化,所以我们以列表形式列出系统流程如下:

1. 初始化:得到相机初始位姿和特征深度值

没太多可讲,多数slam系统的初始化都差不多。

2. 运动跟踪(Motion Estimation)

1)Sparse Model-based Image Alignment

对稀疏的特征块使用direct method 配准,获取相机位姿

2)Feature Alignment:

通过获取的位姿预测参考帧中的特征块在当前帧中的位置,由于深度估计的不准导致获取的位姿也存在偏差,从而使得预测的特征块位置不准。由于预测的特征块位置和真实位置很近,所以可以使用牛顿迭代法对这个特征块的预测位置进行优化。

3)Pose & Structure Refinement

特征块的预测位置得到优化,说明之前使用直接法预测的有问题。利用这个优化后的特征块预测位置,再次使用直接法,对相机位姿(pose)以及特征点位置(structure)进行优化。

3. 地图维护

1)深度估计

通过深度滤波器估计特征点的深度

2)把收敛的地图点插入地图

插入地图,以供运动跟踪中的Feature Alignment使用。

3)插入关键帧(如果需要),并生成新的特征点种子

新的关键帧带来新的特征点,初始化这些特征点的滤波器,供后面深度估计使用。

闲言碎语不要讲,这个小段儿就这么长!

每个部分的详细内容会在后面对应的章节讲,初始化不讲,因为每个slam系统的初始化都差不多。

在查SVO的资料的时候,贺一加大神的博客写得清晰明了,提供了很大帮助,本系列文章很多内容也是从中借鉴,所以在此处给出大佬的文章连接