40-总结-【cartographer源码分析】系列的第四部分【io源码分析】

Cartographer学习记录:Cartographer地图3D可视化配置(自录数据集版) Ubuntu系统下利用自己数据集进行Cartographer的3D建图,内有urdf、lua、launch文件的配置。 阅读详情
【cartographer源码分析】系列的第四部分【io源码分析】。

现总结io文件夹涉及到的主要功能:


【1】file_writer.h

file_writer.h定义了多个用于文件写入的类

  • FileWriter
    • FileWriter是负责文件写入的虚基类没有数据成员.只提供一系列抽象接口.
    • 包括3个抽象接口:
      • WriteHeader(),写入文件head
      • Write(),写入数据
      • Close(),关闭文件
  • StreamFileWriter

    • StreamFileWriter 文件流写入类,继承自FileWriter
    • 数据成员只有一个std::ofstream out_负责将文件写入磁盘.
    • 包括3个成员函数:
      • WriteHeader(),写入文件head
      • Write(),写入数据
      • Close(),关闭文件
  • 全局函数:

    • using FileWriterFactory =
      std::function< std::unique_ptr< FileWriter >(const string& filename)>;
      工厂模式,
      创建一个FileWriter对象,由智能指针管理生命期,
      返回值是std::unique_ptr,
      函数参数是string.

【2】io/points_batch.h:

  • PointsBatch类是对多个点云point的抽象.这些point在由同一时刻,同一机器人坐标地点的传感器采集而得。
    数据成员主要描述了point的特性.
    PointsBatch数据成员:

    • common::Time time; point采集时间.
    • Eigen::Vector3f origin; sensor的世界坐标, 传感器位姿
    • string frame_id;关键帧的id
    • int trajectory_index;轨迹线id
    • std::vector points;point的几何参数,vector<{x,y,z}>
    • std::vector intensities;光强
    • std::vector colors;point的rgb值
  • 全局函数

    • void RemovePoints(std::vector to_remove, PointsBatch* batch);按照to_temove中的索引,在batch中移除某些point.

【3】流水线-points_processor

整个IO文件夹实现了对点云数据的读取和存储,并且为了模块化,cartographer使用流水线作业的方式对点云进行处理(pipeline)。不同的.h文件抽象了流水线不同的处理器processor。并且类似于链表,每个在流水线上的processor都含有一个Next指针,执行下一阶段的processor。以此来执行作业。在assets_writer_backpack_2d.lua文件中有各个pipeline的处理流程.

【4】io/points_processor.h


points_processor.h文件夹定义了一个抽象基类PointsProcessor,抽象了所有在流水线上的processor的公有接口。提供一种批量处理points的方法。

  • 类内数据结构:

    • enum class FlushResult {
      kRestartStream,//重启流水线
      kFinished,//已完成作业
      };
      用于表达本处理器的当前状态,枚举值
  • 2个抽象接口:

    • virtual void Process(std::unique_ptr points_batch) =0;纯虚函数,Process()负责对PointsBatch进行处理
    • Flush()刷新点云数据.

【5】min_max_range_filtering_points_processo

drawio二次开发 记录一下 二次开发drawio的过程 首先要说一下 drawio 这个东西是真的很强大,由于公司业务的发展,需要用到或者界面编辑工具,话不多说直接刚。 首先先去将项目搭建起来,我搭建过程是在Ubuntu下搭建的,搭建过程很简单,打包编译成war包后运行在tomcat下面就可以了。这里就不详细讲搭建过程了,具体自己搜索一下 网上搭建教程很多,操作很简单。下面我主要讲一下 怎么进入到开发者模式去... 阅读详情

相关推荐

Cartographer源码理解

cartographer源码理解与仿真环境配置

qq_37705385的博客 1359

如何使用Cartographer生成的地图

如何使用Cartographer生成的地图 参考Cartographer_ros官方文档 随着传感器数据的传入,诸如 Cartographer 之类的 SLAM 算法的状态会发生变化,以保持当前对机器人轨迹和周围环境的最佳估计。 因此,Cartographer 可以提供的最准确的定位和建图是算法完成时获得的定位和建图。 Cartographer 可以以.pbstream文件格式序列化其内部状态,该文件格式本质上是一个压缩的 protobuf 文件,其中包含 Cartographer 内部使用的数据结构的快照

weixin_39061796的博客 1923

draw.io二次开发(3)从删删减减开始定制自己的drawio

经过克隆代码、配置IntelliJ/IDEA和Tomcat、以及本地部署(详见前几篇)之后,终于到了上手改代码的环节了。首先需要强调的一点是:千万不要去改 *.min.js 文件中的代码,这些文件都是生成的压缩代码,我们一定要再开发模式下进行修改,而不是改 *.min.js文件中的代码。

皓月如我的专栏 8102

draw.io源码深度解析与实战部署指南

draw.io(现称为diagrams.net)是一款功能强大且开源的可视化图表绘制工具,广泛应用于软件开发、系统设计、教学演示等多个领域。其直观的图形编辑界面支持流程图、UML图、网络拓扑图、组织结构图等多种图表类型,满足不同场景下的可视化需求。draw.io 提供了丰富的绘图功能,支持拖拽式操作,用户可以轻松创建复杂的图形结构。其主要功能包括:功能模块功能描述图形绘制支持多种形状、线条、连接器和模板,便于构建专业图表图表类型。

weixin_35266799的博客 1222

drawio.js源码

基于mxgraph.js的基础之上二次开发的,目前最强大的绘图类工具里面排名前一、二名的 draw.io 生成组态编辑器.

俄罗斯方块 C++控制台版

一、创建方块 wstring tetromino[7]; tetromino[0].append(L"..X...X...X...X."); // Tetronimos 4x4 tetromino[1].append(L"..X..XX...X....."); tetromino[2].append(L".....XX..XX....."); tetromino[3].append(L"..X..XX..X......"); tetromino...

一只大鸽子的博客 1625

Python实战:高效稳定采集微信视频号评论的API爬虫方案

网络爬虫是数据采集领域的核心技术,其原理是通过程序模拟浏览器行为,向目标服务器发送HTTP请求并解析响应数据,从而自动化获取网页或接口中的信息。这项技术的核心价值在于能够高效、批量化地收集公开数据,为市场分析、舆情监控和竞品研究提供数据基础。在社交媒体分析、电商价格监控等应用场景中,爬虫技术尤为重要。针对微信视频号这类动态加载的复杂应用,传统的GUI自动化工具(如影刀RPA)常面临性能瓶颈和风控挑战。本文聚焦于通过Python实现**无感采集**,直接与后端**API接口**交互,构建稳定高效的评论数据采集

weixin_30899023的博客 329

手把手教你用C++和NI-VISA写个简易仪器上位机(附QT工程配置)

本文详细介绍了如何使用C++和QT框架结合NI-VISA驱动开发跨平台仪器控制上位机软件。从Ubuntu环境配置、VISA通信核心架构设计到QT界面与业务逻辑解耦,提供了完整的实战指南和代码示例,帮助开发者快速构建专业级仪器控制程序。

weixin_42522374的博客 274

海思MIPI屏调试实战:从参数计算到点亮屏幕的完整指南

本文提供了一份海思平台MIPI屏幕调试的完整实战指南。文章以Hi3516DV300调试800x1280分辨率屏幕为例,详细讲解了从参数计算、配置文件修改到最终点亮屏幕的全流程,并分享了常见问题排查与进阶优化技巧,旨在帮助嵌入式开发者高效解决MIPI屏调试难题。

weixin_29190573的博客 736

PYNQ开发板使用-使用DMA进行数据搬移(Simple DMA transfer 模式)

该篇是学习使用PYNQ开发板,实际上是对ZYNQ PL端AXI_CDMA 核的应用。实验步骤参照官网的教程,一步一步地做,但是由于在硬件资源布置方面与官方教程稍有出入,所以在SDK的源码里也进行了修改。 AXI_CDMA特性: 如果是使用ZYNQ 7系列芯片(可能其他Xilinx也是通用的),xilinx的AXI_CDMA 核有两种传输模式:轮询(poll)和中断(...

YGLeeeon的博客 3521

我写了一个自动识别火车车厢位置的算法【lidar点云识别】

我写了一个自动识别火车车厢位置的算法【lidar点云识别】

qq_43212290的博客 798

基于Simulink的超级电容器充放电仿真

为了更好地理解和设计超级电容器的应用系统,通常需要进行详细的仿真分析。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证超级电容器充放电系统的控制策略。本教程将详细介绍如何使用 Simulink 进行超级电容器充放电的仿真实例。如果你希望对超级电容器的充放电过程进行精确控制,可以添加一个简单的逻辑控制器来控制开关的状态。通过本教程,我们详细介绍了如何使用 Simulink 进行超级电容器充放电的仿真实例。2. 添加超级电容器模型。7. 添加控制器(可选)1. 调整超级电容器参数。

xiaoheshang_123的博客 518

【100%通过率】华为OD机试真题2026双机位C卷 C语言 实现【加密算法】

【100%通过率】华为OD机试真题2026双机位C卷 Python&JS 实现【加密算法】有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下

MISAYAONE的博客 651

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: cartographer源码分析(38)-io-null_points_processor.h
下一篇: cartographer源码分析(41)-kalman_filter-gaussian_distribution.h
slamcode
博客等级 码龄9年 977粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值