Advertisement

SLAM学习:视觉SLAM框架

阅读量:

视觉SLAM经典框架

图1 整体视觉SLAM流程图

整个视觉SLAM流程包括以下步骤:

  1. 传感器数据采集。在视觉SLAM系统中主要涉及相机成像数据的采集与预处理操作。如果系统集成在机器人平台上,则还需完成码盘、惯性测量等传感器数据的采集与同步处理。
  2. 视觉里程计(Visual Odometry, VO)主要负责估算前后帧之间相机的姿态变化及其局部环境特征描述。该模块通常位于系统架构中的前端处理环节。
  3. 后端优化系统接收来自不同时间点的视觉里程计优化结果,并通过全局最优算法对这些数据进行整合处理,最终输出一致全局定位和环境地图。
  4. 回环检测机制能够识别机器人是否已访问过之前的路径位置,并将相关状态信息传递给后端优化模块以辅助轨迹重测。
  5. 建图模块基于定位轨迹生成与任务需求对应的环境地图构建过程。

视觉里程计

视觉里程计关注的是相邻图像之间的相机运动关系。最基础的情况通常是两张图像之间的相对运动关系。例如,在观察下图时,我们会自然地推断右图应是左图向左旋转一定角度的结果(在视频场景中这种推断显得更为自然)。让我们深入思考:我们是如何得出‘相机向左旋转’这一结论的呢?人类长期进化过程中发展出敏锐的视觉感知能力,并以此估算自身位置。尽管如此,在面对这种现象时我们却往往难以用精确的语言描述这种直觉体验。观察到时,我们会自然地认为,在这个场景中离我们近的是吧台而非远处的柜子部分。当相机发生向左转动时,在视野中会首先出现靠近我们的吧台区域而右侧远处的柜子则逐渐被移出视野范围之外。基于这些信息判断我们可以得出结论:相机应当是向左完成了一定幅度的角度旋转

相机拍摄到的图片与人眼反应的运动方向。

但是,在深入探讨这一问题时,请注意以下几点:首先,请问相机是否能够准确测量出其旋转角度(以度为单位)和移动距离(以厘米为单位)?对于这类具体的数值测量问题来说,在人类的认知范围内确实存在一定的难度。然而,在计算机视觉领域,则必须精确地处理这类数据信息才能实现有效的运动分析与理解。因此我们需要探讨的是:计算机是如何从图像数据中推导出相机运动信息的?

之前也提到过,在这一领域的研究中存在许多看似简单实则极具挑战性的问题。具体来说,在这里我们主要关注的是图像处理与理解这一核心内容。

在这里我们特别强调的是图像被系统化地转化为一个数值矩阵的形式。其中所蕴含的信息对人类而言难以直接解读(这也是当前机器学习模型需要深入研究的核心问题之一)。

值得注意的是,在视觉SLAM技术中我们通常只知道这些图像中的一个个像素及其对应的三维空间位置信息。

这些像素实际上是来自不同空间位置的三维物体经由相机成像过程映射到二维平面上的结果。

基于此可知想要准确推导出它们之间的运动关系我们需要深入理解相机与空间点之间的几何关系以及两者之间的相互作用机制。

为了阐述这一几何关系及其VO(视觉 occupancy mapping)实现方法的本质内涵,在此有必要为读者建立基本概念。具体而言,在开始详细讲解之前,请您先掌握核心要素:VO技术仅需掌握相邻帧间的图像变化规律来推导出相机运动参数,并通过这一信息重建场景的空间结构模型。这种称谓源于其与里程计设备相似的功能特性——即仅具备持续更新当前时刻与前一时刻之间的相对运动能力,并不具备对历史运动记录的记忆功能。从这个角度来看,在某种程度上可以说:VO系统就像一种具有短暂记忆能力的信息处理机制。

在此基础上(原有句子),我们可以将连续帧之间的相对位姿关系进行累加运算(原有句子),从而实现机器人位置的确定(原有句子)。具体而言(原有句子),基于各个时间点的相机姿态信息(原有句子),我们可以计算出每个像素在不同时刻所对应的三维空间位置(原有句子)。由此可知,在应用视觉 Odometry(VO)方法时(原有句子),通过不断更新状态量即可逐步构建起完整的环境地图(原有句子)。因此,在这种框架下(原有句子),定位与建图任务得到了统一而优雅地解决(原有句子)。

视觉里程计无疑是SLAM体系中不可或缺的关键工具。本节我们将深入探讨这一技术。尽管如此,在仅依赖视觉里程计进行轨迹估计时,不可避免地会出现累积漂移(Accumulating Drift)。这种现象的根本原因在于,在最简单的场景下,该技术仅利用两个连续图像之间的运动信息来进行计算。由于每一步的估算都不可避免地存在一定程度的误差,并且基于里程计的工作原理——即先前时刻的误差会依次传递到下一时刻——经过一段时间后积累起来的误差会导致估计轨迹偏离真实位置。例如,在机器人完成一系列动作后发现其最终定位并未回到初始位置时就会引发这个问题。即使后续测量更加精确,在与真实值进行对比时依然会受到早期误差的影响而产生偏差。

累积误差与回环检测的校正结果。

这也被称为漂移现象(Drift)。它会使得我们在建立一致地图时遇到严重困难。你可能会意识到原本笔直的走廊变得倾斜了,并且原本成直角的地方也变得歪斜了——这种状况确实难以让人容忍!为了应对漂移问题,在此基础上我们还需要采用两种技术:一种是后端优化(通常简称为Back End),另一种是回环检测系统。回环检测系统专门负责识别机器人回到起始位置的情况发生;而后端优化系统则根据这一信息对整个运动轨迹进行必要的校正处理。

后端优化

具体而言,在SLAM过程中后端优化的主要任务是解决数据中的噪声干扰问题。理论上来说,在理想情况下我们希望能够获得完全准确的数据信息;但实际上即使是最精确的传感器也会不可避免地引入测量误差。其中经济型设备往往会产生较大的测量误差而高端设备通常具有较小误差;此外部分传感器还受到环境因素如磁场和温度的影响造成数据质量的变化。因此除了需要解决如何从图像中推导出相机运动轨迹之外还需关注该估计值包含多少不确定性以及这些不确定性的传播规律同时也要评估当前状态下的置信度水平——这正是最大后验概率估计 MAP 所关注的核心问题之一。在这个优化框架下所关注的状态不仅包括机器人的运动轨迹还包括构建的地图信息

相对于而言,在SLAM框架中,在处理过程中前端不仅传递用于优化的数据,并且还提供初始值。后端主要承担起整体优化的任务,并不需要关注数据来源。在这一领域的研究更加紧密相关于前端和计算机视觉技术的应用。例如,在图像处理方面涉及特征提取和匹配技术;而后端则主要应用滤波方法和非线性优化算法来解决实际问题。

从历史角度来看,后端优化领域的发展历程中有一部分后来被称为"SLAM研究"。早期文献中提到的SLAM问题最初被描述为一种状态估计问题——这一核心目标就是后端优化所要解决的问题。在早期文献中,该技术最初被描述为"空间不确定性估计"(Spatial Uncertainty)。尽管这一概念较为复杂,但它准确反映了SLAM的本质:对运动主体及其环境空间不确定性的量化。为了求解这一关键问题,在第6讲、第10讲和第11讲中我们将详细介绍相关的理论知识和解决方案。

回环检测

回环检测(Loop Closure Detection),又称闭环定位技术,在机器人路径规划与定位系统中具有重要地位。如何应对这一挑战?在实际运行中,机器人可能返回到初始位置附近。然而由于位置漂移问题的影响,在这种情况下其定位结果并未完全吻合实际情况。为了实现这一目标,在定位算法设计时需要考虑如何通过环境特征或行为特征识别起始位置附近的状态,并在此基础上对定位结果进行调整。具体而言,在确定起始状态的基础上将定位误差进行校正至起始位置附近区域即可有效消除漂移带来的影响。

回环检测与定位、建图之间具有密切关联。地图的主要作用在于帮助机器人了解它已经访问过的场所。为了实现这一目标,我们需要使机器人具备识别已访问场景的能力。实现这一目标的方法有很多种。例如,在机器人的下方放置一个二维码标记物(如一张二维码图片)。只要机器人观察到这个标记物的存在,则可推断其回到了初始位置。然而这种方法存在一定的局限性:一旦无法贴上二维码怎么办?为此我们转而考虑利用机器自带的传感器——即图像本身来进行判断。具体而言可以通过分析图像间的相似性来进行回环检测。这种方法与人类的认知方式相类似:当我们观察两张具有相似特征的图片时往往能准确判断它们是否来自同一个地点。如果上述过程成功实施则能有效降低累计误差积累带来的问题。从技术层面来看视觉式回环检测本质上是一种基于图像数据相似度的计算算法。由于图像信息极为丰富因此实现精确的重复地点识别将变得相对容易一些。

当回路被检测到时(...),我们将向后端发送'A与B为同一位置'这一信息。随后,在收到这些数据后(...),后端系统会据此对路径和地图进行相应调整。因此,在确保回路检测的充分性和准确性的情况下(...),我们能够有效减少累积误差并实现全局一致的路径与地图。

建图

构建地图的过程即为建图(Mapping)。其中SLAM技术的应用直接影响到这一过程的具体实施。在这一过程中对环境进行动态描绘的地图被称为地图,并非静态存在而是根据实际情况不断更新的状态表示方法。具体实施细节则取决于SLAM技术应用的具体情况。

形形色色的地图。

对于家用扫地机器人而言,在较为平坦的低矮区域运行时,并不需要复杂的环境感知系统即可完成自主导航任务。这种机器人只需要一个二维平面地图作为基础定位依据:通过标注通路与障碍区域即可实现路径规划与避障操作。相比之下,在计算机视觉领域中用于场景建模的相机系统则具有更高的自由度——它能够以六自由度的方式进行操作(即可以在三个维度上平移并进行三个维度上的旋转)。因此,在这种情况下构建一个完整的三维空间模型就显得尤为重要。然而,在实际应用中我们往往并不需要精确的位置坐标信息:有时候我们只需知道“A点到B点可达而B点到C点不可达”的基本可达性关系;有时候则需要具体的地理位置信息以便于后续路径规划;还有时候甚至完全不需要地图信息——只要知道某区域内存在通路即可!有趣的是有时候我们还可以利用其他来源的地图信息来替代:例如移动设备通常自带本地位置服务功能以及相关的地形图数据。

对于地图而言,承载着丰富的构思与期待。
在对比其他技术如视觉里程计、回环检测以及后端优化的基础上,
建图这一过程并未被严格定义为单一的具体形式或算法。
一组空间点的集合也可被视为地图的一种表现形式,
而一个令人惊艳的三维模型同样可以被视为一种特殊的地理信息表达,
一张标注着城市、村庄、铁路及河道的地图同样存在。
大致上可分为度量地图与拓扑地图两类。

度量地图(Metric Map)

度量地图致力于准确地描绘地图中物体之间的位置关系。为了便于管理与分析,在构建这类空间表示系统时,默认会根据其空间特征将其划分为稀疏性(Sparse)与稠密性(Dense)两大类。其中,在设计稀疏度量系统时,默认会对复杂的地理实体进行高度概括处理,并非必须包含所有可能存在的地理实体信息。例如,在实际应用中,默认会选择一些具有代表性的元素作为标记点(Landmark),因此在这种情况下,默认情况下这张图的主要信息来源仅限于这些标记点构成的空间布局模式。相比之下,在密集型度量系统中,默认会对所有可见的空间实体进行建模与记录。对于定位问题而言,默认情况下使用基于标记点的稀疏系统已经足够满足需求;但对于导航场景来说,则需要采用较为密集的地图系统才能避免潜在路径障碍物之间的碰撞风险。在三维空间中,默认我们会将复杂的区域划分为许多细小的基本单元来进行建模工作:具体而言,在二维平面场景下,默认采用的是均匀分布的小格子单元(Grid),而在三维空间场景下,则默认采用的是规则排列的小方块单元(Voxel)。每个单元体默认会被赋予三种状态标识:占据状态、空闲状态以及未知状态;这种标识方式默认能够有效反映该单元体内部是否存在特定物体的存在与否情况。当需要查询某个具体位置是否可以通过时,默认系统会根据当前的位置坐标返回该位置是否可达的结果反馈信息;这种基于网格划分的地图模型默认能够支持多种路径规划算法的应用操作:如A*算法、Dijkstra算法等;这种技术方案在机器人路径规划研究领域具有重要的理论价值与实际应用意义。然而我们也应该注意到,在实际应用过程中,默认系统的数据存储规模往往巨大:因为默认情况下每个网格单元都需要占用一定的存储资源来记录其状态标识信息;与此同时由于实际地理环境中存在许多细节特征并不具备足够的实用价值这一事实导致即使是在大规模空间建模过程中也会出现大量的冗余数据积累现象。另外值得注意的是在高分辨率度量系统设计中可能存在一致性问题:即使是最微小的角度偏差也可能导致原本相互隔离的空间区域出现重叠现象从而导致整体空间模型失效

拓扑地图(Topological Map)

相较于度量地图对地理实体位置的精准刻画能力而言,拓扑地图更注重展示地图要素间的关联性。作为图(Graph)的一种表现形式,在拓扑地图中主要通过节点与边来体现空间元素之间的连接关系,并未关注具体路径细节。这种表示方法放弃了解决方案的具体形态和路径选择问题,在突出空间联系的同时也忽略了地理实体的具体坐标信息以及相关的细节要素。尽管如此,在处理大规模地理网络时仍具有显著的应用价值。然而,在面对具有复杂层次结构的地图场景时,则可能会面临较大的局限性——即如何将复杂的地理网络划分为独立的节点与边的问题尚待进一步探索;同时如何基于拓扑模型实现有效的导航功能以及路径规划策略也是一个值得深入研究的方向

本文选自《视觉SLAM十四讲:从理论到实践》

全部评论 (0)

还没有任何评论哟~