主要内容

在MATLAB中实现点云SLAM

一个点云是三维空间中的一组点。点云通常是通过3d扫描仪获取的,比如激光雷达或Kinect®设备。它们应用于机器人导航和感知、深度估计、立体视觉、视觉注册和高级驾驶辅助系统(ADAS)。

点云配准是将两个或多个相同场景的3-D点云对齐到一个公共坐标系统的过程。映射是在机器人或传感器周围构建环境地图的过程。您可以使用注册和映射来重建3-D场景或构建用于本地化的道路地图。虽然注册通常在映射之前,但还有其他注册应用程序可能不需要映射,例如可变形运动跟踪。计算机视觉工具箱™算法提供了执行点云配准和映射的功能。该工作流程包括点云的预处理、配准、漂移校正和对准。

同步定位和映射(SLAM)是指计算车辆相对于周围环境的位置和方向,同时映射环境的过程。该过程只使用来自传感器的点云输入。点云SLAM的应用包括机器人和自动驾驶。有关为什么SLAM很重要以及它如何在不同应用程序中工作的一般描述,请参见什么是SLAM?

映射和本地化工作流

按照以下步骤在点云序列上执行点云配准和映射。然后你可以在预建地图中定位车辆。

  1. 预处理点云——为了准备点云进行配准,对它们进行低采样并去除不需要的特征和噪声。

  2. 注册点云——注册每个点云对应它前面的点云。这些注册用于测程法,这是在连续帧上累积配准估计的过程。仅使用里程计可能导致测量姿势和实际姿势之间的漂移。

  3. 检测循环-执行循环关闭检测,以尽量减少漂移。环路闭合检测是识别传感器返回到先前访问过的位置的过程,这在传感器的轨迹中形成一个环路。

  4. 正确漂移-使用检测到的循环最小化漂移通过姿态图优化,它包括通过添加节点和边来增量地构建姿态图,然后在找到足够的循环后优化姿态图。姿态图优化的结果是一组优化后的绝对姿态。

  5. 组装地图-通过使用优化的绝对姿势对准已注册的点云来组装一个点云图。您可以使用这样一个预先构建的点云图本地化,这是在地图上定位车辆的过程。

  6. 本地化-根据组装的地图找到车辆的姿态。

为映射和本地化管理数据

使用这些对象管理与点云配准和映射工作流相关的数据:

  • pointCloudobject -点云对象存储了一组位于3-D空间中的点。它使用高效的索引策略来完成最近邻搜索,利用点云预处理和配准功能。

  • rigid3dobject -刚性3-D对象存储一个3-D刚性几何变换。在这个工作流中,它表示相对姿态和绝对姿态。

  • pcviewsetobject -点云视图集对象管理与里程计和映射过程相关的数据。它将数据组织为一组视图和视图之间的成对连接。它还可以构建和更新姿态图。

    • 每一个视图由点云和相关的绝对位姿变换组成。每个视图在视图集中都有一个唯一的标识符,并形成姿态图的一个节点。

    • 每一个连接存储将一个视图链接到另一个视图的信息。这包括连接视图之间的相对转换和计算测量所涉及的不确定性。每个连接在姿态图中形成一条边。

  • scanContextLoopDetectorobject -循环关闭检测对象存储带有相应视图ID的扫描上下文描述符。中的视图关联检测到的循环闭包pcviewset

  • pcmapndtobject - NDT map对象存储一个压缩的、内存高效的地图表示,用于本地化。对象将点云图转换为一组体素(3-D盒),每个体素由3-D正态分布表示。

预处理点云

预处理包括从点云中去除不需要的特征和噪声,并分割或降低采样。预处理可以包括这些函数:

  1. pcdownsample-降低点云采样。

  2. pcsegdistsegmentLidarData-将点云数据分割成簇,然后使用选择函数来选择所需的点。

  3. pcfitplanesegmentGroundFromLidarData,或segmentGroundSMRF(激光雷达工具箱)-分割地平面,然后使用选择函数来选择所需的点。

  4. pcdenoise-从点云中去除不必要的噪声。

注册点云

您可以使用pcregisterndtpcregistericppcregistercorr,或pcregistercpd函数将移动点云注册到固定点云。这些函数所使用的配准算法分别基于正态分布变换(NDT)算法、迭代最接近点(ICP)算法、相位相关算法和相干点漂移(CPD)算法。有关这些算法的更多信息,请参见参考文献

在注册点云时,选择表示场景中对象如何在固定点云和移动点云之间变化的转换类型。

转换 描述
刚性 刚性变换保留了场景中物体的形状和大小。场景中的对象可以进行平移、旋转或两者兼有。同样的变换适用于所有的点。
仿射 仿射变换除了允许物体进行平移和旋转外,还允许物体剪切和改变尺度。
非刚性的 非刚性变换允许场景中物体的形状发生变化。点经历不同的变换。位移场表示这个变换。

下表比较了点云配准函数选项、它们的转换类型和它们的性能特征。使用这个表可以帮助您为您的用例选择适当的注册函数。

注册方式(功能) 转换类型 描述 性能特征
pcregisterndt 刚性
  • 依赖于初始转换估计的局部配准方法。

  • 对异常值稳健。

  • 使用不同分辨率和密度的点云效果更好。金宝搏官方网站

提供一个初始估计,使算法收敛更快。
pcregistericp 刚性

依赖于初始转换估计的局部配准方法。

pcregistercorr 刚性
  • 的注册方法,该方法依赖于占用网格,将概率值分配给网格Z-每个网格单元内点的坐标值。

  • 最适合地面车辆导航

减小占用网格的大小以减少函数的计算需求。
pcregistercpd 刚性、仿射和非刚性

不依赖于初始转换估计的全局方法

最慢的注册方法。不推荐用于地图构建。

将当前(移动的)点云与之前(固定的)点云进行注册,将返回一个rigid3d表示在固定点云的框架中移动点云的估计相对姿态的转换。将这个相对姿态变换与之前积累的所有相对姿态变换组合起来,给出了绝对姿态变换的估计。

将移动点云形成的视图及其绝对位姿变换添加到视图集中。视图可以添加到pcviewset对象使用addView函数。

添加测程法的优势,由连续视图之间的连接定义的边,由固定点云与移动点云之间的相对位姿变换形成pcviewset对象使用addConnection函数。

登记须知

  • 本地登记方法,例如使用无损检测或ICP (pcregisterndtpcregistericp,分别),需要初步估计,以获得更好的性能。为了获得初始估计,使用另一个传感器,如惯性测量单元(IMU)或其他形式的里程计。

  • 属性的值可提高注册结果的准确性“MaxIterations”属性的值“宽容”论点。以这种方式更改这些值会降低注册速度。

  • 考虑使用下采样点云pcdownsample,在使用前pcregisterndtpcregistericp,或pcregistercpd,以提高登记的效率和准确性。

  • 去噪使用pcdenoise预配准可以提高配准精度,但会拖慢地图构建工作流的执行时间。

检测循环

仅使用里程计会由于累积误差而导致漂移。这些错误会导致长距离的严重误差。使用基于图的同步定位和映射(SLAM)纠正漂移。为此,通过使用描述符匹配在以前的点云中查找访问过的位置来检测循环闭包。使用循环闭包来校正累积漂移。遵循以下步骤来检测循环闭包:

  1. 使用scanContextDescriptor函数提取扫描上下文描述符,这些描述符捕获点云的独特性。

  2. 将扫描上下文描述符添加到scanContextLoopDetector使用addDescriptor

  3. 使用detectLoop函数查找潜在的循环闭包。

  4. 注册点云,以确定视图之间的相对位姿转换和对齐点云之间欧氏距离的均方根误差(RMSE)。使用RMSE来过滤无效的循环闭包。相对姿态转换表示两个视图之间的连接。由不连续视图之间的连接所形成的边称为a环路闭合边.对象的连接pcviewset对象使用addConnection函数。

有关基于段匹配的环路闭合检测的替代方法,请参阅findPose(激光雷达工具箱)函数。

正确的漂移

pcviewset对象在添加视图和连接时在内部更新姿态图。方法执行姿态图优化,以使漂移最小化optimizePoses函数,一旦检测到足够的循环闭包。的optimizePoses函数返回pcviewset对象使用每个视图的优化绝对位姿转换。

您可以使用createPoseGraph函数以MATLAB的形式返回姿态图®有向图对象。您可以使用MATLAB中的图算法来检查、查看或修改姿态图。使用optimizePoseGraph(导航工具箱)函数来优化修改后的姿态图,然后使用updateView函数更新视图集中的姿态。

组装图

使用pcalign函数使用视图集中的点云及其优化的绝对姿态转换构建点云图。这个点云图现在可以使用NDT定位算法进行在线定位。

在地图中定位车辆

方法将预构建的点云图转换为无损检测图格式pcmapndt对象。的pcmapndt对象以压缩体素表示形式存储地图,可将其保存到磁盘并用于在线定位。使用findPose函数在地图中进行本地化。

备选工作流

在计算机视觉工具箱、导航工具箱™和激光雷达工具箱™中提供了地图构建和本地化的替代工作流程。

  • Visual SLAM使用计算机视觉工具箱功能-计算相机相对于其周围环境的位置和方向,同时映射环境。详情请参见在MATLAB中实现可视化SLAM

  • 使用导航工具箱功能构建占用地图-从点云构建占用地图。详细信息请参见使用三维激光雷达点云执行SLAM(导航工具箱)

  • 使用激光雷达工具箱功能进行段匹配-使用pcmapsegmatch(激光雷达工具箱)对象。使用findPose(激光雷达工具箱)闭环检测和定位功能。这种方法对动态障碍具有鲁棒性,建议用于大规模环境。有关此方法的示例,请参见使用段匹配构建地图和本地化(激光雷达工具箱)的例子。该表突出了两者之间的异同点pcmapndt而且pcmapsegmatch(激光雷达工具箱)图表示。

    工作流 pcmapndt pcmapsegmatch
    算法 正态分布变换(NDT) SegMatch段匹配方法
    映射 首先构建地图-增量地使用pcviewset.然后,用pcalign来组装地图并将预构建的地图转换为NDT地图表示。 以增量方式构建映射pcmapsegmatch(激光雷达工具箱)-添加视图到pcviewset(使用addView)及pcmapsegmatch(激光雷达工具箱)(使用addView(激光雷达工具箱))进行点云扫描。使用以下方法检测循环闭包findPose(激光雷达工具箱)并对累积漂移进行校正optimizePoses
    定位相似

    选择一个用于本地化的子地图,然后使用以下选项之一找到用于本地化的姿态:

    本地化的区别 依赖于姿态估计。 不依赖于姿态估计。
    可视化 控件可视化映射或选定的子映射显示的功能pcmapndt对象或显示(激光雷达工具箱)的功能pcmapsegmatch(激光雷达工具箱)对象。

参考文献

[1] Myronenko, Andriy和Xubo Song。点集配准:相干点漂移模式分析与机器智能汇刊32岁的没有。12(2010年12月):2262-75。https://doi.org/10.1109/TPAMI.2010.46

[2]陈、杨、Gérard Medioni。多距离图像配准的对象建模图像与视觉计算10,不。3(1992年4月):145-55。https://doi.org/10.1016/0262 - 8856 (92) 90066 - c

[3]贝丝,pj,尼尔·d·麦凯。3-D形状的注册方法模式分析与机器智能汇刊14日,没有。2(1992年2月):239-56。https://doi.org/10.1109/34.121791

[4]比伯,P.和W.斯特拉瑟。正态分布变换:激光扫描匹配的一种新方法在2003年IEEE/RSJ智能机器人与系统国际会议论文集(IROS 2003) (Cat。No.03CH37453), 3:2743-48。美国内华达州拉斯维加斯:IEEE, 2003。https://doi.org/10.1109/IROS.2003.1249285

马格努松,马丁。三维正态分布变换:配准、表面分析和环路检测的有效表示博士论文,Örebro大学,2009。oru: http://urn.kb.se/resolve?urn=urn nbn公司禁止:se:女主角- 8458 urn: nbn公司禁止:se: oru:女主角- 8458

Dimitrievski, Martin, David Van Hamme, Peter Veelaert和Wilfried Philips。“用于自动驾驶汽车里程测量的占用地图的鲁棒匹配。”在第11届计算机视觉、成像与计算机图形学理论与应用联合会议论文集, 626 - 33所示。意大利罗马:SCITEPRESS -科学与技术出版物,2016。https://doi.org/10.5220/0005719006260633

另请参阅

功能

对象

相关的话题