ROS踩坑笔记2-基于海曼红外测温仪的消息发布与订阅
系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 系列文章目录
- 前言
- 1.红外测温仪通信参数获取
- 1.1串口查询16位指令格式
- 1.2安装cutecom
- 1.3使用cutecom步骤
- 2.编写消息的发布与订阅
- 2.1编写发布者publisher
- 2.2编写订阅者
- 总结
前言
学习的最好路径是通过项目不断的练习。
提示:以下是本篇文章正文内容,下面案例可供参考
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:passexcept 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源码的详解。
ROS踩坑笔记2-基于海曼红外测温仪的消息发布与订阅相关推荐
- Slam学习笔记——ROS踩坑记录
Slam学习笔记--ROS踩坑记录 1. 安装 2. ROS文件系统 2.1 工作区 2.2 包package 2.2.1 包的操作 2.2.2 描述文件package.xml 2.3 节点node ...
- iphone se 一代 不完美越狱 14.6 视频壁纸教程(踩坑笔记)
iphone se 一代 不完美越狱 14.6 加 视频壁纸教程-踩坑笔记 越狱流程 1.爱思助手制作启动u盘 坑点: 2.越狱好后 视频壁纸软件 1.源 2.软件安装 越狱流程 1.爱思助手制作启动 ...
- Linux内核踩坑笔记
systemtap embedded C踩坑笔记戳这: https://blog.csdn.net/qq_41961459/article/details/103093912 task_struct的 ...
- ROS踩坑之.msg文件未能转化为.h文件
ROS踩坑之.msg文件未能转化为.h文件 标题的意思不够明确,这里重新声明一下,意思是文件全部齐全,再在编译ROS时出现无法找到"xxx.h"文件的情况. 方法一:查找相应的Cm ...
- 阿里云部署Tiny Tiny RSS踩坑笔记
阿里云部署Tiny Tiny RSS踩坑笔记 前言 入坑了RSS,之前的配置是阿里云部署RSSHub,配合Inoreader进行文章阅读,详情见RSS入坑指南.阿里云部署RSSHub踩坑笔记.在202 ...
- 「Java」基于Mirai的qq机器人开发踩坑笔记(其一)
目录 0. 前置操作 I. 安装MCL II. MCL自动登录配置 III. 安装IDEA插件 1. 新建Mirai项目 2. 编写主类 3. 添加外部依赖 4. IDEA运行 5. 插件打包 6. ...
- 「Java」基于Mirai的qq机器人开发踩坑笔记(其二)
目录 0. 配置机器人 1. onLoad方法 2. onEnable方法 3. 消息属性 4. 消息监听 I. 好友消息 II. 群聊消息 III. 无差别消息 5. 发送消息 I. 文本消息 II ...
- 昆仑通态触摸屏1003故障码,踩坑笔记
昆仑通态触摸屏1003故障码,踩坑笔记 第一次使用这个昆仑通态触摸屏,使用modbusRTU与金田变频器做通讯. 触摸屏在线后报1003通讯错误代码,现象是控制指令正常,但是读取不正常.读取变频器状态 ...
- EDUSOHO踩坑笔记之四十二:资讯
EDUSOHO踩坑笔记之四十二:资讯 获取资讯列表信息 GET /articles/{id} 权限 老API,需要认证 参数 字段 是否必填 描述 sort string 否 排序,'created' ...
最新文章
- java 传入参数_java参数怎么传递参数
- nova7修屏逛校园2021-07-07
- Java开源诊断工具 Arthas 发布v3.1.0
- PAT (Advanced Level) 1010 Radix(二分+模拟)
- 第7章 C控制语句:分支和跳转
- 【BJOI 2019】奥术神杖
- Android 最新左右可见上下页的banner实现demo
- pycharm 如何自动添加头注释,比如时间,作者信息等
- 一张图超过了屏幕大小 如何自动将多出部分隐藏 只显示中间部分
- jQuery blockUI 使用详解
- 一个中专生:我在华为面试的真实经历
- JavaSE基础(21) 打印数组
- HTML5基础(五)零基础入门 (上)
- 流量劫持是什么?常用方法有哪些?
- 计算机操作系统 汤子瀛(慕课版)
- 在Ubuntu上安装hadoop(截图太多,干脆来个大截图)
- YonBuilder前端框架MDF介绍
- aide的java文件怎么保存,aide教程
- 小白怎样成为网络工程师?
- 机器学习模型训练问答