(02)Cartographer源码无死角解析-(33) LocalTrajectoryBuilder2D: 点云数据流向、处理、消息发布等→流程复盘

news2024/11/18 23:00:41

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下:
(02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885
 
文 末 正 下 方 中 心 提 供 了 本 人 联 系 方 式 , 点 击 本 人 照 片 即 可 显 示 W X → 官 方 认 证 {\color{blue}{文末正下方中心}提供了本人 \color{red} 联系方式,\color{blue}点击本人照片即可显示WX→官方认证} WX
 

一、前言

关于 LocalTrajectoryBuilder2D 有关于点云数据处理得部分已经讲解完成了,但是比较杂,比较乱,因为很多地方可能都是跳着讲解得。为了方便大家的理解,这里把相关的总要环节都复盘一下。首相再重述一下之前已经讲解过的数据系统构建过程。
 
( 1 ) \color{blue}(1) (1) 已经知道每新建一条轨迹就会创建一个 CreateGlobalTrajectoryBuilder2D或者 CreateGlobalTrajectoryBuilder3D对象,该对象的实例化位于 MapBuilder::AddTrajectoryBuilder() 函数中。实例化 CreateGlobalTrajectoryBuilder 对象时,会传入一个回调函数 local_slam_result_callback,该函数为 MapBuilderBridge::AddTrajectory 中的表达式:

      // lambda表达式 local_slam_result_callback_
      [this](const int trajectory_id, 
             const ::cartographer::common::Time time, 
             const Rigid3d local_pose,
             ::cartographer::sensor::RangeData range_data_in_local,
             const std::unique_ptr<
                 const ::cartographer::mapping::TrajectoryBuilderInterface::
                     InsertionResult>) {
        // 保存local slam 的结果数据 5个参数实际只用了4个
        OnLocalSlamResult(trajectory_id, time, local_pose, range_data_in_local);
      }

暂且先放一下,只需要知道其核心时调用 OnLocalSlamResult() 函数即可。
 
( 2 ) \color{blue}(2) (2) CreateGlobalTrajectoryBuilder(2D或3D) 对象中包含着一个 LocalTrajectoryBuilder(2D或3D)对象。CreateGlobalTrajectoryBuilder 在把雷达数据分发给 LocalTrajectoryBuilder 之前,会通过阻塞的方式对所有数据按时间进行排序(fix与Landmar可以通过参数配置取消)。

阻塞排序分发数据最重要的就是 cartographer::sensor::Collator 这个类,因为 Collator 中存在变量 OrderedMultiQueue queue_; 该变量中的核心函数 OrderedMultiQueue::Dispatch() 起到了按时间分发数据的主要作用,这里的时间同步,与后续激光雷达点云数据的时间同步时不一样的,回顾之前的内容如下:

        (0, scan): {      4,     }
        (0, imu):  {1,  3,   5,  }
        (0, odom): {  2,       6,}

这里的时间同步,是针对于所有传感器的数据,按时间戳分发数据。而激光雷达数据的时间同步,是把多个激光雷达数据进行混合,之前的分析图如下:
在这里插入图片描述

点云数据时间同步

 
( 3 ) \color{blue}(3) (3) CreateGlobalTrajectoryBuilder 接收到数据之后,就会转发至 LocalTrajectoryBuilder2D 或者 LocalTrajectoryBuilder3D 如果是激光雷达数据,则是调用到 LocalTrajectoryBuilder2D(3D)::AddRangeData() 函数。
 

二、激光雷达点云数据处理

这里主要以 LocalTrajectoryBuilder2D 处理点云数据为例,经过 CreateGlobalTrajectoryBuilder 转发到 LocalTrajectoryBuilder2D 的数据,即调用 LocalTrajectoryBuilder2D::AddRangeData() 函数进行处理。

已经是按时间分发的了,但是多个激光雷达的点云数据是仙湖

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

反复重购,资金严重浪费?企业资产需要这样管理

很多企事业资产具有数量大、种类多、价值高、使用周期长、使用地点分散&#xff0c;管理难度大。一些传统固定资产管理软件&#xff0c;痛点丛生&#xff0c;已难于满足企事业需求。 资产管理业务4大现状 01.手段滞后 资产实际的使用状态及状况无法得到及时、准确地反馈。 02.…

「Redis数据结构」RedisObject

「Redis数据结构」RedisObject 文章目录「Redis数据结构」RedisObject一、概述二、结构三、编码方式四、小结五、参考一、概述 redisObject对象非常重要&#xff0c;Redis对象的类型、内部编码、内存回收、共享对象等功能&#xff0c;都需要redisObject支持。 redis 不是一个…

DPDK EAL

DPDK全程是Intel Data Plane Development Kit&#xff0c;是一个数据平面开发集。 DPDK的主要思想 绕过内核&#xff0c;实现Zero Copy使用UIO驱动屏蔽硬中断&#xff0c;并采用PMD主动轮询&#xff0c;减少Cache Miss和切换上下文的开销使用大页内存&#xff0c;减少TLB Mis…

重磅:Docker Desktop正式集成WasmEdge。后者首登GitHubTrending

上周五&#xff0c;Docker Desktop 发布了 4.15 新版本。在这个版本中&#xff0c;Docker Desktop 正式集成了 WasmEdge 的 containerd shim&#xff0c; 并且 Docker Wasm 也从 tech preview 进入到了 beta 阶段。这意味着&#xff0c;1000 万 Docker Desktop 的用户都安装了…

代码安全与质量 | 在这个充满变数的时代,花小钱办大事

在这个充满变数的时代&#xff0c;许多企业都想要提升效率&#xff0c;但如何以同样的时间、人力成本创造出更大的价值&#xff1f;在研发领域&#xff0c;企业选择引入更好的工具来帮助交付高质量代码&#xff0c;比如Sonar&#xff0c;帮助团队充分利用时间&#xff0c;专注于…

Gradle 使用maven本地仓库 带来的思考

Gradle 使用maven本地仓库 带来的思考 本篇主要探究一下 在使用Gradle 的时候一般会配置 maven 的本地仓库的,那是不是Gradle 可以直接使用 maven本地仓库的jar呢 ? 下面来探究一下 思考 当我们在使用Gradle的时候 一配置一个 mavenLocal() 代表它会使用maven的本地仓库, 此时…

独立产品灵感周刊 DecoHack #040 - Google公布2022年度最佳应用榜单

本周刊记录有趣好玩的独立产品设计开发相关内容&#xff0c;每周发布&#xff0c;往期内容同样精彩&#xff0c;感兴趣的伙伴可以点击订阅我的周刊。为保证每期都能收到&#xff0c;建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。&#x1f4bb; 产品推荐 1. Sensei 这是一…

408真题-2021

死去的记忆正在攻击我&#xff1a; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n7aXxWnx-1670222893563)(https://waite1-1307752947.cos.ap-nanjing.myqcloud.com/img/202212051447504.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保…

网络编程之NIO 基础

一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 st…

数据结构与算法之Python实现——栈

在常用的数据结构中&#xff0c;有一批结构被称为容器——栈与队列。 本篇博客主要学习一下栈这种结构的特性&#xff0c;以及用python实现它的相关操作。 内容 顺序栈链栈栈的实际应用 在这之前&#xff0c;我们需要了解一下什么是栈&#xff0c;以及栈这种结构有什么用处&am…

HarmonyOS/OpenHarmony应用开发-DataAbility开发体验

场景介绍 基于Data模板的Ability&#xff08;以下简称“Data”&#xff09;&#xff0c;有助于应用管理其自身和其他应用存储数据的访问&#xff0c;并提供与其他应用共享数据的方法。Data既可用于同设备不同应用的数据共享&#xff0c;也支持跨设备不同应用的数据共享。 Dat…

使用vuedraggable实现拖拽式操作实战

背景 先说下需求&#xff0c;为了提升开发效率和降低开发成本和技术难度&#xff0c;采用低代码方式&#xff0c;通过配置来生成代码&#xff0c;算是代码生成器的升级版解决方案。 对于前端页面&#xff0c;某个业务实体&#xff0c;如系统参数&#xff0c;常见的菜单对应一…

Memcached 未授权访问漏洞验证

Memcached 是一个高性能的分布式内存对象缓存系统&#xff0c;用于动态Web应用以减轻数据库负载。 该服务的端号为&#xff1a;11211 使用绿盟漏洞扫描系统发现某服务器存在Memcached 未授权访问漏洞&#xff0c;如下图所示。 验证方法一&#xff1a; 使用nmap 脚本script-…

ADSP-21489的开发详解:Norflash的编程和烧写

编者的话 Flash 编程与烧写&#xff0c;原本应该是开发的最后一步&#xff0c;当所有程序都做好了&#xff0c;在线编译运行正常&#xff0c;才会通过 Flash 编程&#xff0c;生成二进制的可执行文件 LDR&#xff0c;再通过 JTAG 仿真器将 LDR 文件烧写到 Flash 中&#xff0c…

初探 Vue3 新特性

在本讲中&#xff0c;我们只会概述性的来介绍一下 Vue3 中新增的一些主要内容&#xff0c;而这些主要知识点的详细的使用和功能以及作用&#xff0c;我们会在后面的课程里面逐渐的给大家去解锁。那么明确好了我们的学习目标之后呢&#xff1f; 我们来看一下 Vue3 之中到底新增…

Docker---Docker-compose 安装部署 zentao 禅道

Docker-compose 安装部署 zentao 禅道 目录Docker-compose 安装部署 zentao 禅道一、环境准备1.更换国内源2.拉取zentao的docker镜像3.关闭防火墙4.安装启动docker、docker-compose二、通过yml文件进行部署一、环境准备 1.更换国内源 CentOS7 Base源&#xff1a; wget -O /et…

技术男的春天:小姐姐求助暖男分析

时光荏苒&#xff0c;这个故事发生在4年前&#xff0c;那时候我头发可真厚&#xff0c;坐地铁也不用戴口罩。 小姐姐求助 友圈一位要做毕设的小姐姐在求助postman怎么用&#xff0c;我就帮她解答了一下。 我知道她并非计算机相关专业&#xff0c;所以很奇怪为什么要用postma…

web安全渗透

自己模拟的环境,要的私信 Web安全渗透 1、通过URL访问http://靶机IP/1,对该页面进行渗透测试,将完成后返回的结果内容作为flag值提交; 修改源码maxlength对应的数值,3+16=19输出的数值是两位数,然后修改完之输入

HTML+CSS+JS网页设计期末课程大作业—— 绿色化妆品HTML+CSS+JavaScript

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Windows搭建web站点:为站点配置二级子域名 2-2

在上一篇文章《Windows搭建Web站点&#xff1a;免费内网穿透发布至公网 1/2》中&#xff0c;我们成功通过cpolar将内网web站点发布到公网可访问&#xff0c;但免费使用cpolar所生成的域名是随机变化的&#xff08;24小时后会变化&#xff09;&#xff0c;这只适合临时测试使用。…