一、传感器
1.1 安装位置分类
根据安装位置分为两类:
携带于机器人本体 上的传感器,比如激光传感器、相机、轮式编码器、惯性测量单元(Inertial Measurement Unit, IMU)等等,它们测到的通常都是一些间接的物理量而不是直接的位置数据。例如, 轮式编码器会测到轮子转动的角度、IMU 测量运动的角速度和加速度,相机和激光则读取 外部环境的某种观测数据。我们只能通过一些间接的手段,从这些数据推算自己的位置。虽然这听上去是一种迂回战术,但更明显的好处是,它没有对环境提出任何要求,使得这种定位方案可适用于未知环境。
1.2 相机
它往往更加简单,不携带昂贵的镜头,以一定速率拍摄周围的环境,形成一个连续的视频流。普通的摄像头能以每 秒钟 30 张图片的速度采集图像,高速相机则更快一些。按照相机的工作方式,我们把相机分为单目(Monocular)、双目(Stereo)和深度相机(RGB-D)三个大类。
直观看来,单目相机只有一个摄像头,双目有两个,而 RGB-D 原理较复杂,除了能够采集到彩色图片之外,还能读出每个像素离相机的距离。
二、视觉SLAM框架
整个视觉 SLAM 流程分为以下几步:
1. 传感器信息读取。在视觉 SLAM 中主要为相机图像信息的读取和预处理。如果在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。
2. 视觉里程计 (Visual Odometry, VO)。视觉里程计任务是估算相邻图像间相机的运动, 以及局部地图的样子。VO 又称为前端(Front End)。
3. 后端优化(Optimization)。后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在 VO 之后, 又称为后端(Back End)。
4. 回环检测(Loop Closing)。回环检测判断机器人是否曾经到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。
5. 建图(Mapping)。它根据估计的轨迹,建立与任务要求对应的地图。
如果把工作环境限定在静态、刚体,光照变化不明显、没有人为干扰的场景,那么,这个SLAM 系统是相当成熟的了。
2.1 视觉里程计
视觉里程计关心相邻图像之间的相机运动(只计算相邻时刻的运动,而和再往前的过去的信息没有关联,VO 就像一种只有很短时间记忆的物种一样),最简单的情况当然是两张图像之间的运动关系。例如,当我们看到图 2-8 时,会自然地反应出右图应该是左图向左旋转一定角度的结果。
为了定量地估计相机运动,必须在了解相机与空间点的几何关系之后进行。 VO 能够通过相邻帧间的图像估计相机运动,并恢复场景的空间结构。
现在,假定我们已有了一个视觉里程计,估计了两张图像间的相机运动。那么,只要 把相邻时刻的运动“串”起来,就构成了机器人的运动轨迹,从而解决了定位问题。另一 方面,我们根据每个时刻的相机位置,计算出各像素对应的空间点的位置,就得到了地图。 这么说来,有了 VO,是不是就解决了 SLAM 问题呢?
然而,仅通过视觉里程计来估计轨迹,将不可避免地出现累计漂移(Accumulating Drift)。这是由于视觉里程计(在最简单的情况下)只估计两个图像间运动造成的。我们知道,每次估计都带有一定的误差,而由于里程计的工作方式,先前时刻的误差将会传递到下一时刻, 导致经过一段时间之后,估计的轨迹将不再准确。比方说,机器人先向左转 90 度,再向右转了90 度。由于误差,我们把第一个 90 度估计成了 89 度。那我们就会尴尬地发现,向 右转之后机器人的估计位置并没有回到原点。更糟糕的是,即使之后的估计再准确,与真实值相比,都会带上这-1 度的误差。
这也就是所谓的漂移(Drift)。它将导致我们无法建立一致的地图。你会发现原本直的走廊变成了斜的,而原本 90 度的直角变成了歪的——这实在是一件很难令人忍受的事情! 为了解决漂移问题,我们还需要两种技术:后端优化和回环检测。回环检测负责把“机器 人回到原始位置”的事情检测出来,而后端优化则根据该信息,校正整个轨迹的形状。
2.2 后端优化
后端优化主要指处理 SLAM 过程中噪声的问题。虽然我们很希望所有的数据都是准确的,然而现实中,再精确的传感器也带有一定的噪声。便宜的传感器测量误差较大,昂贵的则较小,有的传感器还会受磁场、温度的影响。所以,除了解决“如何从图像估计出相机运动”之外,我们还要关心这个估计带有多大的噪声,这些噪声是如何从上一时刻传递到下一时刻的、而我们又对当前的估计有多大的自信。后端优化要考虑的问题, 就是如何从这些带有噪声的数据中,估计整个系统的状态,以及这个状态估计的不确定性有多大——这称为最大后验概率估计(Maximum-a-Posteriori,MAP)。这里的状态既包括机器人自身的轨迹,也包含地图。
- 在 SLAM 框架中,前端给后端提供待优化的数据,以及这些数据的初始值。后端负责整体的优化过程,它往往面对的只有数据,不必关心这些数据到底来自什么传感器。
- 在视觉 SLAM 中,前端和计算机视觉研究领域更为相关,比如图像的特征提取与匹配等,后端则主要是滤波与非线性优化算法。
为了解决 SLAM,我们需要状态估计理论,把定位和建图的不确定性表达出来,然后采用滤波器或非线性优化,去估计状态的均值和不确定性(方差)。
2.3 回环检测
回环检测,又称闭环检测(Loop Closure Detection),主要解决位置估计随时间漂移的问题。假设实际情况下,机器人经过一段时间运动后回到了原点,但是由于漂移,它的位置估计值却没有回到原点。怎么办呢?我们想,如果有某种手段,让机器人知道“回到了原点”这件事,或者把“原点”识别出来,我们再把位置估计值“拉”过 去,就可以消除漂移了。这就是所谓的回环检测。
为了实现回环检测,我们需要让机器人具有识别曾到达过的场景的能力。我们可以判断图像间的相似性,来完成回环检测。如果回环检测成功,可以显著地减小累积误差。由于图像的信息非常丰富,使得正确检测回环的难度也降低了不少。
视觉回环检测,实质上是一种计算图像数据相似性的算法
在检测到回环之后,我们会把“A 与 B 是同一个点”这样的信息告诉后端优化算法。 然后,后端根据这些新的信息,把轨迹和地图调整到符合回环检测结果的样子。这样,如果我们有充分而且正确的回环检测,就可以消除累积误差,得到全局一致的轨迹和地图。
2.4 建图
建图(Mapping)是指构建地图的过程。地图是对环境的描述,但这个描述并不是固定的,需要视 SLAM 的应用而定。
地图的形式随 SLAM 的应用场合而定。大体上讲,它们可以分为度量地图与拓扑地图两种。
度量地图强调精确地表示地图中物体的位置关系,通常我们用稀疏(Sparse)与稠密 (Dense)对它们进行分类。稀疏地图进行了一定程度的抽象,并不需要表达所有的物体。例如,我们选择一部分具有代表意义的东西,称之为路标(Landmark),那么一张稀疏地图 就是由路标组成的地图,而不是路标的部分就可以忽略掉。相对的,稠密地图着重于建模所有看到的东西。对于定位来说,稀疏路标地图就足够了。而用于导航时,我们往往需要稠密的地图(否则撞上两个路标之间的墙怎么办?)。稠密地图通常按照某种分辨率,由许多个小块组成。二维度量地图是许多个小格子(Grid),三维则是许多小方块(Voxel)。一 般地,一个小块含有占据、空闲、未知三种状态,以表达该格内是否有物体。当我们查询 某个空间位置时,地图能够给出该位置是否可以通过的信息。这样的地图可以用于各种导航算法,如 A*,D*等等。但是我们也看到,这种地图需要存储每一个格点的状态,耗费大量的存储空间,而且多数情况下地图的许多细节部分是无用的。另一方面,大规模度量地图有时会出现一致性问题。很小的一点转向误差,可能会导致两间屋子的墙出现重叠,使得地图失效。文章来源:https://www.toymoban.com/news/detail-526628.html
相比于度量地图的精确性,拓扑地图则更强调地图元素之间的关系。拓扑地图是一个 图(Graph),由节点和边组成,只考虑节点间的连通性,例如 A,B 点是连通的,而不考虑如何从 A 点到达 B 点的过程。它放松了地图对精确位置的需要,去掉地图的细节问题, 是一种更为紧凑的表达方式。然而,拓扑地图不擅长表达具有复杂结构的地图。如何对地 图进行分割形成结点与边,又如何使用拓扑地图进行导航与路径规划,仍是有待研究的问题。文章来源地址https://www.toymoban.com/news/detail-526628.html
到了这里,关于【SLAM14讲】02 视觉SLAM基本架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!