2

我的问题是如何将一个订阅者的回调函数中的值传递给另一个订阅者。

这有意义吗?

import rospy
from sensor_msgs.msg import LaserScan, Int32
from xxx2.msg import xxyy2

global x
x = None      

def callback2(data):
    x=data[0]

def callback(data):
    if x > data.ranges[0]:
        print("nice")


rospy.Subscriber("/scan", LaserScan, callback)
rospy.Subscriber("topic", xxyy2, callback2)    
rospy.spin()

4

2 回答 2

1

我会稍微更改代码,我认为您编写它的方式,全局变量设置不正确。

不同的是,不是在变量定义中使用全局指令,您必须在回调中使用它。

import rospy
from sensor_msgs.msg import LaserScan, Int32
from xxx2.msg import xxyy2

x = None      

def callback2(data):
    global x
    x = data[0]

def callback(data):
    global x
    if x > data.ranges[0]:
        print("nice")


rospy.Subscriber("/scan", LaserScan, callback)
rospy.Subscriber("topic", xxyy2, callback2)    
rospy.spin()

问候

于 2019-11-21T15:17:15.807 回答
1

您可以将变量“传递”x给两个回调,因为您可以将它传递给任何其他函数,x方法是按照您的方式进行全局设置,或者通过使x回调函数成为类的成员,从而允许您访问它们。

默认情况下,回调是按顺序调用的,因此在这种情况下您无需担心竞争条件。

根据您的用例,如果需要,您可以将回调与消息过滤器同步。

于 2019-11-20T14:11:58.953 回答