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.