Source code for rocon_launch.roslaunch_configuration

#!/usr/bin/env python
#
# License: BSD
#   https://raw.github.com/robotics-in-concert/rocon_tools/license/LICENSE
#
##############################################################################
# Description
##############################################################################

"""
.. module:: roslaunch_configuration
   :platform: Unix
   :synopsis: Configuration for a single roslaunch


This module provides the context for a roslaunch configuration.

----

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

import os
import rocon_console.console as console
import rocon_python_utils
from urlparse import urlparse

from .exceptions import InvalidRoconLauncher

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


def _get_default_port():
    '''
    Helper method to determine the default port to use for roslaunch
    configurations. Uses the ros master uri port or 11311 otherwise.

    :returns: the default port
    :rtype: int
    '''
    ros_master_port = urlparse(os.environ["ROS_MASTER_URI"]).port
    return ros_master_port if ros_master_port is not None else 11311

##############################################################################
# Classes
##############################################################################


[docs]class RosLaunchConfiguration(object): """ Configuration for a roslaunch (to be later spawned inside a terminal). This is typically generated by reading from a rocon_launch xml file but is also usable by other sources wishing to spawn roslaunched terminals. """ __slots__ = [ 'package', 'name', 'title', 'namespace', 'port', 'options', 'args', 'path' ] default_port = _get_default_port()
[docs] def __init__(self, name, package=None, port=None, title=None, namespace=None, args=[], options=""): """ :param str name: filename (must be absolute path if package is set to None) :param str package: name of the catkin package to find the launcher in (can be None) :param int port: port to launch on (defaults to ROS_MASTER_URI's or 11311 if None) :param str title: title to use for the launch window (provides a sensible default if None) :param str[] args: any args contained in the launcher :param str options: command line options to pass to roslaunch (string form, not list) :raises :exc:`.InvalidRoconLauncher` """ self.args = args """A list of (name, value) tuples representing roslaunch args.""" self.package = package """Package name in which to find the roslaunch (optional).""" self.name = name """Name of the roslauncher (must be absolute if there is no package specified).""" self.title = title or "RosLaunch Window" """The string to display on a spawned terminal window (easy for tabbing).""" self.namespace = namespace """Push the roslaunch down into this namespace.""" self.path = None """The absolute path to this launcher (automatically derived from package/name).""" if self.package is None: # look for a standalone launcher if os.path.isfile(self.name): self.path = self.name else: raise InvalidRoconLauncher("roslaunch file does not exist [%s]" % self.name) else: # look for a catkin package launcher try: self.path = rocon_python_utils.ros.find_resource(self.package, self.name) except IOError as e: raise InvalidRoconLauncher("roslaunch file does not exist [%s/%s][%s]" % (self.package, self.name, str(e))) self.port = port or RosLaunchConfiguration.default_port """Port to start this configuration on (defaults to env. ROS_MASTER_URI or 11311 if not set).""" self.options = options """A string of options to pass to roslaunch (not a list!), e.g. '--screen --local'"""
def __str__(self): s = console.bold + "Roslaunch Configuration" + console.reset + '\n' if self.package is not None: s += console.cyan + " Package" + console.reset + " : " + console.yellow + "%s" % self.package + console.reset + '\n' # noqa s += console.cyan + " Name" + console.reset + " : " + console.yellow + "%s" % self.name + console.reset + '\n' # noqa s += console.cyan + " Port" + console.reset + " : " + console.yellow + "%s" % str(self.port) + console.reset + '\n' # noqa s += console.cyan + " Title" + console.reset + " : " + console.yellow + "%s" % self.title + console.reset + '\n' # noqa s += console.cyan + " Namespace" + console.reset + " : " + console.yellow + "%s" % self.namespace + console.reset + '\n' # noqa s += console.cyan + " Args" + console.reset + " : " + console.yellow + "%s" % self.args + console.reset + '\n' # noqa s += console.cyan + " Options" + console.reset + " : " + console.yellow + "%s" % self.options + console.reset + '\n' # noqa return s
[docs] def append_option(self, option): """ Appends a roslaunch command line option to the configuration. :param str option: """ self.options = self.options + " " + option
[docs] def screen(self): """ :returns: true or false depending on whether --screen is applied or not. :rtype: bool """ return '--screen' in self.options