ROS Cartographer--Algorithm

ROS Cartographer–Algorithm

原文:Algorithm walkthrough for tuning

论文地址(Google Search):Real-Time Loop Closure in 2D LIDAR SLAM

ROS Cartographer的完整参考文件:Cartographer ROS Integration

概述

本地SLAM通常由前端和后端两个部分组成,其中前端的任务是建立局部地图,后端的任务是对局部地图进行优化和融合,以得到一个整体的环境地图。在ROS中,常用的本地SLAM方案包括GMapping、Hector SLAM和Cartographer等。

high_level_system_overview

Local SLAM

local SLAM (sometimes also called frontend or local trajectory builder). Its job is to build a succession of submaps. Each submap is meant to be locally consistent but we accept that local SLAM drifts over time.

本地SLAM(有时也称为前端或本地轨迹生成器)的任务是构建一系列子地图。每个子地图旨在在局部上保持一致,但我们接受本地SLAM随时间漂移的情况。

本地SLAM随时间漂移的主要原因是机器人在移动过程中,传感器的测量数据存在噪声和误差,同时环境本身也是动态的,存在随机性,这些因素都会导致机器人在建立地图的过程中出现偏差。此外,机器人的里程计也会因为累积误差而导致位置和姿态的偏差,从而使本地地图的精度下降。

另外,本地SLAM通常是基于滑动窗口技术来实现的,即只保留最近一段时间的数据用于建图,而将之前的数据舍弃。这种方式可以有效地降低计算复杂度和内存占用,但也会导致地图的精度逐渐下降,因为过去的数据被舍弃后,机器人在移动时可能出现位置和姿态的跳跃,从而导致本地地图的漂移。

本地SLAM是一个建立机器人与环境之间的关系的过程,它的目标是不断的根据机器人的传感器信息建立子地图,同时根据之前建立的子地图来矫正之前建立的子地图的错误,提高地图的精度。在构建子地图的过程中,本地SLAM需要实时处理机器人的传感器数据,如激光雷达、相机、IMU等,以及里程计数据,并且需要解决数据不一致性、噪声等问题,以实现高质量的子地图构建。

Global SLAM

global SLAM (sometimes called the backend). It runs in background threads and its main job is to find loop closure constraints. It does that by scan-matching scans (gathered in nodes) against submaps. It also incorporates other sensor data to get a higher level view and identify the most consistent global solution. In 3D, it also tries to find the direction of gravity.

全局SLAM(有时称为后端)是另一个子系统,它在后台线程中运行,其主要任务是查找回环闭合约束。它通过将扫描(在节点中收集)与子地图进行扫描匹配来实现这一点。它还结合其他传感器数据以获得更高级别的视图,并确定最一致的全局解。在3D中,它还试图找到重力方向。

全局SLAM是一种用于建立环境地图的技术。它可以帮助机器人在不知道自己位置的情况下,通过识别环路和特征点等手段,逐步构建出自己所处的环境地图,并实现定位和导航。在全局SLAM中,需要实时处理大量的传感器数据,并对其进行高效的处理和分析,以获得准确和鲁棒的环境地图。

输入

Cartographer starts by applying a bandpass filter and only keeps range values between a certain min and max range

在提取输入时,Cartographer会使用一个带通滤波器,提取预设的区间范围之内(以米为单位)的信息,这个值需要根据实际的机器人以及所用的传感器进行确定。

距离信息(Range data)的获取

距离信息(Range data)通常是从机器人上的一个点在多个角度上进行测量的结果。这意味着靠近的表面(例如道路)经常被测量并提供大量的点。相反,远处的物体往往不太容易被测量,提供的点数较少。为了减少处理点云的计算量,通常需要对点云进行子采样。然而,简单的随机采样会从我们已经有低密度测量的区域中删除点,而高密度区域仍然会有比需要更多的点。为了解决这个密度问题,我们可以使用体素滤波器(voxel filter)将原始点下采样为一个恒定大小的立方体,并仅保留每个立方体的质心。

小的立方体尺寸将导致更密集的数据表示,从而导致更多的计算量。大的立方体尺寸会导致数据损失,但速度会快得多

除了用户自定义大小的体素滤波器,ROS Cartographer也提供了一个自适应的体素滤波器(Adaptive Voxel Filter),该滤波器会根据预设的(由用户指定)目标点(target number)的值,对这个滤波器的大小进行自适应调整,使之可以在保证目标点数量不超过最大size的前提下完成最小(也可以说是最优)size的选择。

在2D的情况下,可以选择不使用IMU惯性传感器,但是在进行3D建图时,则需要提供IMU的相关信息,借此预计建图时机器人的朝向(扫描方向),降低在扫描匹配(scan matching)时的复杂度。

体素滤波器(Voxel Filter)

体素滤波器(Voxel Filter)是一种点云下采样算法,用于降低点云数据量。它将点云数据划分为立方体(体素)网格,并将每个体素内的点替换为该体素的质心点。这样做可以保留点云数据的结构特征和形状,同时减少点云数据的大小。

体素滤波器的算法流程如下:

  1. 将点云数据划分为体素网格:根据设定的体素大小,将点云数据划分为一个个立方体网格。
  2. 对每个体素进行处理:对于每个体素,将其内部的所有点取平均值作为该体素的质心点。
  3. 将处理后的体素合并:将处理后的体素合并成一个新的点云数据集。

在ROS中,体素滤波器可以通过PCL库中的VoxelGrid类来实现。用户可以指定体素的大小和点云数据的输入输出。该类还支持在三个坐标轴上设置不同的体素大小,以适应不同的点云数据。

使用体素滤波器可以有效地减少点云数据的大小,同时保留其关键特征,对于一些需要处理大量点云数据的场景,如机器人自主导航和三维重建等应用中,体素滤波器是一个非常有用的工具。

惯性传感器(IMU: Inertial Measurement Unit)

IMU包含多个传感器,例如加速度传感器、陀螺仪、磁力仪等,主要负责提供机器人的运动与方向信息,可以得到机器人的线速度、角速度、加速度等等,甚至可以给出磁场信息。

IMU提供了一个准确的重力方向,重力矢量可以作为标定传感器测量值和估计机器人滚动和俯仰角的参考。此外,IMU 可以提供一个良好的机器人旋转的整体指示,这可以用来提高里程估计的准确性。

扫描匹配(Scan Matching)

在SLAM中,"scan matching"是指将一个局部地图(submap)与另一个包含相邻激光雷达扫描数据的局部地图进行比较并计算它们之间的相对位置和姿态变换(即6DoF的运动估计)。这个过程中,计算机会寻找局部地图中与相邻局部地图的特征匹配的关键点,然后计算它们之间的相对位姿。这种比对方式的目的是将局部地图(submap)相对于其他局部地图(submap)的位姿与机器人在世界坐标系中的位姿进行对齐。因此,在3D SLAM中,IMU提供了机器人姿态的初始猜测,这有助于降低scan matching的计算复杂度。

以下是两种扫描匹配的方法:

  • The CeresScanMatcher takes the initial guess as prior and finds the best spot where the scan match fits the submap. It does this by interpolating the submap and sub-pixel aligning the scan. This is fast, but cannot fix errors that are significantly larger than the resolution of the submaps. If your sensor setup and timing is reasonable, using only the CeresScanMatcher is usually the best choice to make.
  • The RealTimeCorrelativeScanMatcher can be enabled if you do not have other sensors or you do not trust them. It uses an approach similar to how scans are matched against submaps in loop closure (described later), but instead it matches against the current submap. The best match is then used as prior for the CeresScanMatcher. This scan matcher is very expensive and will essentially override any signal from other sensors but the range finder, but it is robust in feature rich environments.

CeresScanMatcherRealTimeCorrelativeScanMatcher都是用来进行扫描匹配的工具,它们都需要一个初始猜测(initial guess)作为先验信息。CeresScanMatcher会将扫描与子地图进行匹配,并通过子像素对齐来找到最佳位置,匹配速度较快。但是,如果错误显著大于子地图的分辨率,则无法修复。通常情况下,如果您的传感器设置和时序合理,仅使用CeresScanMatcher是最佳选择。

如果没有其他传感器或您不信任其他传感器,则可以启用RealTimeCorrelativeScanMatcher。它使用与环路闭合中扫描与子地图匹配类似的方法,但是它是针对当前子地图进行匹配,最佳匹配将被用作CeresScanMatcher的先验。这种扫描匹配器非常昂贵,并且基本上会覆盖来自除了激光测距仪以外的其他传感器的任何信号,但在复杂环境中具有相当的鲁棒性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/3792.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python满屏表白代码

目录 前言 爱心界面 无限弹窗 前言 人生苦短,我用Python!又是新的一周啦,本期博主给大家带来了一个全新的作品:满屏表白代码,无限弹窗版!快快收藏起来送给她吧~ 爱心界面 def Heart(): roottk.Tk…

【Linux】计算机网络1

计算机网络的背景背景:早在20世纪50年代初,美国建立的地面防空系统就是将地面的雷达和其他测量控制设备的信息通过通信线路汇集到一台中心计算机进行处理,开创了把计算机技术和通信技术相结合的尝试。20世纪60年代中期开始,出现、…

OSPF----特殊区域

目录 OSPF----特殊区域 第一大类----末梢区域(Stub Area) 完全末梢区域((Totally Stub Area) 第二大类特殊区域----非完全末梢区域(NSSA) OSPF----特殊区域 第一大类----末梢区域(Stub Area&#xff09…

动态版通讯录——“C”

各位CSDN的uu们你们好呀,今天,小雅兰的内容是动态版通讯录啦,其实之前,我就已经写过静态版的通讯录了,只是存在着一些问题,具体细节可以详细看看我的静态版通讯录,好了,话不多说&…

计算机视觉知识点(一)——交并比(IoU)及其若干改进

交并比(IoU)前言IoU公式及示意图IoU Loss缺点GIoU Loss公式及示意图缺点DIoU公式及示意图CIoU前言 目标检测是一个常见的计算机视觉任务,在目标检测任务中,交并比作为评判检测框的标准具有很重要的意义,在实际的应用中…

【百面成神】java web基础7问,你能坚持到第几问

前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:纯手打总结面试题,自用备用 🌰 文章简介:java web最基础、重要的8道面试题 文章目…

SAP 系统中过账码or记账码

SAP中过账码和记账码是指同一个事物。 在实际业务中,记账码就是只有“借”和“贷”, 而SAP中Posting Code肩负着更多的任务: 1)界定科目类型, 2)借贷方向, 3)凭证输入时画面上的字…

运算放大器:电压比较器、电压跟随器、同相比例放大器

目录一、单限电压比较器二、滞回电压比较器三、窗口电压比较器四、正点原子直流电机驱动器电路分析实战1、电压采集电路2、电流采集电路3、过流检测电路Ⅰ、采用分压后的输入电压:Ⅱ、采用理想电压源的输入电压:Ⅲ、同相输入电压采用的是非理想电压源&am…

自考本科数据结构导论(02142)历年(应用题+算法题)真题汇总【20年4月-22年10月】

文章目录2020年4月应用题算法设计题2020年10月应用题算法设计题2021年4月应用题算法设计题2021年10月应用题算法设计题2022年4月应用题算法设计题2022年10月应用题算法设计题2020年4月 应用题 有二叉树如题29图所示,写出该二叉树的先序遍历、中序遍历和后序遍历序列。 如题…

AI真的快让我们失业了,从ChatGPT到Midjourney

参考文章: https://mp.weixin.qq.com/s/3RdHPPhYgDfB6KY6Y9Sk2A跟AI有关的新闻,一个接着一个。前一天你还和往常一样进入梦乡,第二天醒来就能被新的AI新闻“炸弹”震得心惊。 以ChatGPT为代表的AI语言模型,以Midjourney为代表的…

五、寄存器方式LED灯控制

寄存器方式LED灯控制 1、原理 电路图中相同网络标号表示它们是连接在一起,STM32F103ZET6的PC0-PC7 管脚连接D1-D8发光二极管阴极,如要使 D1 指示灯亮,只需控制 PC0 管脚输出低电平。 2、工程文件 Keil工程包含main.c、stm32f10x.h、start…

vue开发常用的工具有哪些

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…

开启新航路,拓尔思发力AIGC市场 | 爱分析调研

2022年,随着AI聊天机器人GhatGPT在世界范围内持续火爆,极具创意、表现力、个性化且能快速迭代的AIGC技术成功破圈,成为全民讨论热点。 AIGC是指在确定主题下,由算法模型自动生成内容,包括单模态内容如文本、图像、音频…

【Leetcode】队列的性质与应用

文章目录225. 用队列实现栈示例:提示:分析:题解:622. 设计循环队列示例:提示:分析:题解:225. 用队列实现栈 请你仅使用两个队列实现一个后入先出(LIFO)的栈&…

个人时间管理网站—Git项目管理

🌟所属专栏:献给榕榕🐔作者简介:rchjr——五带信管菜只因一枚😮前言:该专栏系为女友准备的,里面会不定时发一些讨好她的技术作品,感兴趣的小伙伴可以关注一下~👉文章简介…

面试官:如何保证接口幂等性?一口气说了9种方法!

本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址 大家好,我是大彬~ 今…

idea 关于git使用总结分享

文章目录前言idea 关于git使用总结分享1. git 目录指定自己的git2. git 回滚到指定提交3. git 回滚某个文件4. 从远程仓库分支拉取最新代码5. 切换分支6. 上传到远程仓库7. git 关联上游服务8. 从上游分支拉取最新的代码9. 从上游仓库上取一个新的branch到远程仓库前言 如果您觉…

【LeetCode】二叉树的后序遍历(递归,迭代)

目录 题目要求:给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 方法一:递归 方法二:迭代 思路分析: 代码展示: 复杂度分析 方法三:迭代进阶 思路分析: 代码展示&a…

python玄阶斗技--tkinter库

目录 一.tkinter库介绍 二.功能实现 1.窗口创建 2.Button 按钮 3.Entry 文本输入域 4.text 文本框 5.Listbox 多选下拉框 6.Radiobutton 多选项按钮 7.Checkbutton 多选按钮 8.Scale 滑块(拉动条) 9.Scroolbar 滚动条 10.Menu 菜单栏 11. messagebox 消息框 12…

比肩ChatGPT的国产AI:文心一言——有话说

🔗 运行环境:chatGPT,文心一言 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好&am…