How to get a python node in ROS subscribe to multiple topics?

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?

Answers 1

  • 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",
    def callback2(data):
        rospy.loginfo("Callback2 heard %s", 
    def listener():
        rospy.Subscriber("chatter1", String, callback1)
        rospy.Subscriber("chatter2", String, callback2)
        # spin() simply keeps python from exiting until this node is stopped

    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.

Related Questions