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