Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

Conéctese a una red de ROS

Una red ROS consiste en una sola y múltiples.ROS masterROS nodes El maestro ROS facilita la comunicación en la red de ROS, manteniendo un seguimiento de todas las entidades de ROS activos. Cada nodo necesita registrarse con el maestro ROS para poder comunicarse con el resto de la red. MATLAB® puede iniciar el maestro ROS o el maestro se puede lanzar fuera de MATLAB (por ejemplo, en un equipo diferente). Todos los nodos ROS se registran con el maestro y declaran la dirección de red donde se pueden alcanzar.

Cuando trabaje con ROS, normalmente seguirá estos pasos:

  • .Connect to a ROS network Para conectarse a una red de ROS, puede crear el maestro ROS en MATLAB o conectarse a un maestro ROS existente. En ambos casos, MATLAB también creará y registrará su propio nodo ROS (denominado "nodo global" de MATLAB) con el maestro. La función gestiona este proceso.rosinit

  • .Exchange Data Una vez conectado, MATLAB intercambia datos con otros nodos de ROS a través de editores, suscriptores y servicios.

  • .Disconnect from the ROS network La llamada a la función desconecta MATLAB de la red de ROS.rosshutdown

Este ejemplo muestra cómo:

  • Cree un ROS maestro en MATLAB

  • Conéctese a un maestro de ROS externo

Requisitos previos:Empiece con ROS

Cree un ROS Master en MATLAB

  • Para crear el maestro ROS en MATLAB, llame sin ningún argumento.rosinit Esto también creará el "nodo global", que MATLAB utilizará para comunicarse con otros nodos de la red de ROS.

rosinit
Initializing ROS master on http://bat5214glnxa64:35305/. Initializing global node /matlab_global_node_97851 with NodeURI http://bat5214glnxa64:42885/ 

Los nodos ROS que son externos a MATLAB ahora pueden unirse a la red de ROS. Pueden conectarse al maestro de ROS en MATLAB utilizando el nombre de host o la dirección IP del equipo host de MATLAB.

Puede apagar el maestro ROS y el nodo global llamando.rosshutdown

rosshutdown
Shutting down global node /matlab_global_node_97851 with NodeURI http://bat5214glnxa64:42885/ Shutting down ROS master on http://bat5214glnxa64:35305/. 

Conéctese a un ROS Master externo

También puede utilizar el comando para conectarse a un maestro de ROS externo (por ejemplo, se ejecuta en un robot o una máquina virtual).rosinit Puede especificar la dirección del maestro de dos maneras: por una dirección IP o por un nombre de host del equipo que ejecuta el maestro.

Después de cada llamada a, usted tiene que llamar antes de llamar con una sintaxis diferente.rosinitrosshutdownrosinit Por brevedad, estas llamadas a se omiten en las siguientes secciones.rosshutdown

En este ejemplo, utilice como nombre del host de ejemplo y como dirección IP del ejemplo del Master externo ROS.master_host192.168.1.1 Ajuste estas direcciones en función de dónde resida el maestro externo en la red. Tenga en cuenta que se producirá un error en los siguientes comandos si no se encuentra ningún patrón en las direcciones especificadas.

rosinit('192.168.1.1') rosinit('master_host') 

Ambas llamadas para asumir que el Master aceptará las conexiones de red en el puerto 11311, que es el puerto maestro estándar ROS.rosinit

Si el maestro se está ejecutando en un puerto diferente, puede especificarlo como un segundo argumento. Para conectarse a un maestro de ROS que se ejecuta en el nombre de host y el puerto 12000, utilice el siguiente comando:master_host

rosinit('master_host', 12000) 

Si conoce el URI completo (identificador uniforme de recursos) del maestro, puede crear el nodo global y conectarse a este maestro utilizando la siguiente sintaxis:

rosinit('http://192.168.1.1:12000') 

Especificación de host de nodo

En algunos casos, el equipo puede estar conectado a varias redes y tener varias direcciones IP. Vea la siguiente ilustración como ejemplo.

El ordenador de la parte inferior izquierda ejecuta MATLAB y está conectado a dos redes diferentes. En una subred, su dirección IP es y en el otro, su IP es.73.195.120.50192.168.1.100 Este equipo quiere conectarse al maestro ROS en el equipo TurtleBot® en la dirección IP.192.168.1.1 Como parte del registro con el maestro, el nodo global de MATLAB tiene que especificar la dirección IP o el nombre de host donde otros nodos ROS pueden alcanzarlo. Todos los nodos del TurtleBot utilizarán esta dirección para enviar datos al nodo global de MATLAB.

Cuando se invoca con la dirección IP del maestro, intentará detectar la interfaz de red utilizada para ponerse en contacto con el maestro y utilizarla como dirección IP para el nodo global.rosinit

Si se produce un error en esta detección automática, puede especificar explícitamente la dirección IP o el nombre de host mediante el par nombre-valor de la llamada.NodeHostrosinit Todos los métodos previos para llamar siguen estando permitidos con la adición del par nombre-valor.rosinitNodeHost

Para los siguientes comandos, suponga que desea anunciar la dirección IP de su equipo a la red de ROS como.192.168.1.100

rosinit('192.168.1.1', 'NodeHost', '192.168.1.100') rosinit('http://192.168.1.1:11311', 'NodeHost', '192.168.1.100') rosinit('master_host', 'NodeHost', '192.168.1.100') 

Una vez que un nodo se registra en la red ROS, usted puede ver la dirección que anuncia usando el comando.rosnode info NODE NODE es el nombre de un nodo en la red ROS. Puede ver los nombres de todos los nodos registrados mediante una llamada.rosnode list

ROS Environment variables

En casos de uso avanzados, es posible que desee especificar la dirección de un maestro de ROS y su dirección de nodo anunciada a través de variables de entorno de ROS estándar. Las sintaxis de llamada que se explicaron en las secciones anteriores deben ser suficientes para la mayoría de los casos de uso.

Si no se proporciona ningún argumento, la función también comprobará los valores de las variables de entorno de ROS estándar.rosinit Estas variables son, y.ROS_MASTER_URIROS_HOSTNAMEROS_IP Puede ver sus valores actuales utilizando el comando:getenv

getenv('ROS_MASTER_URI') getenv('ROS_HOSTNAME') getenv('ROS_IP') 

Puede establecer estas variables mediante el comando.setenv Después de establecer las variables de entorno, llame sin argumentos.rosinit La dirección del maestro ROS se especifica por y la dirección anunciada del nodo global es dada por o.ROS_MASTER_URIROS_IPROS_HOSTNAMEIf you specify additional arguments to rosinit, they will override the values in the environment variables.

setenv('ROS_MASTER_URI','http://192.168.1.1:11311') setenv('ROS_IP','192.168.1.100') rosinit 

No tiene que establecer ambos y.ROS_HOSTNAMEROS_IP Si ambos se establecen, tiene prioridad.ROS_HOSTNAME

Verifique la conexión

Para que su conexión de ROS funcione correctamente, debe asegurarse de que todos los nodos puedan comunicarse con el maestro y entre sí. Los nodos individuales deben comunicarse con el maestro para registrar los suscriptores, editores y servicios. También deben ser capaces de comunicarse entre sí para enviar y recibir datos.

Debido a que la comunicación funciona de esta manera, es posible enviar datos e incapaces de recibirlos (o viceversa) si su red de ROS no está configurada correctamente.

Aquí hay un diagrama de la estructura de comunicación en una red de ROS. Hay un solo maestro ROS y dos nodos diferentes que se registran con el maestro. Cada nodo se pondrá en contacto con el maestro para encontrar la dirección anunciada del otro nodo en la red de ROS. Una vez que cada nodo conoce la dirección del otro nodo, se puede establecer un intercambio de datos sin la implicación del maestro.

Próximos pasos