Contents
Un "nodo" es un proceso que realiza cálculos. Los nodos se combinan en un gráfico y se comunican entre sí mediante la transmisión de topics, RPC services y el Parameter Server. Estos nodos están destinados a operar a una escala detallada; un sistema de control de robot generalmente comprenderá muchos nodos. Por ejemplo, un nodo controla un telémetro láser, un nodo controla los motores de la rueda del robot, un nodo realiza la localización, un nodo realiza la planificación de la ruta, un nodo proporciona una vista gráfica del sistema, etc.
El uso de nodos en ROS proporciona varios beneficios al sistema en general. Existe una "tolerancia a fallos" adicional, ya que los bloqueos se aíslan en nodos individuales. La "complejidad del código" se reduce en comparación con los sistemas monolíticos. Los detalles de implementación también están bien ocultos, ya que los nodos exponen una API mínima al resto del gráfico y las implementaciones alternativas, incluso en otros lenguajes de programación, pueden sustituirse fácilmente.
Todos los nodos en ejecución tienen un graph resource name que los identifica de forma exclusiva con el resto del sistema. Por ejemplo, / hokuyo_node podría ser el nombre de un controlador Hokuyo que transmite escaneos láser. Los nodos también tienen un "tipo de nodo", que simplifica el proceso de referencia a un ejecutable de nodo en el sistema de archivos. Estos tipos de nodos son package resource names con el nombre del paquete del nodo y el nombre del archivo ejecutable del nodo. Para resolver un tipo de nodo, ROS busca todos los ejecutables en el paquete con el nombre especificado y elige el primero que encuentra. Como tal, debe tener cuidado y no producir diferentes ejecutables con el mismo nombre en el mismo paquete.
Un nodo ROS se escribe con el uso de una ROS client library, como roscpp o rospy.
Node Herramientas
rosnode es una herramienta de línea de comandos para mostrar información sobre los nodos, como enumerar los nodos que se están ejecutando actualmente. Consulte la página rosnode para obtener documentación sobre el uso.
Remapeo de Argumentos mediante linea de comandos
Vea también:
Remapeando Argumentos
Cualquier ROS name dentro de un node se puede reasignar cuando es inicializado en la línea de comandos. Esta es una característica poderosa de ROS que le permite lanzar el mismo nodo bajo múltiples configuraciones desde la línea de comandos. Todos los nombres de recursos se pueden reasignar. Esta característica de ROS le permite diferir asignaciones de nombres complejos a la carga real del tiempo de ejecución del sistema.
Los argumentos de reasignación se pueden pasar a cualquier nodo y utilizar la sintaxis name:=new_name. Por ejemplo, para configurar el nodo talker para publicar en /wg/chatter en lugar de en chatter:
rosrun rospy_tutorials talker chatter:=/wg/chatter
Resolvemos los argumentos antes de hacer el emparejamiento. El efecto de esto es que está reasignando un nombre completo, mientras que antes las reasignaciones solo se aplicaban a una cadena específica. Por ejemplo, donde foo:=bar anteriormente solo coincidía con la cadena exacta foo, también coincidirá con /<node_namespace>/foo. Después de la resolución, se usa una coincidencia de cadena directa, por lo que no puede usarla para reasignar partes de los nombres, es decir, foo:=bar coincidirá con foo o /<node_namespace>/foo, pero no coincidirá con foo/baz. La única excepción a esto es cuando se usa searchParam, que mantiene el comportamiento anterior. Esto se debe a que "searchParam" en sí mismo funciona con nombres no resueltos.
Ejemplos
Node Namespace |
Remapping Argument |
Matching Names |
Final Resolved Name |
/ |
foo:=bar |
foo, /foo |
/bar |
/baz |
foo:=bar |
foo, /baz/foo |
/baz/bar |
/ |
/foo:=bar |
foo, /foo |
/bar |
/baz |
/foo:=bar |
/foo |
/baz/bar |
/baz |
/foo:=/a/b/c/bar |
/foo |
/a/b/c/bar |
Las diversas bibliotecas ROS brindan soporte al cliente para eliminar fácilmente los argumentos de reasignación de su propio análisis de argumentos.
"Empujando hacia abajo"
El ROS_NAMESPACE variable de entorno le permite cambiar el espacio de nombres de un nodo que se está lanzando, lo que reasigna efectivamente todos los nombres en ese nodo. Como todos los nodos se inician en el espacio de nombres global, esto en efecto "lo empuja hacia abajo" en un espacio de nombres secundario. Cambiar el espacio de nombres de un nodo es un mecanismo sencillo para integrar código, ya que todos los nombres dentro del nodo (nombre del nodo, temas, servicios y parámetros) se modificarán.
NOTA: para que esta característica funcione correctamente, es importante que su programa evite el uso de nombres globales y, en su lugar, utilice nombres relativos y privados.
Asignación de parámetros de nodo
Puede asignar parámetros privados para un nodo directamente desde la línea de comandos usando un solo subrayado _ como prefijo. Por ejemplo,
rosrun rospy_tutorials talker _param:=1.0
establece ~ param en 1.0. ROS usa la sintaxis YAML para determinar el tipo de parámetro.
Teclas especiales
__name
__name es una palabra clave reservada especial para" el nombre del nodo ". Le permite reasignar el nombre del nodo sin tener que saber su nombre real. Solo se puede utilizar si el programa que se está iniciando contiene un nodo.
__log
__log es una palabra clave reservada que designa la ubicación en la que se debe escribir el archivo de registro del nodo. Por lo general, no se recomienda el uso de esta palabra clave; se proporciona principalmente para que la utilicen herramientas ROS como roslaunch.
__ip y __hostname
__ip y __hostname son sustitutos de ROS_IP y ROS_HOSTNAME. Por lo general, no se recomienda el uso de esta palabra clave, ya que se proporciona para casos especiales en los que no se pueden establecer variables de entorno.
__master
__master es un sustituto de ROS_MASTER_URI. Por lo general, no se recomienda el uso de esta palabra clave, ya que se proporciona para casos especiales en los que no se pueden establecer variables de entorno.
__ns
__ns es un sustituto de ROS_NAMESPACE. Por lo general, no se recomienda el uso de esta palabra clave, ya que se proporciona para casos especiales en los que no se pueden establecer variables de entorno.
Nombres privados
También puede proporcionar asignación para parámetros de nodos privados. La tecla "from" debe tener el prefijo ~. Consulte este hilo con ejemplo de trabajo para obtener más detalles.
Client Library Support
Python
Vea la vista general de rospy.
C++
Vea la vista general de roscpp.