ROS踩坑笔记2-基于海曼红外测温仪的消息发布与订阅

本文介绍了如何使用Python通过ROS进行串口通信,以获取红外测温仪的数据。首先,详细阐述了串口查询16位指令格式,包括使用cutecom工具进行串口配置和数据读取。接着,展示了如何编写ROS的发布者和订阅者节点,解析串口数据并转换为温度值。最后,提供了代码示例,强调了Python对格式的严格要求,并预告了后续将探讨基于海曼红外测温仪的服务请求与相关源码解析。

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

学习的最好路径是通过项目不断的练习。


提示:以下是本篇文章正文内容,下面案例可供参考

1.红外测温仪通信参数获取

1.1串口查询16位指令格式

在这里插入图片描述

1.2安装cutecom

apt-get install cutecom

1.3使用cutecom步骤

step 1.输入命令行打开cutecom

cutecom

在这里插入图片描述
step 2.通过USB口连接红外测温仪
step 3.点击左上角的Device:右侧选项,选择USB口。此处为/dev/ttyUSB1。
step 4.勾选左下角的Hex output
step 5.点击右上角的Settings ,在Baudrate处设置波特率为9600(测温仪要求设置固定参数),其他为默认。
step 6.点击Open,在Input处输入0707aa55。则会显示9组16进制数。
到此准备工作结束

2.编写消息的发布与订阅

2.1编写发布者publisher

代码如下(示例):

#!/usr/bin/env python 
# encoding: utf-8
import rospy
from std_msgs.msg import String
import serial
#引入struct模块,主要是用unpack函数解码
import struct

#设置串口默认参数
ser=serial.Serial("/dev/ttyUSB1",9600,timeout=0.5)
#打开串口
ser.isOpen() 

#代码主要内容,主要是发送串口读取命令,接受串口输出,通过一些操作将其转换成10进制数。

#定义函数
def htx_pub():
    #初始化节点,节点名为htx_temperature,消息类型为String,queue_size是订阅者接受消息不够快的时候保留的消息的量
    pub = rospy.Publisher('htx_temperature', String, queue_size=10)
    #rospy.init_node(NAME, ...)把节点名告诉rospy,只有rospy掌握了这一信息后,才会开始与ROS主节点进行通信。  节点名为temperature。anonymous = True会让名称末尾添加随机数,来确保节点具有唯一的名称。
    rospy.init_node('temperature', anonymous=True)  
    #设置后面程序读取串口的频率    
    rate = rospy.Rate(20) 
    
    #主要处理数据部分
    #用于读取串口发来的数据
    
    #当rospy没有停止时
    while not rospy.is_shutdown():  
        #写入串口读取数据命令,4组16进制
        ser.write([0x07,0x07,0xaa,0x55])
        #读取串口数据,以换行符为结束
        get_str = ser.readline()  
        #解包数据、变成10进制数,固定用法
        data = struct.unpack('%dB' % len(get_str),get_str)
        #更据输出参数表。第3组数左移8位并上第2组数/100为温度
        temperature = (data[3] << 8 | data[2])/100.0
        #打印温度
        rospy.loginfo(temperature)
        #实例化字符串结构体
        data  = String()
        #赋值给实体数据
        data.data = str(temperature)
        #发布数据
        pub.publish(data)
        #rate.sleep()为rate类的休眠函数,可以使程序休眠;它在循环中可以用刚刚好的睡眠时间维持期望的速率
        rate.sleep()

if  __name__ == '__main__':
    htx_pub()
    try:
        pass
    except rospy.ROSInterruptException:
        pass   

在这里插入图片描述

2.2编写订阅者

代码如下(示例):

#!/usr/bin/env python
# encoding: utf-8
import rospy
from std_msgs.msg import String
def callback(data):
    rospy.loginfo( data.data)
def htx_sub():
    #初始化节点
    rospy.init_node('subscriber', anonymous=True)
    #定义订阅者
    rospy.Subscriber('htx_temperature', String, callback)
    #循环等待回调函数,rospy.spin()只是不让你的节点退出,直到节点被明确关闭。rospy.spin()不影响订阅者回调函数,因为它们有自己的线程。
    rospy.spin()
if __name__ == '__main__':
    htx_sub()

在这里插入图片描述


总结

1.python对格式要求较高,每4个空格为一个缩进。
2.串口获得的是字符串格式的数据流,我们需要解包得到10进制数
3.学习ros要多实践。
下节将是基于海曼红外测温仪的服务请求与发布。后续将会带来gmapping源码、amcl源码的详解。

<think>我们正在处理一个关于FLIR热成像仪SDK的查询。用户需要获取SDK以进行开发。 根据之前提供的引用内容,我们注意到用户可能在使用ROS(Robot Operating System)环境,因为引用中提到了uvc_camera节点和image_view等ROS相关工具。 但是,用户当前的问题是关于FLIR热成像仪的SDK,这之前的ROS环境可能相关也可能不相关。我们需要提供获取FLIR SDK的途径。 步骤: 1. 访问FLIR官方网站(通常是www.flir.com),因为FLIR公司会为其热成像仪产品提供开发工具包(SDK)。 2. 在FLIR网站上,寻找“支持”或“开发”部分,通常会有软件开发工具包(SDK)的下载。 3. FLIR的SDK通常称为“Spinnaker SDK”或“FLIR Machine Vision SDK”,用于其机器视觉相机(包括部分热成像仪)。 注意:FLIR的热成像仪产品线可能分为不同的系列,例如:科研级(如A系列)、工业级(如Axxx系列)等,不同系列可能使用不同的SDK。因此,需要根据具体的相机型号来确定合适的SDK。 建议用户: - 确定相机型号。 - 访问FLIR官方网站,在支持页面搜索对应型号的SDK。 另外,如果用户是在ROS环境下使用FLIR热成像仪,也可以考虑使用已有的ROS驱动程序。例如,FLIR为部分相机提供了ROS驱动,可以在GitHub上搜索相关驱动。 但是,用户明确提到了需要SDK进行开发,因此我们重点放在如何获取官方SDK上。 根据以上分析,我们给出以下回答:</think>要获取FLIR热成像仪的SDK进行开发,请遵循以下步骤: ### 1. **访问FLIR官方开发者门户** 前往FLIR官方开发者中心:[FLIR Developer Portal](https://www.flir.com/support-center/iis/machine-vision/application-note/getting-started-with-the-spinnaker-sdk/)。这是获取SDK和文档的核心平台,提供完整的开发工具链[^1]。 ### 2. **下载Spinnaker SDK** FLIR热成像仪主要使用**Spinnaker SDK**(支持Windows/Linux): - 支持语言:C++, C#, Python, VB.NET - 包含功能:相机控制、图像采集、参数配置 - 下载地址:[Spinnaker SDK下载页](https://www.flir.com/products/spinnaker-sdk/) ```bash # Linux安装示例(以Ubuntu为例) wget https://www.flir.com/spinnaker-sdk-download sudo apt install ./spinnaker-*.deb ``` ### 3. **关键开发资源** | 资源类型 | 内容 | 获取方式 | |---------|------|----------| | API文档 | 相机控制接口、图像处理库 | SDK内置 `/docs` | | 示例代码 | Python/C++采集程序 | [GitHub仓库](https://github.com/TeledyneFLIR/Spinnaker-Examples) | | 驱动支持 | USB3 Vision, GigE Vision | 自动安装 | ### 4. **兼容性验证** 开发前需确认: 1. 相机型号是否支持(如FLIR A700/A400系列需Spinnaker ≥ v3.0) 2. 接口协议(USB/GigE需不同初始化配置) 3. ROS集成可使用 [`flir_boson_usb`](https://github.com/ros-drivers/flir_camera_driver)驱动[^2] ### 5. **开发环境配置(Python示例)** ```python import PySpin system = PySpin.System.GetInstance() cam_list = system.GetCameras() cam = cam_list.GetByIndex(0) cam.Init() cam.AcquisitionMode.SetValue(PySpin.AcquisitionMode_Continuous) cam.BeginAcquisition() image = cam.GetNextImage() # 获取热成像数据 image.Save('thermal.png') # 保存红外图像 ``` ### 常见问题解决 - **图像采集失败**:检查`/dev/video*`设备权限,需添加用户到`video`组 - **SDK初始化错误**:安装`libusb-1.0`依赖包(Linux) - **ROS集成**:使用`roslaunch flir_boson_usb boson.launch`发布`/thermal/image_raw`话题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值