[关闭]
@iStarLee 2019-08-01T19:30:16.000000Z 字数 6376 阅读 421

FMD Stereo SLAM

SLAM-VisualSLAM


1 Paper Reference

Title: FMD Stereo SLAM: Fusing MVG and Direct Formulation Towards Accurate and Fast Stereo SLAM
Author: Fulin Tang, Heping Li, Yihong Wu∗
Publication: ICRA 2019

2 Introduction

2.1 SLAM分类介绍

对于Geometric SLAM,上面说的这两种方法,各有优劣,但是现有的SLAM很难说在速度和精度上都同时做得很好,这篇文章就是通过fusing MVG方法和Direct 方法同时达到高精度和高运行速度。

2.2 几种现有SLAM的方法回顾

3 本文的stereo SLAM framework

image_1dh5d3ha3eo014kl1ii01li03ch9.png-207.7kB

整个系统包括Tracking和Mapping两个线程。
在Tracking线程中,估计camera pose。

在Mapping线程中,使用MVG来估计3D结构。

经过一个peorid,我们使用全局BA来refine pose和reconstruction globally。

4 Tracking

4.1 Initial Pose: predict current frame camera pose

image_1dh67ndvd3ck133u72e191al23m.png-57.8kB
这个图表示Sparse model-based image alignment,关于这个图的相关变量定义

当前帧的initial pose可以通过下面的式子得到

我们通过最小化两帧的photometric error来求出两帧之间的变换矩阵


其中,
时刻image的2d feature points,我们使用的patch来描述feature points;
帧相机坐标系下feature 3d点。

构建优化目标函数


优化变量的更新使用如下公式

如果使用上面的sparse model-based image alignment失败了,我们使用constant motion model来估计

这个式子推导使用如下公式

4.2 Reprojection: refine current frame 2d feature points 像素位置

注意上面的Initial Pose只是通过利用前后两帧的信息,构建一个最小化光度误差优化问题,求出了current frame的camera pose。这个camera pose并不是准确的。为了降低drift,接下来使用map中的信息来refine这个camera pose。

image_1dh69qerc26n1eclvjkg761qct1j.png-57.3kB
首先找到距离current frame最近的并且能够看到current frame camera pose的那些keyframes(这个文章后面有讲),然后将这些keyframe中space points重投影到current frame的image plane上,如上图所示,构建目标优化函数如下


通过最小化这个光度误差,可以refine current frame中的2d featur像素位置。这里我们使用的patch来描述feature points,因为keyframes和current frame之间的距离要比previous frame与current frame之间的距离大,所以patch size要选的大一些。

4.3 Pose Optimization: refine current frame camera pose

通过最小化reprojection error来refine current frame camera pose。

4.4 New Keyframe Decision

如果选择了current frame为keyframe,对左右数目图像提取ORB features,keypoints分为两种

双目恢复深度的公式


上述两种keypoints的划分原则是,如果得到的depth小于baseline 的40倍,认为是Stereo Keypoints(比较近),否则认为是Monocular Keypoints(比较远)

总结来看,比较近的feature通过双目模型来恢复深度(近处点可靠),比较远的点使用MVG的三角化来恢复深度。

5 Mapping

5.1 Inserting New Keyframe

在新的keyframe得到的时候,我们有了2d-3d的correspondence,但是这不是计算ORB 描述子得到的,而是通过前面tracking中的直接法得到的correspondence。
而之所以计算ORB feature points是为了得到new mappoints的深度。

5.2 Finding Overlap Keyframes

如何找到距离current frame最近的10个overlap的keyframes呢?我理解的就是直接计算camera pose的距离。

5.3 Triangulating

之所以进行这一步,就是应为深度滤波器方法得到的深度值不准确(由于noise initialization 和 fast motion)。
本系统中使用三角化用来估计深度和生成新的mappoints。

通过match ORB features between a current keyframe and overlap keyframes。这一步通过使用epipolar constraint, non-maximum suppression and cross check来剔除部分outliers。
match过后,进行三角化计算得到深度,根据Depth positivity in both cameras, parallax and reprojection errors再剔除一些outliers。

5.4 Bundle Adjustment

Local BA使用10个keyframes的sliding window。
Global BA是在一个perid结束之后进行的,优化所有的地图点。
stereo constraint is performed to improve the system,这句话没懂。。。

对于两种keypoints的投影公式如下


Local BA优化目标函数如下
image_1dh6env78ldkc2l6gqo3oilu20.png-34.4kB

global BA和local BA类似,但是global BA的第一帧keyframe上的点被fix,不进行优化。这里使用LM算法进行优化。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注