6
$\begingroup$

How a ROS node written in Python could subscribe to multiple topics and publish to multiple topics?

All examples I found were for a single topic. Is this an event-driven model so subscription to multiple "events" is allowed or it is more like a loop, so it can listen only to one "source" at a time?

$\endgroup$

1 Answer 1

7
$\begingroup$

You can follow the example code here and simply add a second subscription like so:

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 nodes are inherently multi-threaded. When you get each callback, it will be in a separate thread. So this is an event-driven model.

Note that this behavior is different than the default behavior for ROS C nodes which are inherently single threaded unless you specifically make them multi-threaded.

$\endgroup$
1
  • $\begingroup$ Thanks @Ben for confirming that Python nodes are event-driven (multiple threads) and providing an example code. This is exactly the confirmation I was looking for. Thanks! $\endgroup$ Feb 22, 2015 at 16:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.