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