当我们想要在一个节点中同时订阅多个话题时,我们可以如下做法。
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback_1(data):
rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
def callback_2(data):
rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
def listener():
# In ROS, nodes are uniquely named. If two nodes with the same
# name are launched, the previous one is kicked off. The
# anonymous=True flag means that rospy will choose a unique
# name for our 'listener' node so that multiple listeners can
# run simultaneously.
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("chatter_1", String, callback_1)
rospy.Subscriber("chatter_2", String, callback_2)
# spin() simply keeps python from exiting until this node is stopped
rospy.spin()
if __name__ == '__main__':
listener()
仍然初始化一个节点不变,然后在该节点中开启

在rospy中,可以通过初始化一个节点并开启多线程来实现订阅多个话题。每个`rospy.Subscriber`调用都会创建一个子线程,无需额外的线程管理。发布消息到多个话题的方法类似。


被折叠的 条评论
为什么被折叠?



