zoukankan      html  css  js  c++  java
  • 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,然后订阅者接收到

    就完成了协同工作

  • 相关阅读:
    RHEL5.8使用yum安装xclock
    Linux下磁盘分区、挂载、卸载操作记录
    CentOS6.5磁盘分区和挂载操作记录
    CentOS环境下下调整home和根分区大小
    PowerDesigner连接Oracle数据库(32位)反向生成物理数据模型
    Create-React-App脚手架使用方法
    react 简书开发笔记
    本地连接服务器的mongodb
    使用mongoose连接mongodb(转载文章)
    将koa+vue部署到服务器
  • 原文地址:https://www.cnblogs.com/tanshengjiang/p/11777123.html
Copyright © 2011-2022 走看看