视觉SLAM的主要功能模块分析
视觉SLAM的主要功能模块分析
一.基本概念
SLAM (simultaneous localization and mapping),也称为CML (Concurrent Mapping and Localization), 即时定位与地图构建,或并发建图与定位。 SLAM最早由Smith、Self和Cheeseman于1988年提出。
SLAM过程可以描述为:机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和地图进行自身定位,同时在自身定位的基础上建造增量式地图,实现机器人的自主定位和导航。
(1)定位(localization):机器人必须知道自己在环境中位置。
(2)建图(mapping):机器人必须记录环境中特征的位置(如果知道自己的位置)
(3)SLAM:机器人在定位的同时建立环境地图。其基本原理是运用概率统计的方法,通过多特征匹配来达到定位和减少定位误差的。
二.Visual SLAM(视觉SLAM)
摄像机是唯一的外部传感器。它被称为视觉障碍。在过去的10年中,发表的文章反映了一种明显的趋势,即将视觉作为唯一的外部感官感知系统来解决SLAM问题(Paz等人。2008年;Davison等人。2007年;克莱恩和默里2007年;萨雷斯和埃斯科拉诺2006年;皮涅斯和塔尔多斯2008年)。这一趋势的主要原因是基于摄像机的系统能够获取距离信息,并能够检索环境的外观、颜色和纹理,从而使机器人能够集成其他高级任务,如检测和 对人和地方的认可。此外,相机更便宜、更轻、功耗更低。不幸的是,由于以下原因,数据中可能存在错误:相机分辨率不足、光线变化、缺少纹理的表面、快速移动造成的图像模糊等因素。
三.视觉SLAM的框架
1.传感器信息读取 在视觉SLAM中主要为相机图像信息的读取和预处理。如果在机器人中,还可能有码盘,惯性传感器等信息的读取和同步。
2.视觉里程计 (visual odometry,VO) 视觉里程计的任务是估算相邻图像间相机运动,以及局部地图的样子。vo又称为前端。
3. 后端优化(optimization)。后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对他们进行优化,得到全局一致的轨迹和地图。由于在VO之后,又称为后端。
4. 回环检测(loop closing)。 回环检测判断机器人是否到达过去先前的位置,如果检测到回环,它会把信息提供给后端进行检测。
5. 建图(mapping)。它根据估计的轨迹,建立与任务要求对应的地图。
四.Visual odometry视觉里程计
在机器人学和计算机视觉中,视觉里程计是通过分析相关的摄像机图像来确定机器人的位置和方向的过程。它已经被广泛应用于各种机器人领域,比如火星探测漫游者。
视觉里程计关心的是相邻图像之间的相机运动,最简单的当然是两张图像之间的运动关系。计算机是如何通过图像确定相机的运动的。在图像上,我们只能看到一个个的像素,知道他们是某些空间点在相机的成像平面投影的结果。所以必须先了解相机跟空间点的几何关系。vo能够通过相邻帧间的图像估计相机运动,并恢复场景的空间结构,称它为里程计。称它为里程计是因为它只计算相邻时刻的运动,而和再往前的过去信息没有关联。
相邻时刻运动串联起来,就构成了机器人的运动轨迹,从而解决了定位问题。
另一方面,根据每一时刻的相机位置,计算出各像素对应的空间点的位置,就得到了地图。
问题:累计漂移(accumulating drift)。
五.后端优化
后端优化主要是处理slam过程中噪声的问题。任何传感器都有噪声,所以除了要处理“如何重图像中估计出相机运动”,还要关心这个估计带有多大的噪声。
面对的主要问题:
如何从这些带有噪声的数据中估计整个系统的状态,以及这个状态估计的不确定行有多大——这称为最大后验概率估计(maximum-a-posteriori,MAP)。
这个的状态既包括机器人自身的运动,也包括地图。
对运动主体自身和周围环境空间不确定行的估计。
前端给后端提供待优化的数据,以及这些数据的初始值,而后端负责整体的优化过程,它往往面对的只有数据,不必关系这些数据来自哪里。在视觉slam中,前端和计算接视觉研究领域更为相关,比如图像的特征提取与匹配等,后端则主要是滤波和非线性优化算法。
六、Loop Detection 回环检测
回环检测,又称闭环检测(Loop closuredetection),是指机器人识别曾到达场景的能力。如果检测成功,可以显著地减小累积误差。
回环检测目前多采用词袋模型(Bag-of-Word),研究计算机视觉的同学肯定不会陌生。它实质上是一个检测观测数据相似性的问题。在词袋模型中,我们提取每张图像中的特征,把它们的特征向量(descriptor)进行聚类,建立类别数据库。比如说,眼睛、鼻子、耳朵、嘴等等(实际当中没那么高级,基本上是一些边缘和角)。假设有10000个类吧。然后,对于每一个图像,可以分析它含有数据库中哪几个类。以1表示有,以0表示没有。那么,这个图像就可用10000维的一个向量来表达。而不同的图像,只要比较它们的向量即可。
回环检测也可以建成一个模型识别问题,所以你也可以使用各种机器学习的方法来做,比如什么决策树/SVM,也可以试试Deep Learning。不过实际当中要求实时检测,没有那么多时间让你训练分类器。所以SLAM更侧重在线的学习方法。
七.Mapping 建图
地图的组织构建主要有以下几种:
路标地图:
地图由一堆路标点组成,EKF中的地图就是这样的。但是,这种地图对展示很不友好。
度量地图:
通常指2D/3D的网格地图,也就是大家经常见的那种黑白的/点云式地图。点云地图比较酷炫,很有种高科技的感觉。它的优点是精度比较高,比如2D地图可以用0-1表示某个点是否可通过,对导航很有用。缺点是相当吃存储空间,特别是3D,把所有空间点都存起来了,然而大多数角角落落里的点除了好看之外都没什么意义。
拓扑地图:
拓扑地图是比度量地图更紧凑的一种地图。它将地图抽象为图论中的”点”和”边”,使之更符合人类的思维。比如说我要去五道口,不知道路,去问别人。那人肯定不会说,你先往前走621米,向左拐94.2度,再走1035米……(这是疯子吧)。正常人肯定会说,往前走到第二个十字路口,左拐,走到下一个红绿灯,等等。这就是拓扑地图。
混合地图。
综合各种地图的优点。
1 基于状态空间描述的一类算法,如扩展卡尔曼滤波(Extended Kalman Filter,EKF )、压缩扩展卡尔曼滤波(CompressedExtended Kalman Filter, CEKF )等。
2 基于样本集描述的一类算法,如Rao-Blackwellized 粒子滤波 SLAM,快速SLAM(FastSLAM)、DP-SLAM等。
3 基于信息空间描述的一类算法,如扩展信息滤波(Extended Information Filter, EIF)、稀疏连接-树滤波(Thin Junction-Tree Filter, TJTF)等。
4 基于差异描述的一类算法,如扫描匹配(Scan Matching)。