navgationkit-docs-sphinx/source/version_two/development/vslamintro.md

107 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 视觉SLAM
>本文主要对SLAM技术进行介绍叙述了VSLAM的框架及关键技术和方法并总结了目前已有的VSLAM系统和相关资料。
## 目录
1. SLAM技术介绍
2. VSLAM系统及相关资料介绍
3. SLAM框架
1. SLAM的基本过程
2. SLAM的主要模块
## 1.SLAM技术介绍
**SLAM**全称是Simultaneous Localization and Mapping即**同时定位与建图**,指机器人在自身位置不确定的条件下,在完全未知环境中创建地图同时利用地图进行自主定位和导航。因此可知SLAM的主要工作是**定位**以及**建图**。
![](./imgs/slamintro1.jpg)
目前SLAM有很多实现方法根据使用传感器不同主要分为
**1激光雷达传感器**
**2视觉传感器**
**视觉SLAM**Visual SLAM 简称VSLAM包括使用**单目SLAM**、**双目SLAM**和以**Kinect**为代表的深度摄像头的**RGB-D SLAM**。相比使用激光雷达传感器,视觉传感器的成本更低,因此也越来越受青睐。
目前SLAM被广泛应用于无人驾驶汽车、无人机、VR和AR等领域。
下面是宾大的教授kumar做的特别有名的一个demo是在无人机上利用二维激光雷达做的SLAM。
![](./imgs/vslam1.gif)
## 2.VSLAM系统及相关资料介绍
目前在VSLAM领域实现较好的SLAM系统有
- 单目、双目SLAM:
(1).**PTAM**(Parallel Tracking And Mapping):2007年很流行的SLAM项目是**第一个**使用BA完成**实时SLAM**的系统。但其缺乏**回环检测和重定位等功能**只能作用于小规模的场景且稳定性也不是很高。http://www.robots.ox.ac.uk/~gk/PTAM/
(2).**DTAM**(Dense tracking and mapping in real-time):2011年Direct SLAM方法的**鼻祖**;
(3).**LSD-SLAM**(Large-Scale Direct Monocular SLAM):2014年一个半稠密SLAM系统。http://vision.in.tum.de/research/vslam/lsdslam
(4).**ORB-SLAM**:2015年一个比较完整的基于特征点的SLAM系统。
http://webdiis.unizar.es/~raulmur/orbslam/
- RGB-D SLAM:
(1).**KinectFusion** 2011
http://www.microsoft.com/en-us/research/project/kinectfusion-project-page/
(2).**RGBD-SLAM2** 2014 http://felixendres.github.io/rgbdslam_v2/
(3).**ElasticFusion** 2015 http://www.imperial.ac.uk/dyson-robotics-lab/downloads/elastic-fusion/
当然除了上述项目的学习外对于slam的学习入门有一些经典教材如
**Multiple View Geometry in Computer Vision (Second Edition)**
http://www.robots.ox.ac.uk/~vgg/hzbook/)也有中文版为《计算机视觉中的多视图几何》。
**Robotics Vision and Control**http://www.petercorke.com/RVC/ 本书是面向实践的,详细介绍了机器人和机器视觉。也有了中文版,叫做《机器人学、机器视觉与控制》。
此外对于slam入门学习推荐高博的**一起做RGB-D SLAM**其博客为半闲居士http://www.cnblogs.com/gaoxiang12/p/4633316.html
## 3.SLAM框架
### 3.1 SLAM的基本过程
描述为:机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和传感器数据进行自身定位,同时建造增量式地图。
1**定位(localization)**:机器人必须知道自己在环境中位置。
2**建图(mapping)**:机器人必须记录环境中特征的位置(如果知道自己的位置)
3**SLAM**:机器人在定位的同时建立环境地图。其基本原理是运过概率统计的方法,通过多特征匹配来达到定位和减少定位误差的。
![](./imgs/vslam2.png)
### 3.2 VSLAM的主要模块
视觉SLAM主要分为几个模块**数据采集、视觉里程计(Visual Odometry)、后端优化、建图(Mapping)、闭环检测(Loop closure detection)**。如下图所示:
![](./imgs/vslam3.png)
#### 3.2.1 视觉里程计
视觉里程计是利用一个图像序列或者一个视频流,计算摄像机的方向和位置的过程。一般包括图像获取后、畸变校正、特征检测匹配或者直接匹配对应像素、通过对极几何原理估计相机的旋转矩阵和平移向量。
![](./imgs/vslam4.jpg)
#### 3.2.2 后端优化
理论上来说如果视觉里程计模块估计的相机的旋转矩阵R和平移向量t都正确就能得到完美的定位和建图了。但实际试验中我们得到的数据往往有很多噪声且由于传感器的精度、错误的匹配等都对造成结果有误差。并且由于我们是只把新的一帧与前一个关键帧进行比较当某一帧的结果有误差时就会对后面的结果产生**累计误差**,导致误差越来越大。**为了解决这个问题,引入后端优化**。
后端优化一般采用捆集调整(BA)、卡尔曼滤波(EKF)、图优化等方式来解决。其中**基于图优化的后端优化**效果最好。Graph-based SLAM一般使用g2o求解器进行图优化计算。
![](./imgs/vslam5.jpg)
#### 3.2.3 闭环检测
后端优化可能得到一个比较优的解,但当运动回到某一个之前去过的地方,如果能认出这个地方,找到并与当时的关键帧进行比较,就可以得到比单用后端优化更准确更高效的结果。闭环检测就是要解决这个问题。
闭环检测有两种方式,一是根据估计出来的相机的位置,看是否与之前否个位置邻近;**另外一种是根据图像,自动识别出来这个场景之前到过,并找到当时的关键帧**。目前常用的后一种方法其实是一个非监督的模式识别问题。比较常用的方法是采用Bag-of-Words(BOW)**ORB-SLAM**就是使用这个方法来进行**闭环检测**。
![](./imgs/vslam6.jpg)