【论文阅读】MSC-VO: Exploiting Manhattan and Structural Constraints for Visual Odometry

一、MSC-VO系统简介

MSC-VO是在ORBSLAM的基础上,添加了线特征的一个视觉里程计,不含有回环检测的部分,在线特征的部分中使用了曼哈顿坐标系与结构化约束来体现人造环境下线的特征。其系统结构如图所示:
【论文阅读】MSC-VO: Exploiting Manhattan and Structural Constraints for Visual Odometry_第1张图片

二、MSC-VO介绍

A-Tracking

由于MSC-VO是在ORBSLAM的基础上改进的,所以其线的处理方式也要和ORBSLAM一样,进行跟踪模块。

特征提取部分,MSC-VO使用ORB特征点和LBD描述子分别对点和线特征进行描述,另外,对于每条线,我们需要使用起点和终点来对线产生一个单位方向向量:
在这里插入图片描述
点线提取成功之后,就可以进行3d信息的恢复,论文使用的是RGB-D相机,所以点的深度信息是直接可以得到的,也就是说我们提取的特征点,可以直接用相机得到的深度信息结合相机的针孔成像模型直接计算得到3d坐标,省去了三角化的过程。但是对于线特征来说,由于线更容易受到模糊和不连续性的影响,需要用更加准确的方法来估计线段的端点深度。

对于图像上的每条线段,我们从上面寻找采样点并对这些采样点进行反向投影,反向投影的3d点经过拟合得到3d直线,并使用同样的方法计算直线的单位方向向量。之后对恢复深度的线段,我们要用结构化约束对其进行修正,这里就用到了我们计算的方向向量,我们将两条线的余弦值定义为:
【论文阅读】MSC-VO: Exploiting Manhattan and Structural Constraints for Visual Odometry_第2张图片
利用余弦值,将接近于0以及接近于1的线段组筛选出来,也就是平行和垂直的线。之后我们将角度差异定义为:
在这里插入图片描述
这样,对于我们提取出来的垂直线段组和平行线段组,我们需要对端点进行修正,从而让所有的结构化约束误差更小。具体来说,我们定义了平行误差和垂直误差:
在这里插入图片描述
【论文阅读】MSC-VO: Exploiting Manhattan and Structural Constraints for Visual Odometry_第3张图片
那么对于我们待优化的所有空间线段组L,我们需要最小化误差:
【论文阅读】MSC-VO: Exploiting Manhattan and Structural Constraints for Visual Odometry_第4张图片
这个公式是说,通过调整端点的位置,让所有垂直约束和平行约束产生的残差尽可能小,这里的方法其实非常的巧妙,因为在人造场景中,存在有很多的平行线和垂直线,这些结构化的信息会产生一定的约束,所以可以用这种约束来进行校正。需要注意的是,一条线的平行或者垂直关系,并不一定只有一个,也就是一条线可以同时和多条线满足平行和垂直关系,所以是一个牵一发动全身的过程,所以直接调整端点是不合适的,需要用这种优化的策略。

完成线段的深度信息提取与校正之后,我们就可以进行位姿的估计。这里点和线同时进行恒速模型的跟踪:
【论文阅读】MSC-VO: Exploiting Manhattan and Structural Constraints for Visual Odometry_第5张图片
其中对于所有的点和线,分别通过投影函数计算其误差:
在这里插入图片描述
【论文阅读】MSC-VO: Exploiting Manhattan and Structural Constraints for Visual Odometry_第6张图片
这里对于所有的点特征,使用的方法和ORBSLAM中应该还不完全一样,在ORBSLAM中,点的跟踪是先投影,之后在投影的圆形邻域中,搜索与投影点描述子最相近的特征点,利用跟踪得到的特征点的对应关系,对位姿进行校正。也就是说点的残差只有描述子距离这一项,而在MSC-VO中,描述子距离应该是体现在了权重wi上,还增加了投影点的距离残差进行约束。
而对于线特征,使用的就是PL-SLAM中端点相互投影的方法,用端点到直线的距离来衡量残差。但是线特征投影的方法论文并没有提到,从公式来看,应该是只对端点进行了投影,而不是对整条线进行投影。

这里还涉及一个关键帧的选择,在ORBSLAM中,关键帧只依赖于特征点的差异情况,但是在低纹理的场景下,点特征的差异情况有时候是很大的,我们不能使用一个固定的阈值来筛选关键帧,关键帧的选择也需要做出一定的改变。论文使用的方法是用比例,通过比较跟踪成功的点与新创建的点的比例来筛选关键帧。
关键帧创建好后,点和线就被整合进入局部地图中,对于新整合入的线段,论文使用曼哈顿坐标系在局部建图的过程中补充了一个矫正。曼哈顿坐标系源于曼哈顿距离,简单来说就是坐标轴方向的距离的和,对于空间场景,曼哈顿坐标系就需要有三个方向,分别记为MAj,我们计算的就是在三个坐标方向上的角度差距。

B-局部建图

新的关键帧插入之后,需要利用共视图进行一个局部地图的校正,论文将地图中的线划分出两个集合:共视图相连的关键帧中Kc和存在共视元素但在共视图上没有连线的关键帧Kf,由此构建残差公式:
【论文阅读】MSC-VO: Exploiting Manhattan and Structural Constraints for Visual Odometry_第7张图片
残差公式一共有三部分,第一部分是所有共视关系产生的残差,也就是所有存在共视关系的帧上都需要计算一个残差,第二部分是共视关键帧上存在的平行垂直的结构性约束,第三部分则是地图上的线与曼哈顿坐标系产生的约束关系。

这里主要看第三部分,这里曼哈顿距离是与三个坐标轴的差距,也就是说我们用现实中的直来直去的一些约束,来校正线段的角度信息,可是在图像中,我们认为的垂直关系与现实的垂直关系可能存在偏差,也就是曼哈顿坐标系的三个轴的方向,可能并不是完全垂直的,因此我们使用的曼哈顿坐标系也需要一个不断优化的过程。
论文使用了两阶段的坐标系校正,第一阶段看的不是很清楚,使用线的方向向量和平面的法向量在网格内筛选点:
【论文阅读】MSC-VO: Exploiting Manhattan and Structural Constraints for Visual Odometry_第8张图片
关键帧打到一定数目之后开始第二阶段,这一部分也是一个非线性优化的过程,筛选出第k个关键帧中与某个坐标轴产生关系的线,比如说一条线与MA1是平行的,那么必然与MA2和MA3垂直,那么对于所有产生关系的线,我们就可以用这些线来对曼哈顿坐标系进行校准,也就是最小化下面的残差:
【论文阅读】MSC-VO: Exploiting Manhattan and Structural Constraints for Visual Odometry_第9张图片
其中每个坐标轴的残差由三部分组成:
【论文阅读】MSC-VO: Exploiting Manhattan and Structural Constraints for Visual Odometry_第10张图片

你可能感兴趣的:(视觉SLAM,python,人工智能,深度学习)