蓝色 紫色 红色
SLAM:同时定位与地图构建
”搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动“
若传感器主要为相机,即为视觉SLAM。
两类传感器
安装在环境中的(eg. 二维码Marker/GPS/导轨/磁条)
要满足外部环境约束才能进行定位工作。(eg. 要有GPS信号,要能铺设导轨)
携带于机器人本体上的(IMU/激光/相机)
IMU:惯性测量单元-wiki,是测量物体三轴姿态角(或角速率)以及加速度的装置。
测到的通常都是一些间接的物理量而不是直接的位置数据,从这些物理量推测自己的位置。
- 轮式编码器-轮子转动的角度
- IMU-测量运动的角速度和加速度
- 相机和激光则读取外部环境的某种观测数据
优点:无环境要求,适用于未知环境。
激光 -Lasers
好处:精确、快速、较长的研究历史(成熟的方法) 坏处:重、贵
相机 -Camera
以一定速率拍摄周围的环境,形成一个连续的视频流。普通的摄像头能以每秒钟30 张图片的速度采集图像,按照工作方式分为单目、双目、深度相机。 好处:便宜、轻巧、信息丰富 坏处:需要较高的计算资源 (处理视频流),需要在一定的工作条件下 (eg. 光线要充足、不能被遮挡、环境要是有纹理的 如果是一片白,并不能够通过相片的移动来估计自身的运动 )
相机的本质
-
以二维投影形式记录了三维世界的信息 -
丢掉了一个维度:距离
各类相机的主要区别:是否有深度信息
- 单目:没有深度,必须通过移动相机产生深度 Moving View Stereo
- 双目:通过视差计算深度 Stereo
- RGBD:通过物理方法测量深度
单目相机 -Monocular
无法通过单个图片来计算场景中物体离我们的距离,而距离信息是SLAM中非常关键的部分。 由于单目相机只是三维空间的二维投影,所以,如果我们真想恢复三维结构,必须移动相机的视角。
单目SLAM中同理,我们必须移动相机之后,才能估计它的运动(Motion),同时估计场景中物体的远近和大小,不妨称之为结构(Structure)。
Motion:相机往右 -> 图像中物体往左 Sturcture:近处物体移动快,远处物体移动慢
相机移动时,这些物体在图像上的运动,形成了视差。通过视差可以定量判断物体的远近。
单目相机最大缺点在于 无法确定真实的尺度 -尺度不确定性
单目相机可以知道物体的相对远近,却无法感知真实物体的大小。
把相机运动和场景大小同时缩放k倍,单目所看到的像都是一样的。即单目SLAM 估计的轨迹和地图,将与真实的轨迹和地图,相差一个因子:尺度(Scale)
单目SLAM应用难度大本质原因是:通过单张图像无法确定深度(两个原因:平移之后才能计算深度,以及无法确定真实尺度)
双目相机 -Stereo
双目相机和深度相机的目的,在于通过某种手段测量物 体离我们的距离,克服单目无法知道距离的缺点。如果知道了距离,场景的三维结构就可以通过单个图像恢复出来,也就消除了尺度不确定性。 双目相机由两个单目相机组成,但这 两个相机之间的距离(称为基线(Baseline))是已知的,我们通过这个基线来估计每个像素的空间位置,可以再扩展成多目相机。
注意:双目相机测量到的深度范围与基线相关。基线距离越大,能够测量到的就越远。
双目相机的距离估计是比较左右眼的图像获得的,并不依赖其他传感设备,适用于室内外环境。
双目或多目相机的缺点是配置与标定均较为复杂,其深度量程和精度受双目的基线与分辨率限制,而且视差的计算非常消耗计算资源,需要使用GPU 和FPGA 设备加速后,才能实时输出整张图像的距离信息。计算量 是目前双目的主要限制原因之一。
深度相机 -RGB-D
最大的特点 是可以通过红外结构光或Time-of-Flight(ToF)原理,像激光传感器那样,通过主动向物体发射光并接收返回的光,测出物体离相机的距离。物理测量,相比双目可节省大量计算
目前常用的RGB-D 相机包括Kinect/Kinect V2、Xtion live pro、Realsense 等。
现在多数 RGB-D 相机还存在测量范围窄、噪声大、视野小、易受日光干扰、无法测量透射材质等诸多问题,在SLAM 方面,主要用于室内SLAM,室外则较难应用。
经典视觉SLAM框架
视觉里程计 ?Visual Odometry
实际的里程计:只计算相邻时刻的运动,而和过去的信息无关。
视觉里程计:关心相邻图像之间的相机运动,并需要精确地测量这段运动信息(eg. 旋转了多少度,平移了多少厘米)。
视觉SLAM 中,我们只能看到一个个像素,知道它们是某些空间点在相机的成像平面上投影的结果。通过相机成像原理和空间点的几何关系可以定量估计相机运动。
VO 能够通过相邻帧间的图像估计相机运动,并恢复场景的空间结构。
存在的问题:仅通过视觉里程计来估计轨迹,将不可避免地出现累计漂移(Accumulating Drift)。视觉里程计(在最简单的情况下)只估计两个图像间运动,每次估计的误差都会传递到下一时刻 解决漂移问题:后端优化和回环检测(回环检测把”机器人回到原始位置“的事情检测出来,后端优化根据该信息校正整个轨迹形状)
后端优化 ?Optimization
后端优化主要处理SLAM过程中的噪声问题。
后端优化要考虑的问题,就是如何从这些带有噪声的数据中,估计整个系统的状态,以及这个状态估计的不确定性有多大——这称为最大后验概率估计(Maximum-a-Posteriori,MAP)。这里的状态既包括机器人自身的轨迹,也包含地图。
在视觉SLAM 中,前端和计算机视觉研究领域更为相关,比如图像的特征提取与匹配等,后端则主要是滤波与非线性优化算法。
SLAM 问题的本质:对运动主体自身和周围环境空间不确定性的估计。
回环检测?Loop Closing
回环检测,又称闭环检测(Loop Closure Detection),主要解决位置估计随时间漂移的问题。
地图存在的主要意义,是为了让机器人知晓自己到达过的地方。为了实现回环检测,我们需要让机器人具有识别曾到达过的场景的能力。(eg. 在某个位置放置二维码,再次识别到它的时候即是回到了原点)
我们更希望能够通过相机得到的图像本身来完成这一任务,eg.通过判断图像间的相似性,来完成回环检测。
建图?Mapping
建图(Mapping)是指构建地图的过程。地图是对环境的描述,但这个描述并不是固定的,需要视SLAM 的应用而定,例如有的场景只需要知道哪里有障碍物哪里能够通过,有的场景需要重建三位地图信息。
度量地图 ? Metric Map
度量地图强调精确地表示地图中物体的位置关系,通常我们用稀疏(Sparse)与稠密(Dense)对它们进行分类。
我们选择一部分具有代表意义的东西,称之为路标(Landmark),那么一张稀疏地图就是由路标组成的地图,而不是路标的部分就可以忽略掉。 定位
稠密地图通常按照某种分辨率,由许多个小块组成。二维度量地图是许多个小格子(Grid),三维则是许多小方块(Voxel)。(耗费大量的存储空间,且多数细节无用) 一般一个小块含有占据、空闲、未知三种状态,以表达该格内是否有物体。当我们查询某个空间位置时,地图能够给出该位置是否可以通过的信息。 导航 (大规模度量地图有时会有一致性问题 很小的转向误差会导致 物体重叠,地图失效 )
拓扑地图 ?Topological Map
拓扑地图是一个图 (Graph) ,由节点和边组成,只考虑节点间的连通性,更强调地图元素之间的关系。拓扑地图不擅长表达具有复杂结构的地图。
难点问题:如何对地图进行分割形成结点与边,又如何使用拓扑地图进行导航与路径规划。
|