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的先验。这种扫描匹配器非常昂贵,并且基本上会覆盖来自除了激光测距仪以外的其他传感器的任何信号,但在复杂环境中具有相当的鲁棒性。

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

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

相关文章

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

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

【云原生|Docker】06-dokcerfile详解

目录 前言 Dockerfile基础示例 Dockerfile简介 1. Dockerfile概念 2. Dokcer镜像分层理解 ​3. Doker build构建原理 Dockerfile参数解析 1. Dokcerfile组成 2. 指令说明 2.1 FROM引入基础镜像 2.2 LABEL 2.3 ENV 2.4 RUN 2.5 COPY 2.6 ADD 2…

初识操作系统

目录 1.操作系统是什么 2.为什么要有操作系统 3.操作系统的相关关系 1.驱动程序 2.系统调用接口 3.用户调用接口 4.用户程序 4.用具体的例子理解操作系统 1.操作系统是什么 (1)操作系统是一组管理计算机硬件与软件资源的计算机软件程序 。 (…

Linux进程概念—环境变量

Linux进程概念—环境变量1.孤儿进程2.环境变量2.1常见环境变量2.2查看环境变量方法2.3在环境变量中添加2.4和环境变量相关的命令2.5环境变量的组织方式2.6命令行参数🌟🌟hello,各位读者大大们你们好呀🌟🌟 &#x1f68…

【Spring事物三千问】TransactionSynchronizationManager的原理分析

TransactionSynchronizationManager TransactionSynchronizationManager 是管理每个线程的DB连接资源和事务同步的核心委托类。 如果事务同步未处于活动状态,则表示当前没有事务,或者事务管理器不支持事务同步。 TransactionSynchronizationManager 中…

力扣-行程和用户

大家好,我是空空star,本篇带大家了解一道困难难度(实际很简单)的力扣sql练习题。 文章目录前言一、题目:262. 行程和用户二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行…

Proteus8.15安装包下载及安装教程

[软件大小]: 643 MB [安装环境]: Win11/Win 10 [软件安装包下载]: https://pan.quark.cn/s/dcacfc0d3e41 Proteus是英国著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产…

【Python】在python中使用MySQL

文章目录0 前言1 参考链接2 数据库概述3 MySQL配置3.1 下载及安装3.2 环境配置3.3 基本使用3.4 问题解决3.4.1 如何重置密码3.4.2 如何重置服务名称4 SQL语句4.1 一些关键点 【*时时更新*】5 在python中使用MySQL0 前言 最近接了一个小项目,需要使用数据库来处理后台…

代码随想录【Day42】动态规划 | 背包问题、416. 分割等和子集

背包问题概述 01背包理论基础 确定dp数组以及下标的含义 对于背包问题,有一种写法, 是使用二维数组,即dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。 确定递推公式 不放物品i&…

人工智能交互系统界面设计(Tkinter界面设计)

文章目录前言一、项目介绍二、项目准备三、项目实施1.导入相关库文件2.人脸信息验证功能3.语音交互与TCP数据通信4.数据信息可视化四、相关附件前言 在现代信息化时代,图形化用户界面(Graphical User Interface, GUI)已经成为各种软件应用和…

docker本地私有仓库搭建

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、下载和安装registry镜像1.下载2.安装配置二、使用私有仓库1.配置内网环境2.配置json安全3.将docker镜像推入私服库总结前言 和Maven的管理一样,…

数据分析学习项目:东京奥运会跳水评论分析

“中国跳水梦之队” ————有关东京奥运会跳水评论分析 导语 第32届夏季奥林匹克运动会于2021年07月23日-2021年08月08日在日本东京举办。 四年一届的奥运会可以说是世界瞩目的盛会,奥运健儿们在赛场上的精神风貌不只是代表了他们自身的运动精神,更昭…

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原理解析

文章目录Transformer模型结构构成组件整体流程GPT预训练微调模型GPT2GPT3局限性GPT4相关论文Transformer Transformer,这是一种仅依赖于注意力机制而不使用循环或卷积的简单模型,它简单而有效,并且在性能方面表现出色。 在时序模型中&#…

广州蓝景分享—如何结合人工智能学习前端开发

前言 今天蓝景技术团队将要和大家探讨一个话题:如何借助人工智能辅助前端学习。实际上,这个主题也可以被描述为“如何正确看待人工智能”、“如何更好地使用人工智能”等等。2023年是人工智能元年,GPT模型的迭代使全世界为之关注和震撼。甚至…

铁威马NAS教程之利用docker快速搭建个人在线书库

这是一个基于Calibre的简单的图书管理系统,支持在线阅读。主要特点是:美观的界面、支持多用户、支持在线阅读、支持邮件推送、支持OPDS、支持一键安装,网页版初始化配置,轻松启动网站等等。 那么,如何利用docker快速搭…

高规格国赛接棒AidLux AI应用竞赛,AidLux邀你来报名赢大奖!

近年来,高等教育领域紧跟人才需求的变化,开设了人工智能、集成电路、大数据、智能物联网等一系列AI相关专业。 但根据就业招聘数据来看,这类与AI产业链直接相关的专业岗位,在就业市场上的绝对占比还相对有限。企业更多的需求&…

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

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

java HashMap 源码分析(深度讲解)

目录 一、前言 二、HashMap简介 三、HashMap的底层实现 四、HashMap的源码解读(断点调试) 0.准备工作 : 1.向集合中添加第一个元素 : ①跳入无参构造。 ②跳入put方法。 ③跳入putVal方法。 ④跳入resize方法。 ⑤回到putVal方法。…

【Java版oj】day19汽水瓶、查找两个字符串a,b中的最长公共子串

目录 一、汽水瓶 (1)原题再现 (2)问题分析 (3)完整代码 二、查找两个字符串a,b中的最长公共子串 (1)原题再现 (2)问题分析 (3)完…
最新文章