fuel无人机自主探索代码解读1——map_ros.cpp【地图ros接口】

一、概述

map_ros.cpp订阅深度图/雷达点云、世界坐标下传感器pose,每0.05s启动esdf地图更新,每0.05s进行全局地图和局部地图可视化。主要功能为:接受传感器数据、调用sdf_map.cpp文件内部膨胀地图及esdf地图更新接口、地图可视化等。涉及传感器时间同步及深度图预处理等。

二、主要函数及作用

1、MapROS::setMap

作用:sdf地图赋值

2、MapROS::init

作用:地图ros接口初始化
1、launch参数的读取
2、map及接口参数的初始化
3、高斯噪声设置
4、ros定时器;pub声明;sub消息近似时间同步设置

3、MapROS::visCallback

作用:可视化定时器0.05s执行一次可视化
1、当前帧点云AABB包围框膨胀后的xy范围,z为探索高度范围,且可视化截断高度内,进行占据珊格位置点云及膨胀后被占据珊格位置点云的ros发布【局部地图】
2、被探索区域的边界框:下边界栅格索引   上边界珊格索引:将可视化截断范围内的占据珊格进行ros发布;统计探索范围内的已知状态珊格体积并存入文件【全局地图】

4、MapROS::updateESDFCallback

作用:定时器0.05s执行一次esdf更新
针对膨胀后的局部点云帧包围框采用欧式距离传输方法进行esdf的计算【最接近障碍物距离,结果存储在distance_buffer_中】
两种情况:无符号esdf:占据或未知为0,空白为正     有符号esdf:障碍物边缘珊格值为0,内部珊格值为负数,空白珊格为正

5、MapROS::depthPoseCallback

时间同步步骤:回调函数会在同步消息到达时被触发,并接收同步后的消息作为参数
作用:深度图-pose做时间同步后的消息回调
1、深度图深度像素滤波处理作为ros点云,继而得到各帧融合后占据珊格map【天花板作为占据】
2、膨胀占据珊格map

6、MapROS::cloudPoseCallback

时间同步步骤:回调函数会在同步消息到达时被触发,并接收同步后的消息作为参数
作用:点云-传感器pose做时间同步后的回调
1、输入激光雷达点云,传感器与点云点之间做ray-cast,得到各帧融合后占据珊格map【天花板作为占据】
2、膨胀占据珊格map

7、MapROS::proessDepthImage

作用:
1、深度图中像素深度值滤波处理【深度有最大最小阈值限制;深度图像素上下左右需要剔除一定带宽;深度图像素进行间隔提取访问】
2、将像素深度值转换到世界坐标系下构成深度点云并进行ros发布

8、MapROS::publishMapAll

作用:
在被探索区域的边界框:下边界栅格索引 上边界珊格索引内
1、将可视化截断范围内的占据珊格进行ros发布
2、统计探索范围内的已知状态珊格体积并存入文件

9、MapROS::publishMapLocal

作用:
当前帧点云AABB包围框膨胀后的xy范围,z为探索高度范围,可视化截断高度内:进行占据珊格位置点云及膨胀后被占据珊格位置点云的ros发布

10、MapROS::publishUnknown

作用:地图范围内的当前帧局部包围框内未知状态珊格点云生成及ros发布【可视化截断范围】

11、MapROS::publishDepth

作用:世界坐标系:深度图滤波后点云ros格式数据发布

12、MapROS::publishUpdateRange

作用:当前帧点云局部包围框的立方体可视化发布

13、MapROS::publishESDF

作用:进行当前帧点云AABB包围框xy各扩展55个珊格,z取给定高度值的珊格esdf点云ros发布【esdf对应于点云强度值】

三、参考资料

1、时间同步1
2、时间同步2
3、时间同步3

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

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

相关文章

Python笔记:比较运算符

比较运算符也叫关系运算符。 Python的比较运算符及用法&#xff1a; 比较运算符描述写法等于x y!不等于x ! y>大于x > y<小于x < y>大于等于x > y<小于等于x < y 1、比较运算符会返回布尔类型的结果。&#xff08;True / False&#xff09; num1 …

数电发票、全电发票为什么不是连号的?Node.js发票查验接口集成

全电发票号码为全国统一赋码&#xff0c;采用的是20位发票号码&#xff0c;其实是连续的。只是在实际开票过程中&#xff0c;不止一位纳税人在开&#xff0c;有其他纳税人也在开&#xff0c;所以会出现对某一个纳税人来说号码没有连续的情况。那么&#xff0c;全电发票如何进行…

Django图书馆综合项目-学习(2)

接下来我们来实现一下图书管理系统的一些相关功能 1.在书籍的book_index.html中有一个"查看所有书毂"的超链接按钮&#xff0c;点击进入书籍列表book_list.html页面. 这边我们使用之前创建的命名空间去创建超连接 这里的book 是在根路由创建的namespacelist是在bo…

6. RedHat认证-基于公钥的认证方式

6. RedHat认证-基于公钥的认证方式 主要学习客户端访问服务端的时候&#xff0c;免密登录这一方式 注意: 免密登录只是基于公钥认证的一个附带属性(基于公钥认证的方式更加安全&#xff0c;防止黑客暴力破解) 第一步&#xff1a;将客户端生成的秘钥传送到服务器 在客户端通过…

2024中国(厦门)国际医用消毒及感控设备展览会

2024中国&#xff08;厦门&#xff09;国际医用消毒及感控设备展览会 2024 China (Xiamen) International Medical Disinfection And Infection Control Exhibition 致力于打造医用消毒及感控设备产业采购一站式平台 时 间&#xff1a;2024年11月1-3日 November 1-3, 2024 …

一文扫盲(13):电商管理系统的功能模块和设计要点

电商管理系统是一种用于管理和运营电子商务平台的软件系统。它提供了一系列功能模块&#xff0c;帮助企业进行商品管理、订单管理、会员管理、营销推广、数据分析等工作。本文将从以下四个方面介绍电商管理系统。 一、什么是电商管理系统 电商管理系统是一种集成了各种功能模块…

免费的集成组件有哪些?

集成组件是指将多个软件或系统进行整合&#xff0c;以实现更高效、更可靠的数据处理和管理。在数据管理和分析领域&#xff0c;集成组件是不可或缺的工具之一。 在当今高度信息化的时代&#xff0c;集成组件在各行各业的应用中扮演着举足轻重的角色。集成组件能够将不同来源的…

更正:vue3升级nuxt3,server怎么修改

先给结论&#xff1a;放在nuxt.config.ts的vite中 在Nuxt配置中&#xff0c;nitro和vite的proxy配置虽然都可以用来处理代理&#xff0c;但它们的用途和作用范围有所不同。以下是它们的主要区别&#xff1a; nitro.devServer.proxy nitro 是 Nuxt 3 的服务器引擎&#xff0c…

【halcon踩坑】由于引用dll不一致导致的大坑。

背景 由于引用dll不一致导致的大坑,差点没跳出来。我们知道,halcon 有两个dll: halcondotnet和halcondotnetxl。 平时用的都是halcondotnet,halcondotnetxl时为了应付大图。 比如线扫相机扫出的大图。 踩坑 我的主项目中用到的halcondotnet,子项目中使用的halcondotne…

企业安全必备利器:专业级加密软件介绍

随着信息技术的迅猛发展&#xff0c;数据安全问题日益凸显&#xff0c;专业级加密软件应运而生&#xff0c;成为保护数据安全的重要工具。本文将对专业级加密软件进行概述&#xff0c;分析其特点、应用场景及分享。 一、专业级加密软件概述 专业级加密软件是指那些采用高级加密…

LLaMA-Factory环境安装-重点总结

问题&#xff1a;在使用官网介绍的博客&#xff0c;进行安装&#xff0c;比较顺利。只不过&#xff0c;在需要推理加速时&#xff0c;UI界面上&#xff0c;给出的选项所支持的FlashAttention-2和Unsloth&#xff0c;不好实现。在进行一系列的调整&#xff0c;总结如下&#xff…

三分钟了解计算机网络核心概念-数据链路层和物理层

计算机网络数据链路层和物理层 节点&#xff1a;一般指链路层协议中的设备。 链路&#xff1a;一般把沿着通信路径连接相邻节点的通信信道称为链路。 MAC 协议&#xff1a;媒体访问控制协议&#xff0c;它规定了帧在链路上传输的规则。 奇偶校验位&#xff1a;一种差错检测方…

uniapp怎么使用jsx

安装vitejs/plugin-vue-jsx npm install vitejs/plugin-vue-jsx -Dvite.config.js配置 import { defineConfig } from "vite"; import uni from "dcloudio/vite-plugin-uni"; import vueJsx from vitejs/plugin-vue-jsxexport default defineConfig({plu…

upload-labs靶场通关详解(1-15)

1.pass-01 查看源代码 是js&#xff0c;属于前端校验 可以通过禁用js来上传文件 2.pass-02 根据提示是MIME绕过 MIME&#xff1a;是设定某种扩展名的文件 用一种应用程序来打开的方式类型&#xff0c;当该扩展名文件被访问的时候&#xff0c;浏览器会自动使用指定应用程序来…

冯喜运:5.14黄金价格空头延续反弹空,原油走势分析实时操作

【黄金消息面分析】&#xff1a;周二&#xff08;5月14日&#xff09;亚洲时段&#xff0c;现货黄金窄幅震荡&#xff0c;目前交投于2342美元/盎司。金价周一因获利了结下跌1%&#xff0c;收报2336.10美元/盎司&#xff0c;投资者等待本周的关键通胀数据为今年美国降息提供更多…

机器学习——线性回归模型

目录 一、算法思想 二、代码实现 一、算法思想 线性回归模型的训练和预测&#xff0c;并包含了数据预处理、损失函数计算、梯度下降优化等步骤。以下是算法的主要步骤&#xff1a; 1. 数据加载与预处理(load_data函数): 从sklearn.datasets中加载波士顿房价数据集。将数据集…

浅析Java贪心算法

浅析Java贪心算法 在计算机科学中&#xff0c;贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。贪心算法并不总是能够得到全…

使用Subtitle edit合成双语字幕

有的时候从网上下载的字幕有单独的中文版和英语版&#xff0c;但是没有中英文一起的双语字幕&#xff1a; 后缀为chs的是中文简体后缀为cht的是中文繁体后缀为eng的是英文 如果我们在电脑端上可以直接用potplayer添加副字幕来实现双语&#xff0c;但是如果是别的播放器&#…

多线程·线程状态

目录 1.等待一个线程 join 2.休眠当前线程 3.线程的所有状态 4.线程的状态转换 1.等待一个线程 join 有些场景&#xff0c;我们需要控制线程的执行顺序&#xff0c;这时候就需要用到 join 了 比如&#xff1a;把大象装进冰箱要几步&#xff1f; 第一步&#xff1a;打开冰…

Java基础面试题(5.14)

1.Java语言的特点&#xff1f; 1.一面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff1b;2.平台无关性&#xff08; Java 虚拟机实现平台无关性&#xff09;&#xff1b;(类是一种定义对象的蓝图或模板)3.支持多线程&#xff08; C 语言没有内置…