ROS理解进程节点:一个进程节点发布多个话题、订阅多个话题、既发布也订阅话题

ros订阅多个topic并同步时间戳 参考资料: csdn博客:ROS节点同时订阅多个话题并进行消息时间同步(非常值得参考) ros中同时订阅两个topic(2张图像)合并成一个topic(1张图像) 官方文档 官方函数说明 问题背景 ros在订阅传感器topic时,往往需要同时订阅多个传感器,并且在数据处理之间会存在相互调用结果的情况。因此在编写程序时,最好能够同时处理两个传感器的数据。 在采集机器人传感器数据时,往往涉及到多种传感器进行环境感知和信息采集,因此不仅需要一个节点同时订阅多个topic,而且需要将传感器时间戳保持一致。 问题 阅读详情

ROS节点就是一个进程,节点间通信的发布话题——订阅话题、服务——客户端都是进程节点间通信,一个进程节点可以发布多个话题、订阅多个话题(订阅多个话题只用一个rospy.spin()反算频率-周期休眠)、既发布也订阅话题。

先写个既发布也订阅话题的例子,发布话题行为放在订阅话题的回调函数中实现"依赖"关系:

节点nodeA,发布topicA:

#!/usr/bin/env python2
# -*- coding: UTF-8 -*-
import rospy
# from beginner_tutorials.msg import String
from std_msgs.msg import String

if __name__ == '__main__':
    try:    #嘿嘿
        rospy.init_node('nodeA',anonymous=False)
        pub = rospy.Publisher('~topicA',String,queue_size=10)
        rate = rospy.Rate(0.5)
        pubstr = rospy.get_caller_id()+" pub 'topicA'"
        while not rospy.is_shutdown():
            rospy.loginfo(pubstr)
            pub.publish(pubstr)
            rate.sleep()
    except rospy.ROSInterruptException:
        exceptstr = rospy.get_caller_id()+" exception!"
        rospy.loginfo(excepstr)

节点nodeB,订阅topicA后发布topicB:

#!/usr/bin/env python2
# -*- coding: UTF-8 -*-
import rospy
# from beginner_tutorials.msg import String	#自定义消息类型
from std_msgs.msg import String

def callback(Strobj):
    try:
        pub = rospy.Publisher('~topicB',String)   #定义发布者
        strmsg = rospy.get_caller_id()+" sub topicA then pub topicB"
        rospy.loginfo(strmsg) #往rospy节点记录信息
        #rospy.get_caller_id()返回当前节点的完整解析的节点名
        pub.publish(strmsg) #发布话题,已经在rospy.spin()订阅循环中了
        #,不用再加循环rospy.Rate().sleep()了
    except rospy.ROSInterruptException:
        pass

if __name__=="__main__":
    '''yamlpath、launchpath存储在参数服务器中由roscore或其他先启节点
    以话题的方式发布到当前节点?
    '''
    rospy.init_node('nodeB',anonymous=False)
    rospy.Subscriber('/nodeA/topicA',String,callback)   #定义订阅者
    rospy.spin()

节点nodeC订阅topicB:

#!/usr/bin/env python2
#-*- coding:UTF-8 -*-
import rospy
# from beginner_tutorials.msg import String
from std_msgs.msg import String

def callback(Strobj):
    logstr = rospy.get_caller_id()+" sub topicB"
    rospy.loginfo(logstr)

if __name__ == '__main__':
    rospy.init_node('nodeC',anonymous=False)
    rospy.Subscriber('/nodeB/topicB',String,callback)
    rospy.spin()

运行结果:

haypin@ubt:~/catkin_ws/src/beginner_tutorials/scripts$ rosrun beginner_tutorials _PubCheck2.py 
[INFO] [1617717494.525536]: /nodeA pub 'topicA'
[INFO] [1617717496.527545]: /nodeA pub 'topicA'
[INFO] [1617717498.527747]: /nodeA pub 'topicA'
[INFO] [1617717500.525839]: /nodeA pub 'topicA'
[INFO] [1617717502.527739]: /nodeA pub 'topicA'
[INFO] [1617717504.527792]: /nodeA pub 'topicA'
[INFO] [1617717506.527812]: /nodeA pub 'topicA'
[INFO] [1617717508.527791]: /nodeA pub 'topicA'
^Chaypin@ubt:~/catkin_ws/src/beginner_tutorials/scripts$

 

 

haypin@ubt:~/catkin_ws/src/beginner_tutorials/scripts$ rosrun beginner_tutorials _SubCheckPubUpdate2.py 
/home/haypin/catkin_ws/src/beginner_tutorials/scripts/_SubCheckPubUpdate2.py:9: SyntaxWarning: The publisher should be created with an explicit keyword argument 'queue_size'. Please see http://wiki.ros.org/rospy/Overview/Publishers%20and%20Subscribers for more information.
  pub = rospy.Publisher('~topicB',String)   #定义发布者
[INFO] [1617717498.533295]: /nodeB sub topicA then pub topicB
[INFO] [1617717500.526424]: /nodeB sub topicA then pub topicB
[INFO] [1617717502.529730]: /nodeB sub topicA then pub topicB
[INFO] [1617717504.529405]: /nodeB sub topicA then pub topicB
[INFO] [1617717506.529490]: /nodeB sub topicA then pub topicB
[WARN] [1617717508.051299]: Inbound TCP/IP connection failed: connection from sender terminated before handshake header received. 0 bytes were received. Please check sender for additional details.
[INFO] [1617717508.529696]: /nodeB sub topicA then pub topicB
^Chaypin@ubt:~/catkin_ws/src/beginner_tutorials/scripts$

 

 

haypin@ubt:~/catkin_ws/src/beginner_tutorials/scripts$ rosrun beginner_tutorials _SubUpdate2.py 
[INFO] [1617717504.530522]: /nodeC sub topicB
[INFO] [1617717506.530790]: /nodeC sub topicB
^Chaypin@ubt:~/catkin_ws/src/beginner_tutorials/scripts$

rospy中设置一个节点监听多个topic 当我们想要在一个节点中同时订阅多个话题时,我们可以如下做法。 #!/usr/bin/env python import rospy from std_msgs.msg import String def callback_1(data): rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data) def callb... 阅读详情

相关推荐

ROS机器人制作(二)—— ROS话题订阅与发布

(二)ROS话题通信1:发布话题2:订阅话题3:自定义消息数据类型4:命令行 ROS话题通信:支持一对多的异步通信,发布者发布消息到话题上,订阅者从话题上订阅消息。 1:发布话题 创建节点句柄: ros::NodeHandle nh; 创建一个发布者:<话题的消息数据类型> <话题名> <消息缓存长度> ros::Publisher pub = nh.advertise<std_msgs::String>("topic_name

Treasureljc的博客 6705

ROS动作机制warning:Inbound TCP/IP connection failed

$ rosrun basics fancy_action_server.py [WARN] [1572677557.904384]: Inbound TCP/IP connection failed: connection from sender terminated before handshake header received. 0 bytes were received. Please ...

lkdfxgirl的博客 6298

ROS总结——ROS话题

理解ROS话题本博客是对http://wiki.ros.org/上ROS教程的学习总结,欢迎大家交流学习。本节介绍ROS话题(topics)以及如何使用rostopic 和 rxplot 命令行工具。1.运行turtlesim 首先确保roscore已经运行, 打开一个新的终端:$ roscore在一个新的终端中运行:$ rosrun turtlesim turtlesim_node需要通过键

YongqiangGao的专栏 1万+

ROS学习笔记_2

rostopic hz / 可以查看话题的发布频率 //average rate:navigation_node需要相机信息就订阅camera_node发布的话题,需要姿态信息就订阅imu_node发布的话题。消息包的构建通过依赖项中的 std_msg //见 index.ros.org。运行rostopic echo / 可以查看该话题的内容。一个节点可以发布多个话题,同时也可以订阅多个话题。//有点类似MQTT。

qq_51235742的博客 441

ROS2 实现话题的订阅发布

大家在编译环境时会遇到一些问题,这里我会根据我的理解及搜集到的资料进行补充说明。

m0_71220484的博客 2932

ROS学习--(六)理解ROS节点和话题

ROS系统包括多个独立的节点,每个节点通过一个发布/订阅的消息范式与其他节点联系 !如下图中,publisher和subscriber都可以是节点(node) (http://img.blog.youkuaiyun.com/20150726220005225) 举个具体例子: ROS starts with the ROS Master. Let’s say we have a camera on o

BenjaminYoung29的博客 4570

ROS踩坑|用一个节点订阅和发布多个话题

test

JeSuisDavid的博客 1万+

ROS订阅发布通信机制

这个是之前看代码FAST_LIO2时候写的,当时是看B站一个老师的ROS课程学到的,所以仅当笔记,我觉得里面举的例子特别生动好理解。但是当时是ROS1,ROS1和ROS2有一个不同是:ROS1在运行前需要打开Master,相当于一个总控,也就是运行ROS1之前写的指令roscore,ROS2更新后去除了这个特点,当然从通信机制来看是没有区别的,用下面的话来理解也是没有问题的。

m0_60949958的博客 905

ROS多线程发布订阅话题信息

下面讲述几种ros订阅多个话题的例子: 1、实现接收两个topic,并发布一个topic,采用的是ros多线程的方法解决。 #include <ros/ros.h> #include "std_msgs/String.h" #include <boost/thread.hpp> #include <sstream> class SubscribeAndPu...

qq_37082966的博客 3456

ROS通信机制_话题通信

功能包下新建msg目录,添加Person.msg文件,创建自定义消息。int32 age同时更改src文件夹下CMakelists.txt和packege.xml,为程序添加编译和运行时依赖。加入message_generation和message_runtimeroscpprospystd_msgsFILESperson.msgstd_msgs加入message_runtime (运行依赖)

m0_67825544的博客 1270

ROS2—理解话题(Topic)

大道至简,ROS2将复杂的机器人系统拆解成许多模块节点,而这些节点之间则是通过一个至关重要的通道完成数据交换的,这个通道就是“话题”。 一个节点可以通过多个话题向外发布数据,也可以同时订阅多个其他节点发布的话题,相当于话题是一个多对多的订阅/发布模型。 可见,话题是节点之间实现数据传输的重要途径,也是机器人各个子系统之间交换数据的重要方式。 1.启动小海龟仿真器 还是先来启动小海龟仿真器吧,相信你已经很熟练了: ros2 run turtlesim turtlesim_node ..

hx1113的博客 5088

ROS2话题通信进阶:单节点多话题发布与订阅

在初级阶段,我们往往编写“一节点一任务”的简单示例:一个节点只发布一个话题,或只订阅一个话题。然而在真实机器人系统中,一个节点几乎总是需要处理多路输入并根据逻辑发布多种输出。本文将介绍多话题发布和订阅的写法,并介绍Callback Group 的工程用法。

weixin_45594280的博客 1401

【ROS话题通信】发布者和订阅者

【ROS话题通信】发布者和订阅者

丑小鸭 2068

ROS同时订阅多个话题 Python

python语言 ROS订阅两个话题的消息;多线程处理ROS的发布和订阅节点

qq_44072078的博客 6226

FCL碰撞检测库在Windows下的编译与配置(MinGW+CMake)

本文详细介绍了在Windows系统下使用MinGW和CMake编译配置FCL碰撞检测库的完整流程。内容涵盖MinGW-w64、CMake的安装与环境配置,关键依赖库Eigen和libccd的安装,以及FCL源码的编译、安装与实战测试。重点解析了CMake配置命令中的关键参数与常见错误解决方案,旨在帮助开发者高效完成FCL在Windows平台的部署,适用于机器人、游戏物理引擎等需要精确碰撞检测的开发场景。

sunny的博客 481

校招总结—FPGA从入门到放弃

校招总结—FPGA从入门到放弃 感谢咸鱼FPGA的授权转发,原文地址为https://www.cnblogs.com/xianyufpga/ 其实 offer 早就定下来了,最近忙着入党考试,现在才腾出时间来写个总结。我校招开始于 7 月底,算是比较晚了,后面加了各大校招交流群,发现很多同学都是过完年后就开始打磨项目、复习基础、寻找实习。对比之下我这准备确实仓促,不过结果还算满意。 ...

qq_31515205的博客 8605

ros学习#5 话题订阅和发布

这一章学习了话题的订阅和发布,即话题通信。在我的理解中,机器人需要实时不断的处理传感器传来的数据并处理,进而做出相应的动作,这个过程并不是静态的。话题通信。ros2的话题通信机制包含四个要素,发布者订阅者话题名称和消息接口(话题类型)。我们在终端中运行打开海龟模拟器,再打开另一个终端$ rqt在弹出界面中选择插件中的topic里面的,画面如图所示:如图所示最左边就是这个节点相关的话题,type就是话题类型(topic_type),也就是消息接口(interface)

IDcommon_man的博客 2525

ZedBoard+Vivado(二)——PS + PL实现流水灯

硬件:Zedboard 软件:Vivado2018.2 + Win10 本文参考了http://blog.chinaaet.com/cuter521/p/35978的设计 1 设计 功能:PS + PL流水灯 语言:C 流程:创建工程-&amp;gt;IP Integrator-&amp;gt;综合、实现、生成Bitstream-&amp;gt;SDK 2 流程 2.1 创建工程 跟上一篇步骤完全相同,这里不用添加源文...

q416524389的博客 3694

五、ROS话题通信入门:发布者与订阅者

在ROS(Robot Operating System)中,话题通信是一种基本的通信方式,它允许节点之间通过发布和订阅消息来进行数据交换。本文将介绍如何使用Python编写一个简单的ROS话题发布者和订阅者,并演示它们之间的通信过程。

weixin_45477686的博客 2750

YOLO11涨点优化:原创自研 | 魔改Bottleneck,具备多尺度和特征通道融合的结构

可以将C3k2_MSAMCS放在neck,或者backbone和neck同时修改,具体看自己数据集的涨点情况决定

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1649

vue2 - 最新详细实现高德地图绘制动态热力图详细教程,在某区域或城市地图上做“热力图层“展示人流量、旅游人口密度、热量图、全国地区地理热力图,利用颜色的深浅表示密度或强度等场景(详细示例代码教程)

vue2,nuxt2,高德地图,热力图,绘制热力图层,报错,卡顿,出不来怎么办,无法关闭,怎么解决这个问题,出错,城市名称,城市某个街道,城区,省份,市区,县城,乡镇,村,各省份的热力图,交通流量,人口流量,密度,旅游出行,人口数量,颜色介绍,深浅代表,人流量,vue2使用高德地图实现某个区域热力图,vue高德地图api加载热力图及关闭,接收热力图数据并渲染热力图,关掉热力图,Vue使用高德API制作热力图,热力图加载不出来,电子围栏围住热力图,vue2中使用高德地图渲染热力图组件,高德地图使用热力图详细教

✅ 精选推荐文章 4201

ROS学习记录(三)节点与话题

ROS学习笔记系列是对 ROS中文教程的记录总结。 笔记三包括: 3.1 ROS节点与话题 3.2 ROS服务 3.3 ROS参数 3.1 ROS 节点与话题 3.1.1 ROS图的概念 其实图、节点的概念来自图论,只不过这里是更具体的对象。一个图如下,V1,V2等就是节点 (node),它们可以是实际的机器人,或者可执行文件,也可以是函数,在不同情况下可以有不同的抽象。 有了节点,关键的是...

强强的博客 5662

PCIE2.0/PCIE3.0/PCIE4.0/PCIE5.0接口的带宽、速率计算

一、PCIE接口速率: 二、PCIE相关概念: 传输速率为每秒传输量GT/s,而不是每秒位数Gbps,因为传输量包括不提供额外吞吐量的开销位; 比如 PCIe 1.x和PCIe 2.x使用8b / 10b编码方案,导致占用了20% (= 2/10)的原始信道带宽。 GT/s —— Giga transation per second (千兆传输/秒),即每一秒内传输的次数。重点在于描述物理层通信协议的速率属性,可以不和链路宽度等关联。 Gbps —— Giga Bits Per Second

技术联盟 1万+

ROS 消息订阅 节点发布 通信方式

但在某些情况下,需要一种同时使用请求和响应的同步消息交换方案,ROS提供了叫做服务的消息同步方法,是一种一对一的机制。与话题不同,服务是一次性消息通信。话题本质是对套接字的一种封装,一个节点可以向一个给定的话题发布消息,另一个节点可以订阅给定话题中特定消息类型的消息。ROS是以节点的形式开发的,节点是根据其目的,可以细分的可执行程序的最小单位。 单次模式(once mode) 以闩锁模式发布消息,执行3秒,然后结束发布,选项为-1。需要注意的是,在ROS中,话题必须是唯一的,否则消息路由就会产生错误。

weixin_44025389的博客 4044

python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法

出现该Bug的原因主要是 账号密码无法登录,但原先使用该代码测试qq或者163的时候是可以通过的!问题在于各个公司邮件所处理的代码方式不一样

码农研究僧的博客 3503

【Java面试题汇总】Spring篇(2026版)

IoC、DI、aop、事务、为什么不建议@Transactional、事务传播级别、@Autowired和@Resource注解的区别、BeanFactory和FactoryBean的区别、Bean的作用域,以及默认的作用域、Bean的生命周期、循环依赖、三级缓存、

种一棵树最好的时间是十年前,其次是现在 7372
上一篇: [转载]ubuntu16.04 VIM无法通过:+y复制到剪切板
下一篇: ubutnu16.04为python2.7安装pip模块
HayPinF
博客等级 码龄9年 175粉丝 140原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值