Exemple #1
0
def create_node_process(run_id, node, master_uri):
    """
    Factory for generating processes for launching local ROS
    nodes. Also registers the process with the L{ProcessMonitor} so that
    events can be generated when the process dies.
    
    @param run_id: run_id of launch
    @type  run_id: str
    @param node: node to launch. Node name must be assigned.
    @type  node: L{Node}
    @param master_uri: API URI for master node
    @type  master_uri: str
    @return: local process instance
    @rtype: L{LocalProcess}
    @raise NodeParamsException: If the node's parameters are improperly specific
    """
    _logger.info(
        "create_node_process: package[%s] type[%s] machine[%s] master_uri[%s]",
        node.package, node.type, node.machine, master_uri)
    # check input args
    machine = node.machine
    if machine is None:
        raise RLException(
            "Internal error: no machine selected for node of type [%s/%s]" %
            (node.package, node.type))
    if not node.name:
        raise ValueError("node name must be assigned")

    # - setup env for process (vars must be strings for os.environ)
    env = setup_env(node, machine, master_uri)

    if not node.name:
        raise ValueError("node name must be assigned")

    # we have to include the counter to prevent potential name
    # collisions between the two branches

    name = "%s-%s" % (rosgraph.names.ns_join(node.namespace,
                                             node.name), _next_counter())
    if name[0] == '/':
        name = name[1:]

    _logger.info('process[%s]: env[%s]', name, env)

    args = create_local_process_args(node, machine)

    _logger.info('process[%s]: args[%s]', name, args)

    # default for node.output not set is 'log'
    log_output = node.output != 'screen'
    _logger.debug('process[%s]: returning LocalProcess wrapper')
    return LocalProcess(run_id,
                        node.package,
                        name,
                        args,
                        env,
                        log_output,
                        respawn=node.respawn,
                        required=node.required,
                        cwd=node.cwd)
Exemple #2
0
def create_node_process(run_id, node, master_uri):
    """
    Factory for generating processes for launching local ROS
    nodes. Also registers the process with the L{ProcessMonitor} so that
    events can be generated when the process dies.
    
    @param run_id: run_id of launch
    @type  run_id: str
    @param node: node to launch. Node name must be assigned.
    @type  node: L{Node}
    @param master_uri: API URI for master node
    @type  master_uri: str
    @return: local process instance
    @rtype: L{LocalProcess}
    @raise NodeParamsException: If the node's parameters are improperly specific
    """
    _logger.info(
        "create_node_process: package[%s] type[%s] machine[%s] master_uri[%s]",
        node.package,
        node.type,
        node.machine,
        master_uri,
    )
    # check input args
    machine = node.machine
    if machine is None:
        raise RLException("Internal error: no machine selected for node of type [%s/%s]" % (node.package, node.type))
    if not node.name:
        raise ValueError("node name must be assigned")

    # - setup env for process (vars must be strings for os.environ)
    env = setup_env(node, machine, master_uri)

    if not node.name:
        raise ValueError("node name must be assigned")

    # we have to include the counter to prevent potential name
    # collisions between the two branches

    name = "%s-%s" % (rosgraph.names.ns_join(node.namespace, node.name), _next_counter())
    if name[0] == "/":
        name = name[1:]

    _logger.info("process[%s]: env[%s]", name, env)

    args = create_local_process_args(node, machine)

    _logger.info("process[%s]: args[%s]", name, args)

    # default for node.output not set is 'log'
    log_output = node.output != "screen"
    _logger.debug("process[%s]: returning LocalProcess wrapper")
    return LocalProcess(
        run_id, node.package, name, args, env, log_output, respawn=node.respawn, required=node.required, cwd=node.cwd
    )
Exemple #3
0
if __name__ == '__main__':
    debug_node_name = None
    debug_node_args = None
    debug_launch_file = None

    if len(sys.argv) != 3:
        print 'usage: %s launch_file node_name' % sys.argv[0]
        exit(1)

    debug_launch_file = sys.argv[1]
    debug_node_name = sys.argv[2]

    env = None
    args = None
    error = None
    debug_node = None

    config = roslaunch.config.load_config_default([debug_launch_file], None)
    for node in (config.nodes + config.tests):
        fullname = rosgraph.names.ns_join(node.namespace, node.name)
        if fullname == debug_node_name:
            debug_node = node

    if debug_node is None:
        error = "Could not find a definition for %s" % debug_node_name
    else:
        env = setup_env(debug_node, debug_node.machine, os.environ[rosgraph.ROS_MASTER_URI])
        args = create_local_process_args(debug_node, debug_node.machine)

    print(json.dumps({ 'env': env, 'args': args, 'error': error }))