ROS笔记二(基于Python、Kinetic):通信机制——话题(topic)

前言:

话题实现了一种发布/订阅的通信机制,这是一种在分布式系统中常见的数据交换方式。节点在发送数据到话题上之前,必须先声明话题名和发送到该话题的消息所具有的类型。话题适用于单工通信,尤其接收方有多个时(如传感器数据流)

catkin_ws工作空间下my_code程序包里的文件目录结构:

1.声明一个话题:

#!/usr/bin/env python

import rospy

from std_msgs.msg import Int32

rospy.init_node('topic_publisher') #初始化创建一个节点,用于发布消息

pub = rospy.Publisher('counter',Int32)  #声明一个话题名为“counter”,话题发布的消息类型为Int32

rate =rospy.Rate(2) #设置话题频率

count = 0

while not rospy.is_shutdown():
	pub.publish(count)
	count += 1
	rate.sleep()

 因为引入了ROS的标准消息包std_msgs,需要在package.xml文件中添加一个依赖:

<depend>std_msgs</depend>

2.订阅一个话题:

#!/usr/bin/env python

import rospy

from std_msgs.msg import Int32

def callback(msg):
	print(msg.data)

rospy.init_node('topic_subscriber') #初始化创建一个节点,用于接受消息

sub = rospy.Subscriber('counter',Int32,callback) #订阅话题,参数:话题名、消息类型、回调函数

rospy.spin() #将程序的运行交给ROS

3.将消息发布到话题上:

增加topic_publisher.py权限:

chmod u+x topic_publisher.py

 运行ros:

roscore

 新开一个终端,运行节点:(my_code为ROS程序包名)

rosrun my_code topic_publisher.py

4.订阅话题上的消息:

再打开另一个终端,同样先增加topic_subscriber.py的权限:

chmod u+x topic_subscriber.py

 运行节点:

rosrun my_code topic_subscriber.py

 5.rostopic -h:查看rostopic命令参数

查看系统可用的话题:

rostopic list

查看话题发布的消息:(可选参数:-n 5打印五条消息)

rostopic echo counter -n 5

 查看消息频率:

rostopic hz counter

 查看一个已经被声明的话题:

rostopic info counter

 查找发布某种类型消息的所有话题:(同时给出包名(std_msgs)和消息类型(Int32))

rostopic find std_msgs/Int32

猜你喜欢

转载自blog.csdn.net/java0fu/article/details/106104937
今日推荐