ros 发布信息频率_工具使用-ROS中使用publisher、subscriber发布订阅topic

2023-05-16

Publisher Node

不同于cpp文件一般存在package下的src文件夹, python文件一般存储在package下的scripts文件夹下。

1

2

3

4roscd beginner_tutorials/scripts

vim talker.py # 新创建

# 或者

rosed beginner_tutorials talker.py # 如果已经存在

talker.py内容

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20#!/usr/bin/env python

import rospy # 一般使用python写脚本时,都需要导入该包

from std_msgs.msg import String # 定义了topic之间传递消息的格式

def talker():

rospy.init_node("talker", anonymous=True) # 初始化该进程 ,定义进程名 “talker”,将该进程注册到master上, anonymous=True保证进程名的唯一性,如果出现重名,会通过添加后缀方式避免

# talker这个名字可以自定义,但是不能包含‘/’符号

pub = rospy.Publisher("chatter", String, queue_size=10) #该进程发布的topic, topic名称为chatter, 发布消息的格式是String, 发布的最大数量

rate = rospy.Rate(10) # 发布消息的频率

while not rospy.is_shutdown():

hello_str = "hello world %s"%rospy.get_time() # 要发布的消息

rospy.loginfo(hello_str) # logger, 输出到屏幕、logger file以及rosout重定向

pub.pubish(hello_str) # 发布消息

rate.sleep() # 按给定的Hz sleep

if __name__=="__main__":

try:

talker()

except rospy.ROSInterruptException: # 该异常有rospy.sleep或者rospy。Rate。sleep被中断后抛出

pass

Subscriber Node

subscriber node同样是一个线程,它从master订阅消息。

1

2roscd beginner_tutotials/scripts

vim listener.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14#!/usr/bin/env python

import rospy

from std.msgs import String

def callback(data): # 回调函数,当订阅消息到达时,调用处理消息的函数

rospy.loginfo(rospy.get_caller_id() + "I heard %s"%s data.data) # 输出消息

def listener():

rospy.init_node("listener", anonymous=True) # 当前node的名称

rospy.Subscriber("chatter", String, callback) # 订阅器订阅的topic是chatter, 类型string, 回调函数callback

rospy.spin() # 这个是个单独的线程,和callback线程不同,用于保持进程活着直到被shutdown

if __name__=="__main__":

listener()

注意callback接收的参数就是前面的消息类型,这里是String, 可以查看String的结构

1rosmsg show std_msgs/msg

发现只有一个变量

string data

所以在callback中调用时使用data.data 调用

注意 需要修改脚本的权限

1

2chmod +x talker.py

chmod +x listener.py

Building nodes

不只是cpp文件需要编译,这里的python脚本,同样需要使用catkin编译,从而能够保证message被编译和运行时调用。

1

2cd ~/catkin_ws

catkin_make

extension

每个node其实可以创建publisher,也可以创建subscriber,这里我们重新回顾msg创建部分,写个小例子。

定义一个msg,包含两个float32类型, node1发布两个数,node2接收两个数进行处理串联程string类型,然后再次发布, node1再订阅cat string并显示。具体看代码更清晰。

1

2roscd beginner_tutorials/msg

vim test_msg.msg

test_msg.msg文件内容

float32 a

float32 b

定义完msg之后,注意需要修改CMakeLists文件,

1

2

3

4add_messafe_files(

FILES

test_msg.msg

)

分别定义两个node

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28#!/usr/bin/env python

import rospy

import random

from std_msgs.msg import String

from beginner_tutorials.msg import test_msg

def callback(data):

rospy.loginfo("receieve from node2 %s"%data.data)

def test_node1():

rospy.init_node('node1', anonymous=True)

pub = rospy.Publisher('topic12', test_msg, queue_size=10)

rate = rospy.Rate(10)

rospy.Subscriber("topic21", String, callback)

while not rospy.is_shutdown():

msg = test_msg()

msg.a = random.random()

msg.b = random.random()

pub.publish(msg)

rospy.loginfo('send a: %f, b: %f from node1 '%(msg.a, msg.b))

rate.sleep()

if __name__=="__main__":

try:

test_node1()

except rospy.ROSInterruptException:

pass

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25#!/usr/bin/env python

import rospy

from beginner_tutorials.msg import test_msg

from std_msgs.msg import String

def callback(data):

str_cat = '%f%f'%(data.a, data.b)

rospy.loginfo('data from node1: %s'%str_cat)

def test_node2():

rospy.init_node("node2", anonymous=True)

pub = rospy.Publisher("topic21", String, queue_size=10)

rate = rospy.Rate(10)

rospy.Subscriber("topic12", test_msg, callback)

while not rospy.is_shutdown():

msg_str = 'send msg from node2'

rospy.loginfo(msg_str)

pub.publish(msg_str)

rate.sleep()

if __name__=="__main__":

try:

test_node2()

except rospy.ROIInterruptException:

pass

1

2

3

4

5

6roscd beginner_tutorials/scripts

chmod +x test_node1.py

chmod +x test_node2.py

cd ~/catkin_ws

catkin_make

roscore # 启动master

重新打开两个终端,分别启动两个node

1rosrun beginner_tutorials test_node1

1rosrun beginner_tutorials test_node2

显示结果:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ros 发布信息频率_工具使用-ROS中使用publisher、subscriber发布订阅topic 的相关文章

  • UP Board 串口使用心得

    前言 原创文章 xff0c 转载引用务必注明链接 本文使用Markdown写成 xff0c 为获得更好的阅读体验和正常的图片 链接 xff0c 请访问我的博客 xff1a http www cnblogs com sjqlwy p up s
  • [转]Linux守护进程基础

    为什么80 的码农都做不了架构师 xff1f gt gt gt 1 守护进程中涉及到的基本概念 1 1进程组 1 1 1 进程组基本概念 进程组是一个或多个进程的集合 xff0c 可以接收来自同一个终端的各种信号 每运行一个程序或是命令都将
  • Spring Cloud核心组件详解

    转自 xff1a 作者 xff1a 石杉的架构笔记 链接 xff1a https juejin im post 5be13b83f265da6116393fc7 来源 xff1a 掘金 著作权归作者所有 商业转载请联系作者获得授权 xff0
  • unity 3d开发的大型网络游戏

    unity 3d开发的大型网络游戏 一 总结 1 unity的官网 上面应该有游戏列表 2 unity3D是很好的3d游戏引擎 xff0c 也支持2d xff0c 也能做很多画面精良的3A级游戏 3 范围 xff1a 电脑游戏 xff0c
  • 多系统电脑切换系统操作步骤

    1 电脑搜索栏输 msconfig 会出现下图 2 点引导 xff0c 多个系统的话 xff0c 引导这里显示的是多条信息 3 切换系统 在引导框中选中自己要切换的系统 xff0c 然后点击设为默认值 xff0c 再点应用 xff0c 再确
  • STM32标准外设库、 HAL库、LL库

    工作以来一直使用ST的STM32系列芯片 xff0c ST为开发者提供了非常方便的开发库 到目前为止 xff0c 有标准外设库 STD库 HAL库 LL库 三种 前两者都是常用的库 xff0c 后面的LL库是ST最近才添加 xff0c 目前
  • 图形算法可视化

    最近看了一些和图形 算法可视化相关的文章和代码 xff0c 挺有意思 xff0c 于是自己也学着做了些东西 迷宫生成算法 迷宫小时候玩过 xff0c 但从来没琢磨过迷宫是怎么设计的 xff0c 以为就是有人慢慢画出来的 看过网上这篇文章后
  • C/C++变量命名规则

    变量命名规则是为了增强代码的可读性和容易维护性 以下为C 43 43 必须遵守的变量命名规则 xff1a 1 变量名只能是字母 xff08 A Z xff0c a z xff09 和数字 xff08 0 9 xff09 或者下划线 xff0
  • 会议论文重新投稿算不算侵权?这肯定是所多人都遇到过的问题。

  • ubutu使用apt-get 安装报:Err http://security.ubuntu.com precise-security InRelease 等

    今天安装了下ubutu xff0c 安装完后按照教程使用apt get install 安装相关软件 xff0c 报错 复制错误百度了很久 xff0c 基本都是说源了问题 更换了好几个源 xff0c 还是没有成功 最后看见这个帖子 xff0
  • [追加评论]三款SDR平台对比:HackRF,bladeRF和USRP

    这三个月 xff0c 有幸把3种板子都用到了 说说使用体会 我用过其中的HackRF xff0c bladeRF x115 xff0c USRP B210 我并没有仔细的测量各种板子的射频指标什么的 xff0c 只是做各种实验的时候用到它们
  • linux zip

    zip r myfile zip 将当前目录下的所有文件和文件夹全部压缩成myfile zip文件 xff0d r表示递归压缩子目录下所有文件 2 unzip unzip o d home sunny myfile zip 把myfile
  • Eclipse中文注释乱码解决

    将别人的项目或JAVA文件导入到自己的Eclipse中时 xff0c 常常会出现JAVA文件的中文注释变成乱码的情况 xff0c 主要原因就是别人的IDE编码格式和自己的Eclipse编码格式不同 总结网上的建议和自己的体会 xff0c 可
  • H3C子接口配置要点及实例说明

    xfeff xfeff 类型一 xff1a 以太网子接口配置要点 单臂路由 第一步 xff1a 在路由器对端的交换机上配置好vlan信息 xff08 如vlan10 vlan20 xff09 第二步 xff1a 将交换机上与路由器直接相连的
  • 常用的SQL聚合函数:

    AVG 返回集合的平均值 COUNT 返回集合中的项目数 MAX 返回集合中的最大值 MIN 返回集合中的最小值 SUM 返回集合中所有或不同值的总和 GROUP BY 将结果按照指定的列进行分组 HAVING 过滤分组后的结果 聚合函数不
  • int型除以int型

    int型除以int型得到的还是int型 就算你是这样的 xff1a float a 61 5 3 xff0c 虽然你定义的a是float型 xff0c 但a得到的结果依旧是1 0000而不是1 66666 5 3先得到1 xff0c 然后再
  • Keepalived两节点出现双VIP情况及解决方法【原创】

    1 故障现象 俩台服务器keepalived的vip在俩台服务器同时出现 A xff1a 10 70 12 72 B xff1a 10 70 12 73 2 问题分析 1 xff09 先分析那台服务器在提供服务 A xff1a 10 70
  • 10款值得推荐的论坛系统源码

    无论您是一个技术娴熟的站长朋友 xff0c 还是初入互联网并致力于在这片领土发展的准站长 xff0c 或者您只是一个还未毕业的学生 xff0c 在为了毕业设计 课程设计不停的搜集资料 xff0c 只要您需要的是社区论坛系统的源码 xff0c
  • make[1]: *** [storage/perfschema/unittest/CMakeFiles/pfs_connect_attr-t.dir/all] 错误 2 解决方法...

    make 2 storage perfschema unittest pfs connect attr t 错误 1 make 1 storage perfschema unittest CMakeFiles pfs connect att
  • Yii2 中cookie的用法(1)

    Yii使用 yii web Cookie对象来代表每个cookie xff0c yii web Request 和 yii web Response 通过名为 cookies 的属性维护一个cookie集合 xff0c 前者的cookie

随机推荐

  • 修改.srt格式字幕文件

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 正文前 xff1a 20160821104107 下载了 惊天魔盗团2 电影来看 xff0c 发现字幕只有英文没有中文 打开 srt文件 xff0c 随便改了一下 xff0
  • VC6.0+MSDN 下载(含链接)安装 全教程

    Microsoft Visual Studio 6 0 简体中文企业版 下载路径显示不出 xff0c 这个软件比较好下载 xff0c 主要是MSDN MSDN CD1 http ftp sdshiyan cn soft program DN
  • Dynamic Drop Down(Translate Values)

    This code i have got Ittool box com It is very usefull we usually have requirement when we want to hide some translate v
  • Windbg实用手册

    摘要 Windbg的命令分为标准命令 xff0c 原命令和扩展命令 xff0c 输入问号 可以显示所有的标准命令的帮助信息 元命令以一个点 开始 xff0c 输入 help可以显示所有的原命令的帮助信息 扩展命令以叹号 开始 阅读全文 Ri
  • Spring注解@Component、@Repository、@Service、@Controller区别 .

    Spring 2 5 中除了提供 64 Component 注释外 xff0c 还定义了几个拥有特殊语义的注释 xff0c 它们分别是 xff1a 64 Repository 64 Service 和 64 Controller 在目前的
  • sql 语句中如何写判断

    当ID为26时 xff0c 查询的result是ok span class token keyword select span name span class token punctuation span span class token
  • 光流定位原理是什么??【转】

    转自 xff1a https www zhihu com question 35980316 Jessie Lee HIT 控制 无人机 光流是测速算法 xff0c 并不是直接定位的 简单理解 xff0c 光流就是通过检测图像中光点和暗点的
  • 算法杂货铺——分类算法之决策树(Decision tree)

    3 1 摘要 在前面两篇文章中 xff0c 分别介绍和讨论了朴素贝叶斯分类与贝叶斯网络两种分类算法 这两种算法都以贝叶斯定理为基础 xff0c 可以对分类及决策问题进行概率推断 在这一篇文章中 xff0c 将讨论另一种被广泛使用的分类算法
  • 01-嵌入式入门-如何看原理图

    最近由于找到的工作是偏于嵌入式方向 xff0c 因此又重新开始学习已经丢弃两年的知识 新手学习知识感觉有一个通病 xff1a 喜欢收集各种各样的视频 资料 xff0c 网盘里收藏一大堆 xff0c 但是却从没有打开看过 xff0c 到头来还
  • MAVLink v1.0详解——结构

    本文针对 MAVLink v1 0版本 xff0c 协议版本 xff1a 3 MAVLink是为微型飞行器MAV xff08 Micro Air Vehicle xff09 设计的 xff08 LGPL xff09 开源的通讯协议 是无人飞
  • ECMAScript6——数组操作方法_总结篇

    ES6 gt 数组的方法 加粗为ES6新增的方法 1 pop 删除数组的最后一个元素 xff0c 把数组的长度减1 xff0c 并且返回它被删除元素的值 xff0c 如果数组变为空 xff0c 则该方法不改变数组 xff0c 返回undef
  • 网络工程师十个常见面试问题

    1 1 简单说一下OSI七层 Osi模型是一个工业的标准 它为现在的互联网提供了很大的贡献 是一个逻辑上的规范和标准 xff0c 很多厂商都要遵循它 他定义了七层每一层都有不同的功能和规范 物理层 物理层定义了设备接口上的一些电子电气化的标
  • 像素、分辨率、DPI

    Q xff1a 我们平时买数码相机时 xff0c 说的200万像素 xff0c 300万像素 xff0c 这个像素是什么意思 xff1f A xff1a 像素 xff08 Pixel xff09 是由Picture和Element这两个单词
  • Apache 目录索引样式 mod_autoindex

    apache 的目录索引样式用的mod autoindex模块 一般默认为开启状态 我们直接配置httpd conf文件 讲如下内容加到HTTD CONF Options Indexes FollowSymLinks IndexOption
  • ubuntu网卡名称变化的解决方法

    在chinacache工作时 xff0c 遇到了东方网力的客户 xff0c 需要安装使用ubuntu系统 xff0c 每个服务器有4个网口 xff0c 在做bond时 xff0c 发现部分网卡漂移 xff0c 为了解决这个 xff0c 搜索
  • C# 给DataGridView加多选框

    span class token comment 多选框 span DataGridViewCheckBoxColumn dgCheck span class token operator 61 span new DataGridViewC
  • Java架构进阶之路——阿里大牛强力推荐书单(附赠电子版)

    1 深入理解Java虚拟机 xff1a JVM高级特性与最佳实践 本书适合所有Java程序员 系统调优师和系统架构师阅读 共分为五大部分 xff0c 围绕内存管理 执行子系统 程序编译与优化 高效并发等核心主题对JVM进行了全面而深入的分析
  • ModemManager

    ModemManager是D Bus激活的守护进程 xff0c 用来控制移动宽带 xff08 2G 3G 4G xff09 设备和连接 xff0c 提供统一的高层API接口 说白了就是可以用来管理上网卡 ModemManager可以管理内置
  • odroidxu4linux,2019年值得期待的5个树莓派替代品

    说到卡片电脑 xff0c 树莓派是当之无愧的热门 这款售价35美元的微型计算机已经在全球范围内吸引了众多爱好者 xff0c 因为它能够以商业设备的一小部分价格执行基于PC的功能 当然 xff0c 它或许不是最强大或最便宜的微型计算机 xff
  • ros 发布信息频率_工具使用-ROS中使用publisher、subscriber发布订阅topic

    Publisher Node 不同于cpp文件一般存在package下的src文件夹 xff0c python文件一般存储在package下的scripts文件夹下 1 2 3 4roscd beginner tutorials scrip