视觉SLAM的基础概念

1、VSLAM的模块划分

主要有5个模块:

Sensor data process-----》Visual odometry----》backend(optimization)---》Mapping---》loop closure detection

 当前研究状态是视觉SLAM在刚性静态环境中基本得到解决。但是面临运算速度慢,算法不够鲁棒等问题。

VO用于估计帧与帧之间的ego-motion;

Optimization用于handle global trajectory;

Loop closure用于correct相机的drift;

Map用于描述环境。

 

2、Visual Odometry视觉里程计

Feature-based 方法:

Step1:特征提取,当前有FAST corner,SIFT,SURF,ORB等

Step2:特征匹配,有Brute-force or KNN 特征匹配

Step3:估计ego-motion,可以使用PnP或者bundle Adjustment(BA)算法

比如经典的算法 MonoSLAM,PTAM, ORB-SLAM。

目前基于特征的方法是主流方式。

 Direct Methods:

 

最小化两帧之间的灰度之差,这种方法的缺点是相机移动太快,光照变化明显,运算量太大。

该算法可以导出稠密的点云图。比如DTAM,RGBD-SLAM-V2等算法。这些算法一般是需要RGB-D的输入配置的。

 还有一种是半稠密的方法,比如LSD-SLAM, DSO, SVO等算法。

 视觉里程计之后得到了相机的运动信息和图像的三维信息,那么是否就完美了吗?其实不然,还有如下问题需要考虑:

相机漂移问题,camera drift during motion-----》解决方案是global optimization

环境中的其他部分的不连续问题-----》解决方案是:loop closure或者loop detection

相机在快速运动或者遮挡情况下容易跟丢的问题-----》解决方案:Re-locallization 重定位

3、后端优化 backend optimization

目前有两种主流算法,一种是基于滤波器的,准确的说是基于卡尔曼滤波器的,另一种是优化技术,比如bundle adjustment 或者叫束优化技术。

基于滤波的算法:经典算法是EKF。EKF是Extended Kalman Filter。该算法很难表现回环,而且线性化错误比较多。所以当前基本没有在研究了。

基于全局优化的算法:当前主流算法。比如graph-based slam优化或者叫做full-slam。优化图中的节点是优化变量,图中的边是error terms或者constraints。优化变量就是求解的东西,可以是相机的运动情况,也可以是空间点的位置。比如Pose-graph中,优化变量就是相机的pose。

优化的工具有:g2o,  ceres,  GTSAM  etc…

4、Loop closure 回环

回环的目的就是为了recognize visited place,是为了解决在VO中的累积漂移问题。

Loop closure主要有两种方式:

一种基于Odometry的方法,即如果两个相机的position很靠近,那么可以认为是loop。这种算法假设计算出的相机位置是很准的。反过来看,如果计算的位置很准的话就不会出现相机漂移了,也就不需要回环了。

另一种是基于appearance的方法,即如果两个图形看上去很相似,那么可以认为相机已经重叠,回环确认。这个方法是主流方法。

在appearance-based方法中,关键问题是如何度量两个图像帧之间的相似性。当前的成熟的方法是词袋模型,也叫Bag of words。大致如下:

 

 

当然词袋算法不是最好的。如何确定两个图像是否一样,这个问题可以和最近流行的ML结合,比如Auto-encodersCNN,就是结合图像分类技术来判断两个图片是否一致。

5、Map

Map是SLAM的输出,其实没有一个具体的形式,主要取决于SLAM用于什么应用。

目前map主要是两类:一类是metric map,描述每个点是否可以走,另一类是topological map,需要描述空间中的几个地方是否可达,对于可达的目的之间具体如何走是不关心的。

 

Metric地图和拓扑地图之间的优缺点分析:

 

地图的一些应用有:

导航

 

重构

 

 

猜你喜欢

转载自blog.csdn.net/stevedish_xiaojia/article/details/83065132