topics.py
Go to the documentation of this file.
00001 # Software License Agreement (BSD License)
00002 #
00003 #  Copyright (c) 2010, UC Regents
00004 #  All rights reserved.
00005 #
00006 #  Redistribution and use in source and binary forms, with or without
00007 #  modification, are permitted provided that the following conditions
00008 #  are met:
00009 #
00010 #   * Redistributions of source code must retain the above copyright
00011 #     notice, this list of conditions and the following disclaimer.
00012 #   * Redistributions in binary form must reproduce the above
00013 #     copyright notice, this list of conditions and the following
00014 #     disclaimer in the documentation and/or other materials provided
00015 #     with the distribution.
00016 #   * Neither the name of the University of California nor the names of its
00017 #     contributors may be used to endorse or promote products derived
00018 #     from this software without specific prior written permission.
00019 #
00020 #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00021 #  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00022 #  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00023 #  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00024 #  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00025 #  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00026 #  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00027 #  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00028 #  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00029 #  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00030 #  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00031 #  POSSIBILITY OF SUCH DAMAGE.
00032 
00033 """
00034 topics.py
00035 
00036 Functions to do with topics
00037 """
00038 import roslib
00039 roslib.load_manifest('starmac_roshlib')
00040 from rospy import loginfo, sleep
00041 from rosh import nodes, info, topics
00042 
00043 def is_publishing(node_name, topic_name):
00044     if nodes is None:
00045         return False
00046     else:
00047         topics_published = [info(s).name for s in info(nodes[node_name]).pubs]
00048         return True in [s.find(topic_name) >= 0 for s in topics_published]
00049 
00050 def is_subscribing(node_name, topic_name):
00051     if nodes is None:
00052         return False
00053     else:
00054         topics_subscribed = [info(s).name for s in info(nodes[node_name]).subs]
00055         return True in [s.find(topic_name) >= 0 for s in topics_subscribed]
00056 
00057 def wait_for_topic(node_name, topic_name, sleep_time=0.5):
00058     loginfo("Waiting for node %s to publish topic %s" % (node_name, topic_name))
00059     while not is_publishing(node_name, topic_name):
00060         #loginfo("Still waiting for topic %s from node %s" % (topic_name, node_name))
00061         sleep(sleep_time)
00062     loginfo("Node %s is now publishing topic %s" % (node_name, topic_name))
00063     
00064 def wait_for_topic_sub(node_name, topic_name, sleep_time=0.5):
00065     loginfo("Waiting for node %s to subscribe to topic %s" % (node_name, topic_name))
00066     while not is_subscribing(node_name, topic_name):
00067         #loginfo("Still waiting for topic %s from node %s" % (topic_name, node_name))
00068         sleep(sleep_time)
00069     loginfo("Node %s is now subscribing to topic %s" % (node_name, topic_name))
00070     
00071 def topics_list():
00072     all_topics = []
00073     for t in topics:
00074         all_topics.extend(list(t._list()))
00075     return all_topics
00076 
00077 def wait_for_topic_existence(topic_name, sleep_time=0.5):
00078     loginfo("Waiting for topic %s to show up in topics list" % topic_name)
00079     while not topic_name in topics_list():
00080         sleep(sleep_time)
00081     loginfo("Topic %s is now in topics list" % topic_name)


starmac_roshlib
Author(s): bouffard
autogenerated on Sun Jan 5 2014 11:38:09