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)
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 )
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 }))