首页 > 其他分享 >SLAM Cartographer原理与应用

SLAM Cartographer原理与应用

时间:2024-10-22 18:48:51浏览次数:7  
标签:Cartographer 匹配 扫描 闭合 SLAM 回环 原理

原理

论文地址: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

相关文章

  • 线程池实现原理及实践
    线程池的总体设计ThreadPoolExecutor实现的顶层接口是Executor,顶层接口Executor提供了一种思想:将任务提交和任务执行进行解耦。用户无需关注如何创建线程,如何调度线程来执行任务,用户只需提供Runnable对象,将任务的运行逻辑提交到执行器(Executor)中,由Executor框架完成线程的调配......
  • Java 中的垃圾收集器有哪些,它们的工作原理是什么?
    在Java中,垃圾收集(GC)是自动内存管理的核心部分,它帮助开发者免于手动管理内存分配和回收,提升了开发效率和应用性能。Java中的主要垃圾收集器包括SerialGC、ParallelGC、CMS(ConcurrentMarkSweep)GC、G1(Garbage-First)GC,以及最新的ZGC(ZGarbageCollector)和Shenand......
  • 流体世界的眼睛,流量传感器工作原理
    我们能看见听见并感受到这个丰富多彩的世界,依赖眼睛、耳朵以及皮肤这些器官。在管道密布的流体世界,也有自己的各种器官,像压力传感器、光线传感器、温度传感器,以及我们这期的主题——流量传感器。流量传感器可能离你很远,在郊区的化工厂,在万米高空的飞机,甚至大气层外的空间站......
  • java中的锁及实现原理
    重入锁ReentrantLock重人锁ReentrantLock,顾名思义,就是支持重进人的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。ReentrantLock虽然没能像synchronized关键字一样支持隐式的重进人,但是在调lock()方法时,已经获取到锁的线......
  • Unity Shader深度图的应用,手把手教你写出可以正确计算并且渲染出二次元角色边缘光的着
    梦开始的地方相信大家看番的时候,都注意到了,很多时候,在角色周围有一圈光晕旧版《魔术快斗》剧照《新蔷薇少女》剧照 我们将这种光晕,称之为边缘光边缘光是描边的一种,动画师之所以加入边缘光,是为了凸现角色轮廓,使得角色区别于背景不少游戏也有着这种边缘光游戏《鸣潮》......
  • 描述跨站点脚本攻击(XSS)的工作原理,以及如何防御这种攻击(非常详细)
    跨站点脚本攻击(XSS)是一种常见的网络安全威胁,它允许攻击者在用户的浏览器上执行恶意脚本。这些脚本可以盗取用户数据、劫持用户会话、修改网页内容等。XSS攻击的工作原理是通过在网页中注入恶意脚本,当用户浏览这些网页时,脚本就会被执行。XSS攻击主要分为三类:1.**反射型XSS(Non......
  • 强化学习的数学原理-02贝尔曼公式
    目录MotivatingexamplesstatevalueBellmanequationMatrix-vectorformActionvaluesummaryMotivatingexamples一个核心概念:statevalue一个基本的工具:Bellmanequation为什么return是重要的?return可以用来评估policy下面计算3个例子计算return的方法:第一种方法:(......
  • LLM大模型: blip2多模态大模型原理
      截止目前,图片检索领域最出名的应该是openAI的clip了,分别用bert和vit对text和image做encoder,然后让配对的embedding接近,不配对的embedding拉远,通过这种方法达到text匹配(检索)image的目的!但这种方式只能检索,没法生成text啊(比如对image做适当的description),咋整了?总结一下,单存的......
  • 图像采集卡的原理是什么
    图像采集卡的作用是将图像信号采集到计算机中,以数据文件的形式保存在硬盘上,是图像处理不可缺少的硬件设备,通过它我们可以把摄像机拍摄的视频信号从摄像机磁带中传输到计算机中,并利用相关的视频编辑软件对数字视频信号进行后期处理,如剪切画面,添加滤镜、字幕和音效,设置转场效果,添......
  • Lua与C#交互原理
    c#调用lua,是c#通过Pinvoke(Platform Invoke (平台调用))方式调用了lua的底层的C代码,然后这个执行了lua脚本。如果一个C#方法要被Lua调用,则首先要将其注册到Lua虚拟机中。如果C#要调用Lua中的函数,则首先要在Lua虚拟机中加载该函数(LuaState.DoFile)。拿到目标函数(LuaState.Ge......