ros中的Publisher和Subscriber

本文介绍了ROS(Robot Operating System)中的topic通信机制。通过发布者(Publisher)与订阅者(Subscriber)模式,节点间能够实现高效的消息传递。文章提供了Python代码示例,包括如何创建发布者与订阅者节点。
  1. topic是ros的通信方式之一,节点(node)之间通过向主题(topic)上发布(publish)和订阅(subscribe)消息(message)来进行消息传递
  2. 以下是wiki上的示例,可以直接访问:Writing a Simple Publisher and Subscriber

下面上代码

首先是用到的std_msgs/msg路径下的String.msg文件中的内容:

string data  # 定义了数据类型和name
Publisher
#!/usr/bin/env python

import rospy
from std_msgs.msg import String

def talker():
    # 节点的初始化操作
    rospy.init_node('talker_node', anonymous=True)
    # 定义一个publisher,topic名字是'chatter',传输数据类型为由String文件定义
    pub = rospy.Publisher('chatter', String, queue_size=10)
    # 消息发布频率:10次/s
    rate = rospy.Rate(10)  # 10hz
    while not rospy.is_shutdown():
        info = 'hello world %s' % rospy.get_time()
        # 发布消息
        pub.publish(info)
        rospy.loginfo(info)
        # sleep()函数确保以10hz的频率发布消息
        rate.sleep()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSIterruptException:
        pass
Subscriber
#!/usr/bin/env python

import rospy
from std_msgs.msg import String

def listener():
    # 初始化节点
    rospy.init_node('listener', anonymous=True)
    # 订阅name是'chatter'的topic,传输数据类型为由String文件定义,收到消息后调用函数callback,并将message作为第一个参数传入
    rospy.Subscriber('chatter', String, callback)
    # spin() simply keeps python from exiting until this node is stopped
    rospy.spin()

def callback(data):
    # 输出信息,此处第一个data是接收到的message,第二个data是String文件中定义的数据的name
    rospy.loginfo('I heard %s' % data.data)


if __name__ == '__main__':
    listener()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值