rospy.Subscriber()的回调函数怎么传其他参数
时间: 2023-07-11 16:37:10 浏览: 516
c# 事件 代理 语言
在ROS中,rospy.Subscriber()的回调函数只能接收一个参数,即该话题发布的消息。如果需要在回调函数中引入其他参数,可以通过使用lambda函数或类的实例方法来解决。
例如,以下是使用lambda函数传递额外参数的示例代码:
```python
import rospy
from std_msgs.msg import String
def callback(data, arg1, arg2):
rospy.loginfo(rospy.get_caller_id() + "I heard %s, %s, %s", data.data, arg1, arg2)
def listener():
arg1 = 'hello'
arg2 = 'world'
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("my_topic", String, lambda data: callback(data, arg1, arg2))
rospy.spin()
if __name__ == '__main__':
listener()
```
在上述代码中,我们定义了一个lambda函数,它接收一个参数data,并调用回调函数callback,同时传递了arg1和arg2作为额外参数。在回调函数中,我们可以通过arg1和arg2来访问这些额外参数。
除了lambda函数外,我们还可以使用类的实例方法来传递额外参数。例如:
```python
import rospy
from std_msgs.msg import String
class Listener:
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
def callback(self, data):
rospy.loginfo(rospy.get_caller_id() + "I heard %s, %s, %s", data.data, self.arg1, self.arg2)
def start(self):
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("my_topic", String, self.callback)
rospy.spin()
if __name__ == '__main__':
listener = Listener('hello', 'world')
listener.start()
```
在上述代码中,我们定义了一个名为Listener的类,它接收arg1和arg2作为参数,并在初始化方法中保存这些参数。在类中,我们定义了一个实例方法callback,它接收一个参数data,并调用回调函数。在start方法中,我们初始化ROS节点并订阅话题,将实例方法callback作为回调函数。最后,我们调用start方法来启动该节点。
通过使用lambda函数或类的实例方法,我们可以在回调函数中传递额外参数。
阅读全文