slam定位学习笔记(六)

news2025/8/12 12:09:33

学习内容来自这篇文章,主要是将模块进行划分以及根据划分的模块对前面的代码结构进行调整。

一、模块划分

之前的文章主要介绍了这几个功能的实现:传感器时间同步点云去畸变实时显示点云精度评价前端里程计。将它们区分成三个模块:

1)数据预处理:主要包括传感器时间同步和点云去畸变。

2)前端里程计:主要就是计算并输出点云位姿。

3)显示模块:主要是生成点云地图,局部地图和全局地图。

之后还会添加两个模块后端优化闭环检测,这样共计五个模块,一个基础的slam框架就搭建好了。之后的学习就是在五个模块里面学习。

二、代码文件管理思路

确定整个工程有五个模块后,就应该对于不同的模块进行分析,对之前的代码进行结构优化。分析这五个模块,第一个模块是建图和定位功能共有的模块,而后面四个模块单独是建图功能独有的模块。所以把第一个模块分离出来,后面四个模块的实现放在mapping文件夹内。然后就是为了代码的简洁,将整个模块划分为输入输出流程管理核心代码实现以及node文件的调用三个部分。

1)核心功能实现:用类进行封装,放在对应的文件夹下,文件名和功能模块名相同。

2)输入输出流程管理:负责输入输出功能,使用智能指针进行调用核心功能的类,以_flow结尾进行区分。(原来是这个原因)

3)node文件的调用:使用ros里面的spinOnce和while的循环来控制不同的模块。在app文件夹下以_node结尾。

4)yaml文件使用:针对不同模块进行不同的配置文件的撰写。

三、代码结构分析

首先分析src文件夹:

其中apps文件里面是不同的node文件,主要作用是控制不同的模块,前端、后端、数据预处理和显示模块的实现。

然后就是data_pretreat和mapping两个文件夹就是前面说的,将数据预处理和其它四个模块的实现区分开来。其中mapping里就是前端、后端、显示和闭环这四个模块的实现。区分为核心实现和以flow结尾的流程调用。

 models文件夹内保存的是点云处理滤波器、点云关键帧配准和点云畸变矫正这三个点云预处理的功能实现。

sensor_data文件夹内保存的是工程需要用到的传感器数据格式有gnss、imu、点云数据和速度数据以及需要通过计算出来的位姿数据、关键帧数据。区分方法是通过里面是否定义了SyncData函数,这个函数是用来同步不同传感器的时间戳。

然后就是subscriber文件夹和publisher两个文件夹。主要变化是subscriber和publisher文件夹内都新增了两个关键帧的文件:key_frame_subscriber.hppkey_frames_subscriber.hpp,它们的区别是回调函数使用的指针不同,一个使用的是geometry_msgs::PoseStamped,另一个是nav_msgs::Path

查看两个数据格式的对比:

可以发现两个最下面的都是geometry_msgs/Pose,然后Path里面多了一个header信息并且它的还包含了geometry_msgs/PoseStamped[] poses是数组的形式。所以path是用在了key_frames里面,另一个用在key_frame里面,应该是对于多了对于位置信息的使用。

然后就是tf_listener文件用来获取imu-gnss和lidar之间刚性距离位姿关系和tools里面的对文件夹,文件路径操作的文件。

里面所有的源码,在之前的笔记中都记录过了,这里就不再重复。对定位系列文章学习终于过半。希望本月可以将最后的后端优化、闭环检测和定位结束,希望寒假前可以完成传感器融合系列的学习。

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

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

相关文章

基于JSP的私人牙科医院管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址: https://download.csdn.net/download/itrjxxs_com/86466989 主要使用技术 ServletJSPJSCSSMysql 功能介绍 登录注册模块:填写基本信息注册(普通用户)登录; 公告管理:公告增删改查&…

预训练模型分词方式

BPE、WordPiece、SentencePiece tokenize的目标是将输入的文本流, 切分成一个个子串,使得每个子串具有相对完整的语义,便于学习embedding表达和后续模型的使用。 tokenize三种粒度:word、subword、char word/词:最自…

Flutter高仿微信-第35篇-单聊-视频通话

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 目前市场上第三方视频接口的价格高的吓人 视频通话价格: 标清&…

代码随想录算法训练营day55 | 392.判断子序列,115.不同的子序列

392.判断子序列 参考代码随想录算法训练营第五十五天 |392. 判断子序列、115. 不同的子序列 - 掘金 暴力解法: Time Complexity: O(M*N) Space Complexity: O(N) class Solution:def isSubsequence(self, s: str, t: str) -> bool:start 0 #used to make sur…

[附源码]java毕业设计医院网上预约系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Docker(9)DockerFile

文章目录什么是DockerFile构建过程执行DockerFile大致流程常用保留字DockerFile小案例创建dockerfile文件dockerfile内部脚本执行命令虚悬镜像什么是DockerFile DockerFile 使用来构建Docker镜像的文本文件,是由一条条构建镜像所需要的指令和参数组成脚本 构建过程…

CSDN Markdown 编辑器的目录与页内跳转功能

CSDN Markdown 编辑器的目录与页内跳转功能 文章目录CSDN Markdown 编辑器的目录与页内跳转功能 目录 页内跳转 正文内容跳转到标题正文内容跳转到正文内容结语目录 CSDN Markdown 编辑器的目录功能使用[TOC](你想要显示的目录总标题)格式,其中默认可省略括号及括…

2022-11-06 网工进阶(三十五)---PIM-SM工作原理(组播分发树的形成、ASM、SSM)

PIM-DM的局限性 中大型组播网络中由于网络较大,如果依然使用PIM-DM会遇到诸多问题: 1 使用“扩散-剪枝”方式需要全网扩散组播报文,对于网络有一定冲击。 2 所有组播路由器均需要维护组播路由表,即使该组播路由器无需转发组播数…

ARM-A架构入门基础(一)预备知识

14天学习训练营导师课程:周贺贺《ARMv8/ARMv9架构-快速入门》 1. 背景 ARM全称: Advanced RISC Machines。 ARM处理器: 基于ARM公司设计的架构而研发的处理器,包含arm core和外设。ARM公司本身不生产处理器,只出售技…

RNA-seq 详细教程:分析流程介绍(1)

学习目标 了解从 RNA 提取到获取基因表达矩阵, 既RNA-seq 分析的整个流程。 1. workflow 进行差异表达基因分析的前提是,获取代表基因表达水平的矩阵。因此在进行分析前,必须知道基因表达矩阵是如何产生的。 在本教程中,将会简要的…

基于JAVA的鲜花店商城平台【数据库设计、源码、开题报告】

数据库脚本下载地址: https://download.csdn.net/download/itrjxxs_com/86427660 摘要 在互联网不断发展的时代之下,鲜花软件可以为鲜花企业带来更多的发展机会,让企业可以挖掘到更多的潜在用户,同时结合企业的优势就能够为用户…

【单目标优化求解】粒子群混沌混合蝴蝶优化算法求解最优目标问题(HPSOBOA)【含Matlab源码 1538期】

⛄一、遗传算法简介 1 算法的种群初始化 设D维搜索空间中,随机生成初始解的表达式为: 式中,Xi表示蝴蝶群体中第i只蝴蝶(i 1, 2, 3, …, N)空间位置,N表示初始解的个数;Lb, Ub分别表示搜索空间的上界和下界&#xff…

Linux vmware 编译模块失败。 Vmware player Unable to install all modules.

Vmware player Unable to install all modules. See log for details ubuntu下的vmware play经常会让更新模块。一起点击确认就可以正常编译更新。 而且一定要编译后才能打开虚拟机系统 但是奇怪的是,最近一次点击 更新,报错: 显示的英文…

STM32F103的FSMC模块驱动LCD屏幕

以下内容为对正点原子的STM32F103STM32F103STM32F103精英板的FSMCFSMCFSMC模块驱动LCDLCDLCD屏幕例程的学习。做一个记录来加强对模块的认知。 FSMCFSMCFSMC的全称是FlexiblestaticmemorycontrollerFlexible\quad static\quad memory\quad controllerFlexiblestaticmemory…

【Python+Appium】开展自动化测试(四)使用weditor进行元素定位

目录 前言 一,weditor的安装与使用 二,遇到的问题 结语 前言 上一篇我们讲到了如何通过编写一个简单的Python脚本完成了登录app的操作,如何断言,如何编写一条完整的用例。那么今天继续我们的自动化测试第四天,使用…

【Java进阶篇】第五章 集合(下)--Map集合

文章目录1、概述2、Map接口中的常用方法3、Map集合的遍历4、哈希表的数据结构5、Map集合的存取6、hashCode()和equals()的重写7、一些小零散的东西8、HashMap和Hashtable的区别9、Properties类10、TreeMap11、自定义类实现Comparable接口12、二叉树13、Comparator接…

Caffeine《一》

《Caffeine(Java顶级缓存组件)一》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《Caffeine(Java顶级缓存组件)》《Caffeine(Java顶级缓存组件)一》1. Caffeine缓存概念1.1 缓存的分…

【MyBatis】一、概述

框架 框架就是对通用代码的封装,提前写好了一堆接口和类,我们可以在做项目的时候直接引入这些接口和类,基于这些现有的接口和类进行开发,提高开发效率。 框架一般以jar包形式存在 三层架构 表现层(UI)&am…

数字化助力生产管理:计件工资管理系统

目前因市场经济的发展,企业为求发展同时为防止消极怠工的情况,常把员工工资与产量结合起来。为了增加工人的劳动积极性,秉持多劳多得的科学管理理念,许多生产类型企业均实现了计件工资制。所谓的计件工资制是指按照生产的合格品的…

python之opencv人脸识别快速体验

目录 1、灰度转换 2、引用opencv官方提供的人脸训练模型 3、绘制方框(用于框住人脸) 4、效果及完整代码: 5、检测多张人脸: 学习链接: 1、灰度转换 # 灰度转换gary cv.cvtColor(img,cv.COLOR_BGR2GRAY) 2、引…