💛前情提要💛
本文是传知代码平台
中的相关前沿知识与技术的分享~
接下来我们即将进入一个全新的空间,对技术有一个全新的视角~
本文所涉及所有资源均在传知代码平台可获取
以下的内容一定会让你对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 concentration
else:
rospy.logwarn("收到非预期格式的数据,已跳过。")
except ValueError as e:
rospy.logerr(f"数据解析错误: {e}")
return None
def 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.0
g = (1000 - color_value) / 1000.0
b = min(2.0 * normalized_value, 1.0)
return r, g, b
def 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, ser
rospy.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,也可采用其他数字传感器或模拟转数字的传感器,并根据输出数据不同,适当修改程序代码。
-
原项目的github链接 CapHuman
-
下载数据集及权重文件,分别放在data和ckpts目录下;
-
如果遇到的网络连接问题,通通改为手动下载
传感器输出数据格式如下:
-
定位模块:本案例中采用的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
🫓总结
综上,我们基本了解了“一项全新的技术啦” 🍭 ~~
恭喜你的内功又双叒叕得到了提高!!!
感谢你们的阅读😆
后续还会继续更新💓,欢迎持续关注📌哟~
💫如果有错误❌,欢迎指正呀💫
✨如果觉得收获满满,可以点点赞👍支持一下哟~✨
【传知科技 – 了解更多新知识】