原理
论文地址:https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45466.pdf
二维激光雷达同步定位与地图构建中的实时闭环检测
(Real-Time Loop Closure in 2D LIDAR SLAM)
摘要
本文介绍了便携式激光测距仪(LIDAR)和同时定位与地图构建(SLAM)技术在实时生成建筑平面图中的应用。通过实时生成和可视化平面图,操作员可以评估捕获数据的质量和覆盖范围。为了在有限的计算资源下实现便携式捕获平台,本文提出了一种在背包映射平台上实现实时映射和回环闭合的方法,分辨率为5厘米。为了实现实时回环闭合,我们使用了一种分支定界方法来计算扫描到子图匹配作为约束。实验结果和与其他知名方法的比较表明,我们的方法在质量上与现有技术相当。
引言
建筑平面图在各种应用中非常有用。手动调查通常结合计算机辅助设计(CAD)和激光卷尺进行,这些方法速度慢且不一定能准确描述空间的实际情况。使用SLAM技术可以快速准确地测量建筑物的尺寸和复杂性,所需时间比手动测量少几个数量级。本文的主要贡献是一种新颖的方法,用于减少从激光测距数据计算回环闭合约束的计算需求。该技术使我们能够在实时提供完全优化结果的同时,映射非常大的楼层,面积达数万平方米。
相关工作
扫描到扫描匹配经常用于基于激光的SLAM方法中计算相对姿态变化。然而,单独的扫描到扫描匹配会迅速累积误差。扫描到地图匹配有助于限制这种误差的累积。一些方法通过匹配从激光扫描中提取的特征来改进计算成本。其他回环闭合检测方法包括基于直方图的匹配、扫描数据中的特征检测和使用机器学习。两种常见的处理剩余局部误差累积的方法是粒子滤波和基于图的SLAM。
系统概述
Google的Cartographer提供了一种实时室内映射解决方案,通过配备传感器的背包生成2D网格地图,分辨率为5厘米。操作员可以在建筑物内行走时看到地图的创建过程。激光扫描被插入到子图中,并假设在短时间内位置估计足够准确。为了实现良好的性能和适度的硬件要求,我们的SLAM方法不使用粒子滤波。为了处理误差的累积,我们定期运行姿态优化。当子图完成后,它将参与回环闭合的扫描匹配。所有完成的子图和扫描都会自动考虑用于回环闭合。如果它们基于当前姿态估计足够接近,扫描匹配器会尝试在子图中找到扫描。如果在一个搜索窗口内找到足够好的匹配,它将被添加为回环闭合约束到优化问题中。
局部2D SLAM
我们的系统结合了局部和全局两种2D SLAM方法。两种方法都优化了LIDAR观测的姿态,由(x, y)平移和旋转ξθ组成。在不稳定平台上,如我们的背包,使用惯性测量单元(IMU)估计重力方向,将扫描从水平安装的LIDAR投影到2D世界中。
扫描姿态的变换
扫描匹配的非线性优化
在局部方法中,每个连续扫描都与一个小块世界(称为子图M)匹配,使用非线性优化将扫描与子图对齐。扫描匹配会随着时间的推移累积误差,这将在全局方法中被移除。
图1为网格点和相关像素的详细信息
图2为扫描和与命中(阴影和交叉)及未命中(仅阴影)相关的像素的详细信息。
回环闭合
由于扫描仅与包含几个最近扫描的子图匹配,上述方法会缓慢累积误差。对于较大的空间,通过创建许多小的子图来处理。我们的方法通过优化所有扫描和子图的姿态,遵循稀疏姿态调整。所有其他包含扫描和子图的对在子图不再变化后考虑用于回环闭合。如果找到良好的匹配,相应的相对姿态将添加到优化问题中。
优化问题
残差计算
误差向量
分支定界扫描匹配
计算上界
预计算网格的大小为1、4、16和64。请查看图3以了解不同大小的预计算网格的详细信息。
通过上述方法,我们能够在有限的计算资源下实现高效的回环闭合,从而生成高质量的2D SLAM地图。
实验结果
本文展示了使用Cartographer背包在慕尼黑德意志博物馆收集的传感器数据的实验结果。通过使用廉价硬件收集的数据,展示了我们的算法在机器人真空吸尘器传感器上的有效性。最后,使用Radish数据集展示了结果,并与已发布的其他方法进行了比较。
结论
本文介绍并实验验证了一种结合扫描到子图匹配、回环闭合检测和图优化的2D SLAM系统。通过在后台匹配所有扫描到附近的子图,创建回环闭合约束。约束图中的子图和扫描姿态定期在后台优化。操作员可以看到最终地图的实时预览。我们展示了在适度的硬件上实时运行算法的可能性。
应用
Cartographer是google推出的一套基于图优化的SLAM算法。Cartographer算法并没有给人惊艳的感觉,但该算法的主要目标是实现低计算资源消耗,达到实时SLAM的目的。
Cartographer是一款可以跨多个平台和传感器配置提供2D和3D实时同步定位和绘图(SLAM)的系统。这个项目提供了Cartographer的ROS集成。
该算法主要分为两个部分,第一个部分称为Local SLAM, 该部分通过一帧帧的Laser Scan建立并维护一系列的Submap,而所谓的submap就是一系列的Grid Map。当再有新的Laser Scan中会通过Ceres Scan Matching的方法将其插入到子图中的最佳位置。但是submap会产生误差累积的问题,因此,算法的第二个部分,称为Global SLAM的部分,就是通过Loop Closure来进行闭环检测,来消除累积误差:当一个submap构建完成,也就是不会再有新的laser scan插入到该submap时,算法会将该submap加入到闭环检测中。闭环检测的本质也是一个优化问题,该优化问题被表达成了一个pixel-accurate match的形式,解决优化问题的方法是Branch-and-Bound Approach.
CartographerCartographerCartographer本身是一个C++的库,虽然可以不依赖ROS的环境运行,但为了快速的上手,google还是提供了一个ROS环境下的封装cartographer_ros。
代码地址:GitHub - cartographer-project/cartographer_ros: Provides ROS integration for Cartographer.
安装使用文档地址:Cartographer ROS Integration — Cartographer ROS documentation
标签:Cartographer,匹配,扫描,闭合,SLAM,回环,原理 From: https://blog.csdn.net/heyiqiunet/article/details/143165536