• ros之发布者和订阅者协同工作


    前面的例子显示了单个发布者/单个订阅者的情况,但是一个节点也可以同时是一个发布者和订阅者,或者拥有多个订阅和发布。

    实际上,ROS节点最常做的事情是传递消息,并在消息上进行运算。

    例doubler.py

    首先定义一个中间节点

    1 #!/usr/bin/env python
     2 import rospy                                                                      
     3 from std_msgs.msg import Int32
     4 rospy.init_node('doubler')
     5 
     6 def callback(msg):
     7     doubled=Int32()
     8     doubled.data=msg.data*2
     9 
    10     pub.publish(doubled)
    11 
    12 sub=rospy.Subscriber('counter',Int32,callback)
    13 pub=rospy.Publisher('doubled',Int32,queue_size='number')
    14 
    15 
    16 rospy.spin()

    发布者:topic_publisher.py

     1 #!/usr/bin/env python                                                             
     2 import rospy
     3 from std_msgs.msg import Int32
     4 rospy.init_node('topic_publisher')
     5 pub = rospy.Publisher('counter',Int32,queue_size='number')
     6 rate = rospy.Rate(2)
     7 count = 0
     8 while not rospy.is_shutdown():
     9     pub.publish(count)
    10     count += 1
    11     rate.sleep()

    这里的发布者要对应中间节点的订阅者

    订阅者:topic_subscriber.py

    1 #!/usr/bin/env python 
     2 import rospy
     3 from std_msgs.msg import Int32
     4 def callback(msg):
     5     print msg.data
     6 rospy.init_node('topic_subscriber')
     7 sub=rospy.Subscriber('doubled',Int32,callback)                                    
     8 rospy.spin()

    这里的订阅者要对应中间节点的发布者

    然后运行各节点,结果如下

    qqtsj@qqtsj-Nitro-AN515-51:~/catkin_ws$ rosrun basic topic_subscriber.py 
    24
    26
    28
    30
    32
    34
    36
    38
    40
    42
    44
    46
    48
    50
    52
    54
    56
    58
    60
    62
    64

    通过中间节点使得发布者的数据×2,然后订阅者接收到

    就完成了协同工作

  • 相关阅读:
    CF1119H
    oracle 第06章 数据字典
    oracle col命令
    oracle 第05章 SQL语句
    oracle 第04章 字符集
    oracle 第03章 体系结构
    oracle 第02章 基本操作
    oracle 第01章 安装
    oracle启动、关闭、重启脚本
    第十一周-学习进度条
  • 原文地址:https://www.cnblogs.com/tanshengjiang/p/11777123.html
Copyright © 2020-2023  润新知