四、ROS2通信机制(话题)

1 话题

话题即ROS2中Topic通信方式,Topic通信模型是一种发布订阅模型

1.1 话题的发布订阅模型

A节点创建一个发布者Publisher来发布一个话题,B节点创建一个订阅者Subscriber来订阅A节点发布的话题。显然这是一个一对一的模型,除此以外,ROS2中话题通信还可以是1对n,n对1,n对n的。

1.2 话题通信需要注意的规则

1、话题名字是关键,发布订阅接口类型要相同。举个例子、发布的是字符串,接受也要字符串
2、同一个节点可以订阅多个话题,也可以发布多个话题
3、同一个话题可以有多个发布者

1.3 ROS2话题相关命令行界面(CLI)工具

查看指令 ros2 topic -h
返回系统中当前活动的所有主题列表 ros2 topic list
返回系统中当前活动的所有主题列表及其消息类型ros2 topic list -t
打印实时话题内容 ros2 topic echo /话题名
查看主题信息 ros2 topic info /话题名
查看消息类型 ros2 interface show xxx
手动发布命令 ros2 topic pub arg

1.4 编写一个话题发布者流程

1、导入消息类型

from std_msgs.msg import String

2、声明并创建发布者

#10是队列大小
self.pub_novel = self.create_publisher(Strng, "话题名", 10)

3、编写发布逻辑发布数据

#时间周期
self.timer_period = 5
#定义一个回调
def timer_callback(self):
	msg = String()
	msg.data = "xxxxxx"
	self.pub_novel(msg)
	self.get_logger().info("发布了一个话题消息, 内容是%s" % msg.data)
#创建一个定时器,每一个周期去调用这个函数
self.timer = self.create_timer(self.timer_period, self.timer_callback)

1.5 编写一个话题订阅者流程

1、导入订阅的话题接口类型

from std_msgs.msg import String,UInt32

2、传建订阅回调函数

def recv_callback(self, money):
	self.get_logger().info("收到话题")

3、声明并创建订阅者

self.sub = self.create_subscription(UInt32, "话题名", self.recv_callback, 10):
	pass

你可能感兴趣的:(ROS2,ROS2)