同时定位和映射
SLAM 是同时对机器人姿态和环境地图的估计。 SLAM 很困难,因为定位需要地图,而建图需要良好的姿态估计
- 本地化:在给定地图的情况下推断位置。
- 映射:推断给定位置的地图。
- SLAM :学习地图并同时定位机器人。
SLAM 问题很难,因为它是一种悖论,即:
- 为了构建地图,我们现在需要位置。
- 为了确定我们的位置,我们需要一张地图。
这就像一个鸡蛋问题。
SLAM 有多个部分,每个部分都可以通过多种不同的方式执行:
- 地标检测
- 数据关联
- 状态估计
- 状态更新
- 地标更新
一步一步的SLAM
- SLAM 过程包括以下步骤:
- 第一步,它使用环境来更新机器人的位置。我们可以使用里程计,但它可能是错误的,我们不能只直接依赖里程计。
- 我们可以使用激光扫描环境来校正机器人的位置。但是,它在水下等某些环境中不起作用。
- 因此,可以通过从环境中提取特征来更好地识别机器人的位置。
扩展卡尔曼滤波器
扩展卡尔曼滤波器(EKF)是 SLAM 过程的核心。它是对非线性过程或测量关系的估计。它负责根据地标更新机器人认为它所在的位置。
激光和里程计数据
激光数据是从扫描中获得的读数,而里程计数据的目标是提供机器人的大致位置。里程计数据和激光数据的难点在于正确计时。
地标:地标是可以很容易地重新观察并与环境区分开来的特征。这些用于定位机器人。地标应该很容易获得,可以相互区分,环境中应该是丰富的并且是固定的
地标提取
在选择和决定地标之后,我们需要从机器人传感器的输入中提取地标。使用的两个基本地标提取是 Spikes 和 RANSAC。
- 尖峰
尖峰地标依赖于两个激光束之间变化很大的景观。这意味着该算法将在平滑环境中失败。
- RANSAC(随机抽样和共识):
RANSAC 通过随机采样激光读数找到地标,然后使用最小二乘近似法找到贯穿这些读数的最佳拟合线。
这背后的主要思想是将每个点分类为异常值和内部值,同时仅使用内部值来找到最适合该线的值并丢弃异常值。
数据关联
数据关联或数据匹配是将来自不同(激光)扫描的观察到的地标相互匹配。数据关联存在一些挑战,
- 该算法可能不会重新观察每一帧中的地标。
- 该算法错误地将地标与先前观察到的地标相关联。
执行数据关联的方法很少,我们将首先讨论最近邻算法:
- 首先,当您从激光扫描中获取数据时,使用地标提取来提取所有可见的地标。
- 之后,我们将所有提取的地标与可以观察到 >N 次的最近的地标相关联。
- 现在,我们输入提取的地标列表和数据库中先前检测到的地标列表,如果地标已经在数据库中,我们将它们的计数增加 N,如果它们不存在,则将它们的计数设置为1.
在上述步骤之后,我们需要执行以下更新步骤:
- 状态估计:在这一步中,我们使用里程表数据来获得当前状态估计。
- 状态更新:在这个阶段,我们通过重新观察地标来更新我们新的估计状态。
- 地标更新:在这一步中,我们添加在当前阶段检测到的新地标。
SLAM的应用
- SLAM 问题是让机器人自主的基础。它有各种各样的应用,我们想用地图来表示环境,如室内、水下、外太空等。
参考:
- 布法罗大学 SLAM 幻灯片