Exemplo n.º 1
0
def find_container_node_names(*, node, node_names):
    """
    Identify container nodes from a list of node names.

    :param node: a node-like instance
    :param node_names: list of `ros2node.api.NodeName` instances, as returned
        by `ros2node.api.get_node_names()`
    :return: list of `ros2node.api.NodeName` instances for nodes that are
        component containers
    """
    container_node_names = []
    for n in node_names:
        try:
            services = get_service_server_info(node=node,
                                               remote_node_name=n.full_name,
                                               include_hidden=True)
        except rclpy.node.NodeNameNonExistentError:
            continue
        if not any(
                s.name.endswith('_container/load_node')
                and 'composition_interfaces/srv/LoadNode' in s.types
                for s in services):
            continue
        if not any(
                s.name.endswith('_container/unload_node')
                and 'composition_interfaces/srv/UnloadNode' in s.types
                for s in services):
            continue
        if not any(
                s.name.endswith('_container/list_nodes')
                and 'composition_interfaces/srv/ListNodes' in s.types
                for s in services):
            continue
        container_node_names.append(n)
    return container_node_names
Exemplo n.º 2
0
 def main(self, *, args):
     with NodeStrategy(args) as node:
         node_names = get_node_names(
             node=node, include_hidden_nodes=args.include_hidden)
     count = [n.full_name for n in node_names].count(args.node_name)
     if count > 1:
         print(INFO_NONUNIQUE_WARNING_TEMPLATE.format(
             num_nodes=count, node_name=args.node_name),
               file=sys.stderr)
     if count > 0:
         with DirectNode(args) as node:
             print(args.node_name)
             subscribers = get_subscriber_info(
                 node=node,
                 remote_node_name=args.node_name,
                 include_hidden=args.include_hidden)
             print('  Subscribers:')
             print_names_and_types(subscribers)
             publishers = get_publisher_info(
                 node=node,
                 remote_node_name=args.node_name,
                 include_hidden=args.include_hidden)
             print('  Publishers:')
             print_names_and_types(publishers)
             service_servers = get_service_server_info(
                 node=node,
                 remote_node_name=args.node_name,
                 include_hidden=args.include_hidden)
             print('  Service Servers:')
             print_names_and_types(service_servers)
             service_clients = get_service_client_info(
                 node=node,
                 remote_node_name=args.node_name,
                 include_hidden=args.include_hidden)
             print('  Service Clients:')
             print_names_and_types(service_clients)
             actions_servers = get_action_server_info(
                 node=node,
                 remote_node_name=args.node_name,
                 include_hidden=args.include_hidden)
             print('  Action Servers:')
             print_names_and_types(actions_servers)
             actions_clients = get_action_client_info(
                 node=node,
                 remote_node_name=args.node_name,
                 include_hidden=args.include_hidden)
             print('  Action Clients:')
             print_names_and_types(actions_clients)
     else:
         return "Unable to find node '" + args.node_name + "'"
Exemplo n.º 3
0
 def main(self, *, args):
     with NodeStrategy(args) as node:
         node_names = get_node_names(
             node=node, include_hidden_nodes=args.include_hidden)
     if args.node_name in (n.full_name for n in node_names):
         with DirectNode(args) as node:
             print(args.node_name)
             subscribers = get_subscriber_info(
                 node=node,
                 remote_node_name=args.node_name,
                 include_hidden=args.include_hidden)
             print('  Subscribers:')
             print_names_and_types(subscribers)
             publishers = get_publisher_info(
                 node=node,
                 remote_node_name=args.node_name,
                 include_hidden=args.include_hidden)
             print('  Publishers:')
             print_names_and_types(publishers)
             service_servers = get_service_server_info(
                 node=node,
                 remote_node_name=args.node_name,
                 include_hidden=args.include_hidden)
             print('  Service Servers:')
             print_names_and_types(service_servers)
             service_clients = get_service_client_info(
                 node=node,
                 remote_node_name=args.node_name,
                 include_hidden=args.include_hidden)
             print('  Service Clients:')
             print_names_and_types(service_clients)
             actions_servers = get_action_server_info(
                 node=node,
                 remote_node_name=args.node_name,
                 include_hidden=args.include_hidden)
             print('  Action Servers:')
             print_names_and_types(actions_servers)
             actions_clients = get_action_client_info(
                 node=node,
                 remote_node_name=args.node_name,
                 include_hidden=args.include_hidden)
             print('  Action Clients:')
             print_names_and_types(actions_clients)
     else:
         return "Unable to find node '" + args.node_name + "'"
Exemplo n.º 4
0
def get_node_service_types(node_name):
    """ Returns a list of service types that are being hosted by the specified node """
    services = get_service_server_info(node=_node, remote_node_name=node_name)
    return [service.types[0] for service in services]