上一节我们介绍了 发布者的编程,类似地,我们也可以写一个订阅者节点来订阅话题消息。
本节节点图如下:
程序实现如下:
可复制Python代码如下:
#!/usr/bin/env python3
#encoding = 'utf-8'
import rospy
from geometry_msgs.msg import Twist
#与发布者不同的是,订阅者需要再编写一个回调函数,处理接受的数据
def turtle_calback(msg):
rospy.loginfo("recieve data x = %0.2f angular z = %0.2f",msg.linear.x,msg.angular.z)
def turtle_subscriber():
rospy.init_node('turtle_subscriber',anonymous=True)
rospy.Subscriber('/turtle1/cmd_vel',Twist,turtle_calback)
#创建一个Subscriber 订阅名为/turtle1/cmd_vel的话题,消息类型为TWist,回调函数为turtlr_callback
rospy.spin()
#等待回调触发
if __name__ == '__main__':
turtle_subscriber()
我们同时运行上一节的发布者与我们这一节的订阅者:
(可以看到,当发布者没有运行时,订阅者终端没有消息输出)
当我们运行发布者节点,可以观察到现象:
最后
我们可以通过在终端中运行:
rqt_graph
来检查节点图是否正确。
我们总结一下订阅者程序编写的流程:
- 编写回调函数(有一个传入参数)
- 编写主函数(先初始化节点,再创建订阅者函数)
- 核心函数:
- rospy.init_node('turtle_subscriber',anonymous=True) #节点初始化
- rospy.Subscriber('/turtle1/cmd_vel',Twist,turtle_calback) #创建一个Subscriber 订阅名为/turtle1/cmd_vel的话题,消息类型为TWist,回调函数为turtle_callback
本节到此结束。
路漫漫其修远兮,吾将上下而求索。