Source code for rocon_master_info.master_info

#
# License: BSD
#   https://raw.github.com/robotics-in-concert/rocon_tools/license/LICENSE
#
##############################################################################
# Description
##############################################################################

"""
.. module:: master_info
   :platform: Unix
   :synopsis: Client utilities for retrieving rocon master information.

Some methods for retrieving the rocon master information. Also provides the
main method for scripts/tools that do this.
----

"""
##############################################################################
# Imports
##############################################################################

import os
import sys
import rospy
import rocon_python_comms
import rocon_python_utils
import rocon_console.console as rocon_console
import rocon_std_msgs.msg as rocon_std_msgs

##############################################################################
# Methods
##############################################################################


[docs]def get_master_info(timeout=1.0): ''' Tries to gather the rocon master info but if not available, return with a rocon_std_msgs.MasterInfo_ object filled with appropriate information ("Unknown Master" ...). :param double timeout: how long to blather around looking for the master info topic. :returns: the master information :rtype: rocon_std_msgs.MasterInfo_ .. include:: weblinks.rst ''' # default values master_info = rocon_std_msgs.MasterInfo() master_info.name = "Unknown Master" master_info.description = "Unknown" master_info.version = rocon_std_msgs.Strings.ROCON_VERSION master_info.icon = rocon_python_utils.ros.icon_resource_to_msg('rocon_icons/unknown.png') try: topic_name = rocon_python_comms.find_topic('rocon_std_msgs/MasterInfo', timeout=rospy.rostime.Duration(timeout), unique=True) except rocon_python_comms.NotFoundException as e: print(rocon_console.red + "failed to find unique topic of type 'rocon_std_msgs/MasterInfo' [%s]" % str(e) + rocon_console.reset) master_info.description = "Is it rocon enabled? See http://wiki.ros.org/rocon_master_info" return master_info master_info_proxy = rocon_python_comms.SubscriberProxy(topic_name, rocon_std_msgs.MasterInfo) try: master_info_proxy.wait_for_publishers() except rospy.exceptions.ROSInterruptException: rospy.logwarn("Concert Info : ros shut down before rocon master info could be retrieved.") master_info.description = "Unkonwn" return master_info result = master_info_proxy(rospy.Duration(0.2)) if result: master_info = result # rocon_std_msgs.MasterInfo return master_info
############################################################################## # Main ############################################################################## def console_only_main(node_name='master_info', title='Master Information'): # Establishes a connection and prints master information to the console. rospy.init_node(node_name) master_info = get_master_info() # display_available = True if 'DISPLAY' in os.environ.keys() else False rocon_console.pretty_println(title, rocon_console.bold) print(rocon_console.cyan + " Name : " + rocon_console.yellow + master_info.name + rocon_console.reset) print(rocon_console.cyan + " Rocon Uri : " + rocon_console.yellow + master_info.rocon_uri + rocon_console.reset) print(rocon_console.cyan + " Description: " + rocon_console.yellow + master_info.description + rocon_console.reset) print(rocon_console.cyan + " Icon : " + rocon_console.yellow + master_info.icon.resource_name + rocon_console.reset) print(rocon_console.cyan + " Version : " + rocon_console.yellow + master_info.version + rocon_console.reset) def main(node_name='master_info', title='Master Information', console=True): display_available = True if 'DISPLAY' in os.environ.keys() else False try: import rocon_qt_master_info from rqt_gui.main import Main qt_available = True except ImportError: qt_available = False if display_available and not console: print(rocon_console.red + "WARNING: rqt plugin not found, console output only (hint: install rocon_qt_master_info)." + rocon_console.reset) if console or not display_available or not qt_available: console_only_main(node_name, title) else: main = Main() sys.exit(main.main(argv=sys.argv, standalone='rocon_qt_master_info'))