用Python编写的ROS节点如何能够订阅多个主题并发布到多个主题?

我发现的所有示例都针对单个主题。这是一种事件驱动的模型,因此允许预订多个“事件”吗?它更像是一个循环,因此它一次只能监听一个“源”?

#1 楼

您可以在此处遵循示例代码,只需添加第二个订阅,如下所示:

import rospy
from std_msgs.msg import String

def callback1(data):
    rospy.loginfo("Callback1 heard %s",data.data)

def callback2(data):
    rospy.loginfo("Callback2 heard %s",data.data) 

def listener():
    rospy.init_node('node_name')
    rospy.Subscriber("chatter1", String, callback1)
    rospy.Subscriber("chatter2", String, callback2)
    # spin() simply keeps python from exiting until this node is stopped
    rospy.spin()


ROS Python节点本质上是多线程的。当您获得每个回调时,它将在一个单独的线程中。因此,这是一个事件驱动的模型。

请注意,此行为与本质上是单线程的ROS C节点的默认行为不同,除非您专门使它们成为多线程。

评论


$ \ begingroup $
感谢@Ben确认Python节点是事件驱动的(多线程),并提供了示例代码。这正是我一直在寻找的确认。谢谢!
$ \ endgroup $
–佐丹·费多(Zoltan Fedor)
15年2月22日在16:30