⌈ 传知代码 ⌋ 基于ROS的气体浓度建图

news/2024/9/23 8:36:09/

💛前情提要💛

本文是传知代码平台中的相关前沿知识与技术的分享~

接下来我们即将进入一个全新的空间,对技术有一个全新的视角~

本文所涉及所有资源均在传知代码平台可获取

以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦!!!

以下内容干货满满,跟上步伐吧~


📌导航小助手📌

  • 💡本章重点
  • 🍞一. 概述
  • 🍞二. 演示效果
  • 🍞三.核心逻辑
  • 🍞四.使用方式
  • 🍞五.部署方式
  • 🫓总结


💡本章重点

  • 基于ROS的气体浓度建图

🍞一. 概述

本案例基于ROS系统和数字传感器,并采用VSLAM技术实现了在Rviz下的气体浓度可视化建图,不同的气体浓度通过不同的颜色进行表示。其中的定位技术并不局限于VSLAM技术,只要是能通过ROS发布定位话题的相关定位技术均可以实现气体浓度建图,如UWB、GPS等。


🍞二. 演示效果

在这里插入图片描述


🍞三.核心逻辑

主程序采用Python语言编写,主要代码编写逻辑为:

  • (1)通过串口读取数字传感器获取的浓度信息;

  • (2)将气体浓度与要设定的颜色数值建立映射关系;

  • (3)订阅VSLAM的定位ROS话题(此处为:/mavros/vision_pose/pose);

  • (4)发布气体浓度建图相关的ROS话题(此处为:enose/gas/concentration 和 enose/gas/markers)。

部分程序代码如下:

def parse_gas_data(data):try:parts = data.split(' ')if len(parts) >= 4 and parts[0] == 'Z' and parts[2] == 'z':concentration = float(parts[1])return concentrationelse:rospy.logwarn("收到非预期格式的数据,已跳过。")except ValueError as e:rospy.logerr(f"数据解析错误: {e}")return Nonedef get_color_for_concentration(concentration):baseLine = 3000.0  #数字传感器基线,可根据实际情况调整sensorRange = 5000.0  #设定传感器的变化范围normalized_value = min(max((concentration-baseLine) / sensorRange, 0.0), 1.0)color_value = int(normalized_value * 1000)r = color_value / 1000.0g = (1000 - color_value) / 1000.0b = min(2.0 * normalized_value, 1.0)return r, g, bdef read_serial_data():while not rospy.is_shutdown():data = ser.readline()try:data = data.decode('utf-8').strip()with data_queue.mutex:data_queue.queue.clear() data_queue.put(data)except UnicodeDecodeError as e:rospy.logwarn(f"解码串口数据时出错: {e}")def gas_concentration_publisher():global current_pose, serrospy.init_node('gas_concentration_publisher', anonymous=True)gas_pub = rospy.Publisher('enose/gas/concentration', GasConcentration, queue_size=10)marker_pub = rospy.Publisher('enose/gas/markers', MarkerArray, queue_size=10)rospy.Subscriber('/vins_estimator/odometry', PoseStamped, pose_callback)  #若为其他定位话题,请修改此处/vins_estimator/odometry

🍞四.使用方式

本程序需要与相关软硬件搭配使用

1. 所需硬件

传感器:本案例所使用的气体传感器为英国GSS公司生产的SprintIR传感器,其敏感气体为C02,可通过串口直接输出相关浓度数据。但不局限于使用SprintIR,也可采用其他数字传感器或模拟转数字的传感器,并根据输出数据不同,适当修改程序代码。

  1. 原项目的github链接 CapHuman

  2. 下载数据集及权重文件,分别放在data和ckpts目录下;

  3. 如果遇到的网络连接问题,通通改为手动下载

在这里插入图片描述

传感器输出数据格式如下:

在这里插入图片描述

  • 定位模块:本案例中采用的VSLAM算法为香港科技大学发布的开源视觉定位算法VINS-Fusion,其部署方式不在本案例中复述,可参考VINS-Fusion官方资料。除此之外还可以采用其他可发布ROS定位话题的定位技术(GPS、UWB等)。本案例中的VSLAM算法采用Intel D435双目相机模块。

  • 能够运行Ubuntu20.04的计算机(如PC主机、Intel NUC、Nvidia Jetson Orin NX、香橙派等性能较强的主机或单板计算机;若定位技术采用Intel T265相机或UWB、GPS等,也可采用树莓派、Jetson nano等性能较弱的单板计算机)

2. 所需软件环境

  • 操作系统:Ubuntu 20.04(其他版本未做验证)

  • ROS版本:ROS1

  • Python版本:3.6及以上

  • 定位程序:VINS-Fusion、MavROS。(其他定位技术可参考其ROS话题发布方式)

  • 双目相机程序:Realsense SDK2.0、realsense-ros


🍞五.部署方式

  • (1)下载本程序附件压缩包,将其解压缩并放置于Ubuntu系统用户目录(即“ ~/ ”);

  • (2)在安装好ROS的前提下编译程序,右键运行终端程序,并依次执行如下3行命令:

cd ~/gas_concentration_ws
makedir build
catkin_make

在这里插入图片描述

配置工作空间的环境变量,终端执行:

gedit ~/.bashrc

打开.bashrc后,在文件末尾添加:

source ~/gas_concentration_ws/devel/setup.bash

(3) 运行相关ROS包:

  • ① 运行双目相机程序包:

roslaunch realsense2_camera rs_camera.launch

  • ②运行VINS-Fusion:

roslaunch vins realsense.launch

  • ③运行气体浓度建图程序包:

roslaunch gas_concentration gas_con_rviz.launch

在这里插入图片描述

在这里插入图片描述


🫓总结

综上,我们基本了解了“一项全新的技术啦” 🍭 ~~

恭喜你的内功又双叒叕得到了提高!!!

感谢你们的阅读😆

后续还会继续更新💓,欢迎持续关注📌哟~

💫如果有错误❌,欢迎指正呀💫

✨如果觉得收获满满,可以点点赞👍支持一下哟~✨

【传知科技 – 了解更多新知识】


http://www.ppmy.cn/news/1508841.html

相关文章

网络通信(基于TCP/IP实现客户端/服务器的通信)

编程结构 被连接者需要完成的任务(服务端): 1、创建socket内核对象,内核创建完成后会返回它的描述符(该描述只是为了完成连接,三次握手) 2、准备本机地址(ip地址端口号) 3、绑定(把本机地址与s…

RCE之无参数读取文件

什么是无参数&#xff1f; 顾名思义&#xff0c;就是只使用函数&#xff0c;且函数不能带有参数&#xff0c;这里有种种限制&#xff1a;比如我们选择的函数必须能接受其括号内函数的返回值&#xff1b;使用的函数规定必须参数为空或者为一个参数等 例题&#xff1a; <?…

麻雀搜索算法(SSA)与支持向量机(SVM)结合的预测模型(SSA-SVM)及其Python和MATLAB实现

### 引言 随着科技的快速发展&#xff0c;锂离子电池被广泛应用于电动汽车、便携式电子设备以及可再生能源存储等领域。有效预测锂离子电池的剩余寿命&#xff08;Remaining Useful Life, RUL&#xff09;对于提升电池的使用安全性和经济性具有重要意义。传统的RUL预测方法往往…

Covalent(CXT)与Sei合作,为扩展以太坊应用提供数据解决方案

Covalent Network&#xff08;CXT&#xff09;是领先的模块化数据基础设施层&#xff0c;致力于解决长期数据可用性&#xff0c;并为 AI 提供可验证的结构化数据。目前 Covalent Network&#xff08;CXT&#xff09;已经与首个并行化 EVM 区块链——Sei 达成了新的合作&#xf…

TCFormer:通过标记聚类Transformer实现视觉识别

摘要 Transformer在计算机视觉领域得到了广泛应用&#xff0c;并取得了显著成功。大多数最先进的方法将图像分割成规则网格&#xff0c;并用视觉标记表示每个网格区域。然而&#xff0c;固定的标记分布忽略了不同图像区域的语义含义&#xff0c;导致性能次优。为了解决这个问题…

王立铭脑科学50讲——02篇,心智活动是如何发生的

王立铭脑科学50讲——02篇&#xff0c;心智活动是如何发生的 我对课程中感兴趣的点 1、脑的结构可以细分到一个个神经细胞&#xff0c;但脑的功能神经细胞彼此连接实现的。 我由此想到&#xff0c;人工神经网络&#xff0c;也是利用激活函数、权重值、偏置量来模拟人工神经网…

PHP项目任务系统小程序源码

&#x1f680;解锁高效新境界&#xff01;我的项目任务系统大揭秘&#x1f50d; &#x1f31f; 段落一&#xff1a;引言 - 为什么需要项目任务系统&#xff1f; Hey小伙伴们&#xff01;你是否曾为了杂乱的待办事项焦头烂额&#xff1f;&#x1f92f; 或是项目截止日逼近&…

Oracle: oracle大小写敏感问题

oracle大小写敏感含义&#xff1a;比如创建表A和a&#xff0c;A和a是两个不同的表&#xff08;表名不同&#xff09;。 oracle大小写不敏感含义&#xff1a;比如创建了A表就不能创建a表&#xff0c;将A和a看成是相同的表&#xff08;表名相同&#xff09;。 1、查询用户是否存…