赞
踩
话题实现节点之间的通讯。话题有这样几个基本特定:
1 发布、订阅模型:发出一个话题的节点称为发布者,接受一个话题的节点称为订阅者
2 订阅者和发布者不唯一:每一个节点都可以发布或订阅话题,实现多对多通信
3 异步通信:一个话题发布后可以在之后被订阅
4 .msg文件定义通信的消息结构:话题通信有着标准的通信格式,称为消息
示例:hello world发布及订阅
发布者:
import rclpy from rclpy.node import Node from std_msgs.msg import String class PublisherNode(Node): def __init__(self, name): super().__init__(name) self.pub = self.create_publisher(String, "chatter", 10) self.timer = self.create_timer(0.5, self.timer_callback) def timer_callback(self): msg = String() msg.data = 'Hello World' self.pub.publish(msg) self.get_logger().info('Publishing: "%s"' % msg.data) def main(args=None): rclpy.init(args=args) node = PublisherNode("topic_helloworld_pub") rclpy.spin(node) node.destroy_node() rclpy.shutdown()
1 from std_msgs.msg import String
导入String消息类型
2 self.pub = self.create_publisher(String, “chatter”, 10)
创建发布者对象self.pub,构造方法为create_publisher,该方法三个参数:消息类型,消息名称,缓存长度(对于无法及时发出的话题,会缓存10桢,之后删去老信息)
3 self.timer = self.create_timer(0.5, self.timer_callback)
创建计时器self.timer,参数:以秒为单位的时间,每次计时结束后执行方法
4 self.pub.publish(msg)
发布消息msg,msg为之前创建的String
5 self.get_logger().info(‘Publishing: “%s”’ % msg.data)
在终端打出信息Publishing: Hello World
订阅者:
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class SubscriberNode(Node):
def
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。