|Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.|
Subscriber ProxyDescription: A useful way to use a subscriber and it's callback in a similar way to service callbacks with empty requests.
Keywords: rocon service
Tutorial Level: BEGINNER
Quite often you just want to tune into a publisher for one message, not a stream. This will often be the case when tuning into a latched publisher (e.g. it may be serving a map). To do that takes several lines of code and gets annoying to repeat.
The SubscriberProxy class takes care of that for you with a similar syntax to the existing ServiceProxy.
The infamous talker-listener example. The subscriber proxy provides an alternate way of listening to the topic.
The proxy internally constructs a subscriber and callback. When you call the proxy itself, it merely returns the latest data, or if it hasn't received any, waits for the first data to arrive.
The call function can be made with a timeout to make sure it doesn't hang:
1 print("Heard: %s" % chatter_proxy(rospy.Duration(0.5)))
If you aren't interested in the last data that arrived, you can use (timeouts work for this as well):
1 print("Heard: %s" % chatter_proxy.wait_for_next(rospy.Duration(0.5)))
If you don't want to use it more than once, call it with the constructor and be sure to let it go out of scope so that it doesn't keep processing callbacks internally.
1 chatter_proxy = rocon_utilities.SubscriberProxy('chatter', String)()