Press ESC to close

同步定位与地图构建 (SLAM) 概述 – MATLAB & Simulink

SLAM 工作原理

大致说来,实现 SLAM 需要两类技术。一类技术是传感器信号处理(包括前端处理),这类技术在很大程度上取决于所用的传感器。另一类技术是位姿图优化(包括后端处理),这类技术与传感器无关。

自主导航

6 个视频

自主导航 (6 个视频)

SLAM 处理流程

SLAM 处理流程

SLAM 方法的类型

要了解有关前端处理组件的更多信息,请探索不同 SLAM 方法,如视觉 SLAM、激光雷达 SLAM 和多传感器 SLAM。

视觉 SLAM

顾名思义,视觉 SLAM(又称 vSLAM)使用从相机和其他图像传感器采集的图像。视觉 SLAM 可以使用普通相机(广角、鱼眼和球形相机)、复眼相机(立体相机和多相机)和 RGB-D 相机(深度相机和 ToF 相机)。

视觉 SLAM 所需的相机价格相对低廉,因此实现成本较低。此外,相机可以提供大量信息,因此还可以用来检测路标(即之前测量过的位置)。路标检测还可以与基于图的优化结合使用,这有助于灵活实现 SLAM。

使用单个相机作为唯一传感器的 vSLAM 称为单目 SLAM,这种 vSLAM 难以定义深度。。这个问题可以通过以下方式解决:检测待定位图像中的 AR 标记、棋盘格或其他已知目标,或者将相机信息与其他传感器信息融合,例如测量速度和方向等物理量的惯性测量单元 (IMU) 信息。vSLAM 相关的技术包括运动重建 (SfM)、视觉里程计和捆绑调整。

视觉 SLAM 算法可以大致分为两类。稀疏方法:匹配图像的特征点并使用 PTAM 和 ORB-SLAM 等算法。稠密方法:使用图像的总体亮度以及 DTAM、LSD-SLAM、DSO 和 SVO 等算法。

单目 vSLAM

立体 vSLAM

RGB-D vSLAM

继续探索此主题

使用 MATLAB 实现视觉 SLAM (4:00)

单目视觉同步定位与地图构建

立体视觉同步定位与地图构建

单目视觉惯性 SLAM

在 MATLAB 中用 ROS 构建和部署视觉 SLAM 算法

激光雷达 SLAM

光探测与测距(激光雷达)方法主要使用激光传感器(或距离传感器)。

对比相机、ToF 和其他传感器,激光可以使精确度大大提高,常用于自动驾驶汽车和无人机等高速移动运载设备的相关应用。激光传感器的输出值一般是二维 (x, y) 或三维 (x, y, z) 点云数据。激光传感器点云提供了高精确度距离测度数据,特别适用于 SLAM 算法建图。通过按顺序配准点云来估计移动情况。然后,使用计算得出的移动数据(移动距离)进行车辆定位。要估计点云之间的相对变换,您可以使用配准算法,如迭代最近点 (ICP) 和正态分布变换 (NDT)。您也可以使用基于特征的方法,例如基于 FPFH 特征的激光雷达里程计和地图构建 (LOAM) 或快速全局配准 (FGR)。二维或三维点云地图可以表示为栅格地图或体素地图。

鉴于存在这些挑战,自动驾驶汽车定位可能需要融合轮式里程计、全球导航卫星系统 (GNSS) 和 IMU 数据等其他测量值。仓储机器人等应用场景通常采用二维激光雷达 SLAM,而三维点云 SLAM 常用于无人机和自动驾驶。

二维激光雷达 SLAM

三维激光雷达 SLAM

继续探索此主题

通过 MATLAB 实现同步定位与地图构建 (SLAM) 算法 (2:23)

使用二维激光雷达扫描数据的 SLAM

使用 SLAM 基于激光雷达数据构建地图

使用分割匹配构建地图并定位

使用 FPFH 描述符实现机载激光雷达 SLAM

移动机器人和 UGV 建图 (10:01)

多传感器 SLAM

多传感器 SLAM 是一种利用各种传感器(包括相机、IMU(惯性测量单元)、GPS、激光雷达、雷达等)来提高精度和稳健性的 SLAM 算法。通过利用不同传感器的互补优势并避开各自的限制,多传感器 SLAM 可以实现卓越的性能。例如,虽然相机可以提供详细的视觉数据,但在弱光或高速情况下可能效果不佳;另一方面,激光雷达在不同光照条件下表现稳定,但遇到某些表面材料时可能表现欠佳。多传感器 SLAM 通过集成各种来源的数据来提供比单传感器更可靠的解决方案。因子图是一种模块化和自适应框架,集成了各种传感器类型,如相机、IMU 和 GPS。此外,因子图通过将数据转换为姿态因子来容纳如激光雷达和里程计等自定义传感器的输入。此功能使得各种多传感器 SLAM 配置成为可能,例如单目视觉惯性 SLAM 和激光雷达 IMU SLAM。

继续探索此主题

使用因子图的单目视觉惯性里程计

使用合成数据的视觉-惯性里程计

单目视觉惯性 SLAM

使用 IMU 和 GPS 传感器的基于因子图的行人定位

SLAM 面临的常见挑战

虽然 SLAM 算法已在某些场景下投入实际应用,但是仍面临诸多技术挑战,因此难以得到更为广泛的应用。不过,每项挑战都可以凭借特定的对策加以克服。

1.定位误差累积,导致与实际值产生偏差

SLAM 算法会估计连续移动,其中包括一定的误差。但是误差会随着时间累积,导致与实际值产生明显偏差。误差还会导致地图数据瓦解或失真,让后续搜索变得困难。我们来看一个绕正方形通道行驶的例子。随着误差累积,机器人的起点和终点对不上了。这称为闭环问题。这类位姿估计误差不可避免。我们必须设法检测到闭环,并确定如何修正或抵消累积的误差。

构建位姿图并最小化误差的示例。

对于多传感器 SLAM,传感器的精确标定至关重要。差异或标定误差会导致传感器融合不准确并破坏系统的整体功能。因子图优化可以进一步帮助标定过程,包括相机-IMU 系统的对齐。

对策之一是记住之前到过的某处的某些特征,将其作为路标,从而最小化定位误差。构建位姿图有助于修正误差。将误差最小化问题视为优化问题进行求解,以生成更准确的地图数据。这种优化在视觉 SLAM 中称为捆绑调整。

构建位姿图并最小化误差的示例

2.定位失败,地图上的位置丢失。

图像和点云建图不考虑机器人的移动特征。在某些情况下,这种方法会生成不连续的位置估计。例如,可能会有计算结果显示,以 1 米/秒速度移动的机器人突然向前“瞬移”了 10 米。避免这种定位失败的办法有两种:一是使用恢复算法;二是将运动模型与多个传感器融合,以基于传感器数据计算。

有多种方法可以实现运动模型的传感器融合。一种常见方法是使用卡尔曼滤波进行定位。由于大部分差速驱动机器人和四轮车辆一般都使用非线性运动模型,因此通常会使用扩展卡尔曼滤波器和粒子滤波器(蒙特卡罗定位)。某些情况下,也可以使用无迹卡尔曼滤波器等更加灵活的贝叶斯滤波器。一些常用传感器是惯性测量装置,例如惯性测量单元 (IMU)、航姿参考系统 (AHRS)、惯性导航系统 (INS)、加速度计传感器、陀螺仪传感器和磁力传感器。安装到车辆的轮式编码器通常用于里程计。

定位失败时,一种恢复对策是将之前经过的某个地方的路标记为关键帧。搜索路标时,会以特定方法进行特征提取以便高速扫描。有些方法基于图像特征,例如特征袋 (BoF) 和视觉词袋 (BoVW)。近年来,人们已使用深度学习来比较特征距离。

3.图像处理、点云处理和优化带来高计算成本

在车辆硬件上实现 SLAM 算法时,计算成本是个问题。计算通常在处理能力有限的紧凑型低功耗嵌入式微处理器上执行。为了实现准确定位,必须高频率执行图像处理和点云匹配。此外,闭环等优化计算都是高成本计算流程。此处的挑战在于如何在嵌入式微处理器上执行这种高成本处理。

对策之一是并行运行多个不同流程。例如,特征提取,也就是匹配流程前处理,就相对适合并行运行。使用多核 CPU 进行处理时,单指令多数据 (SIMD) 计算和嵌入式 GPU 在某些情况下可以进一步提升速度。而且,由于位姿图优化可以在相对长的周期里执行,降低其优先级并以规律间隔执行也能提高性能。

继续探索此主题

基于 EKF 的路标 SLAM

使用 AprilTag 标记的路标 SLAM