Hay muchas variables de entorno que puede configurar para afectar el comportamiento de ROS. De estos, los más importantes de entender son ROS_MASTER_URI, ROS_ROOT y ROS_PACKAGE_PATH ya que se usan comúnmente en el sistema y se mencionan con frecuencia en la documentación.

Las variables de entorno cumplen una variedad de roles en ROS:

  • Encontrando paquetes: En primer lugar, ROS_ROOT y ROS_PACKAGE_PATH permiten a ROS localizar paquetes y pilas en el sistema de archivos. También debe configurar el PYTHONPATH para que el intérprete de Python pueda encontrar bibliotecas ROS.

  • Effecting a Node runtime: * Hay varias variables de entorno ROS que afectan la forma en que se ejecuta un nodo. ROS_MASTER_URI es una variable de entorno importante que le dice a un Nodo dónde está el Master. ROS_IP y ROS_HOSTNAME afectan la dirección de red de un Nodo y ROS_NAMESPACE te permite cambiar el nombre de su espacio de trabajo ROS. ROS_LOG_DIR le permite establecer el directorio donde se escriben los archivos de registro. Muchos de estos también pueden ser anulados por Remapping Arguments, que tienen prioridad sobre las variables de entorno.

Estas variables de entorno y más se describen con mayor detalle a continuación.

Variables de entorno ROS requeridas

La mayoría de los sistemas también tendrán configurado ROS_PACKAGE_PATH, pero las únicas variables de entorno requeridas para ROS son ROS_ROOT, ROS_MASTER_URI y PYTHONPATH. De forma predeterminada, estos se configuran automáticamente mediante la compilacion de /opt/ros/ROSDISTRO/setup.bash. (Reemplace ROSDISTRO con la distribución ROS deseada, por ejemplo, índigo o kinetic).

ROS_ROOT

ROS_ROOT establece la ubicación donde se instalan los paquetes principales de ROS.

export ROS_ROOT=/home/user/ros/ros
export PATH=$ROS_ROOT/bin:$PATH

ROS_MASTER_URI

ROS_MASTER_URI es una configuración obligatoria que indica a los nodos dónde pueden ubicar al master. Se debe establecerse en el URI XML-RPC del master. Se debe tener mucho cuidado al usar localhost, ya que eso puede conducir a comportamientos no deseados con nodos lanzados de forma remota.

export ROS_MASTER_URI=http://mia:11311/

PYTHONPATH

ROS requiere que su PYTHONPATH esté actualizado, ¡incluso si no programa en Python! 'Muchas herramientas de infraestructura ROS se basan en Python y necesitan acceso al paquete roslib para arrancar.

export PYTHONPATH=$PYTHONPATH:$ROS_ROOT/core/roslib/src

Variables de entorno PATH adicionales

ROS_PACKAGE_PATH

ROS_PACKAGE_PATH es una variable de entorno opcional; pero muy común. Esta le permite agregar más paquetes ROS desde la fuente a su entorno. ROS_PACKAGE_PATH puede estar compuesto por una o más rutas separadas por el separador de ruta estándar de su sistema operativo (por ejemplo, ':' en sistemas similares a Unix). Estas rutas "ordenadas" le dicen al sistema ROS dónde buscar más paquetes ROS. Si hay varios paquetes con el mismo nombre, ROS elegirá primero el que aparece en ROS_PACKAGE_PATH .

export ROS_PACKAGE_PATH=/home/user/ros/ros-pkg:/another/path

Tenga en cuenta que cada entrada en ROS_PACKAGE_PATH se busca de forma recursiva y que por lo tanto se encontrarán todos los paquetes ROS debajo de la ruta nombrada.

Con la introducción de catkin, la necesidad de actualizar manualmente ROS_PACKAGE_PATH se vuelve obsoleta y solo es necesaria para la compatibilidad con versiones anteriores de los paquetes rosbuild.

Variables del entorno de datos del sistema

ROS_HOME

De forma predeterminada, ROS escribe datos en ~/.ros. Esta ubicación se puede cambiar configurando un ROS_HOME opcional. También puede cambiar la ubicación de ciertos directorios individuales en ~/.ros (por ejemplo, ROS_TEST_RESULTS_DIR, ROS_LOG_DIR).

ROS_LOG_DIR

De forma predeterminada, ROS escribe archivos de registro internos en ROS_HOME/log. Si esta ubicación no es accesible para ROS, o si desea que los archivos de registro se escriban en otro lugar, establezca ROS_LOG_DIR en esa ruta.

ROS_TEST_RESULTS_DIR

Directorio en el que se deben escribir los resultados de las pruebas.

ROS_CACHE_TIMEOUT

(Vea rospack's api doc para mas detalle).

rospack vuelve a analizar los archivos package.xml y reconstruye el árbol de dependencias en cada ejecución. Sin embargo, mantiene una caché de directorios de paquetes en ROS_ROOT/.rospack_cache. Este caché se actualiza cada vez que hay un error de caché o cuando el caché tiene 60 segundos de antigüedad. Puede cambiar este tiempo de espera configurando la variable de entorno ROS_CACHE_TIMEOUT, en segundos. Configure este en 0.0 para forzar una reconstrucción de caché en cada invocación de rospack.

Variables de entorno Bash adicionales

ROS_LOCATIONS

ROS_LOCATIONS es una variable de entorno opcional que proporciona nombres con clave para ubicaciones útiles. Es una lista separada : de pares de clave-ubicación. Cada par de clave-ubicación está separado por un =. Por ejemplo:

export ROS_LOCATIONS="rospkg=/path/to/rospkg:stairpkg=/path/to/stairpkg"

Estas claves se pueden utilizar en herramientas como roscd.

ROS_WORKSPACE

ROS_WORKSPACE es introducido por las herramientas rosinstall / rosws, es configurado por setup.sh que es generado por estas herramientas al crear un espacio de trabajo. Apunta a la carpeta del espacio de trabajo y el comando rosws lo utiliza como destino predeterminado del comando.

La herramienta roscd en fuerte también se cambió para usar esa variable cuando se llama sin argumentos. Anteriormente, se había predeterminado para cambiar a ROS_ROOT.

Variables de entorno del nodo

ROS_IP/ROS_HOSTNAME

ROS_IP y ROS_HOSTNAME son una variable de entorno opcional que establece la dirección de red declarada de un Nodo ROS o herramienta. Las opciones son mutuamente excluyentes, si ambas están configuradas, ROS_HOSTNAME tendrá prioridad. Utilice ROS_IP si está especificando una dirección IP, y ROS_HOSTNAME si está especificando un nombre de host. Cuando un componente ROS informa un URI al ROS_MASTER u otros componentes, se utilizará este valor. Esta configuración solo es necesaria en situaciones en las que tiene varias direcciones para una computadora y necesita forzar ROS a una en particular.

Con la excepción de 'localhost', no afecta la dirección enlazada real ya que los componentes ROS se enlazan a todas las interfaces de red disponibles. Si el valor se establece en localhost, el componente ROS se vinculará solo a la interfaz de bucle invertido. Esto evitará que los componentes remotos puedan comunicarse con su componente local.

ROS_NAMESPACE

ROS_NAMESPACE le permite "bajar recursivamente" un nodo en un espacio de nombres. Todos los nombres del nodo se resolverán en relación con este valor, incluidos los nombres reasignados.

ROSCONSOLE_CONFIG_FILE

Esta es una variable de entorno específica de roscpp. rosconsole le permite definir su propio archivo de configuración que será utilizado por log4cxx, definido por la variable de entorno ROSCONSOLE_CONFIG_FILE. Cualquier cosa definida en este archivo de configuración anulará el archivo de configuración predeterminado.

Vea http://ros.org/doc/api/rosconsole/html/index.html para mas información.

Formato de salida de la consola

rosconsole le permite especificar cómo le gustaría que se muestre su salida en la salida de la consola a través de la variable de entorno ROSCONSOLE_FORMAT. El valor predeterminado es equivalente a:

export ROSCONSOLE_FORMAT='[${severity}] [${time}]: ${message}'

Vea http://ros.org/doc/api/rosconsole/html/index.html para obtener más información sobre este paquete en general. Puede ver la lista de cadenas de formato analizadasen el código fuente.

ROS_PYTHON_LOG_CONFIG_FILE

Esto es específico de rospy, rosmaster, roslaunch y rostest. Para estas herramientas, puede definir su propio archivo de configuración logging de Python para usar en lugar del archivo de configuración predeterminado, que se almacena en $ ROS_ROOT/config/python_logging.conf.

Para mas informacion, vea la documentación de Python correspondiente a logging:

http://docs.python.org/library/logging.html

Variables de compilado de entorno del sistema

Para comprender mejor estas variables de entorno, consulte la sección sobre Sistema de compilado ROS.

ROS_BOOST_ROOT

ROS_BOOST_ROOT es una variable de entorno opcional que le permite anular dónde buscar impulso. Si ROS_BOOST_ROOT no está configurado, por defecto usa ROS_BINDEPS_PATH

ROS_PARALLEL_JOBS

El valor de esta variable, si se establece, se pasa a "make" al compilar paquetes. La idea es permitirle explotar al máximo una máquina multiprocesador. Por ejemplo, si tiene 8 procesadores / núcleos y desea ejecutar tantos trabajos en paralelo como sea posible, siempre que la carga del sistema sea inferior a 8, al limitar los trabajos a 8, evita que se sobrepasen en el momento del inicio:

export ROS_PARALLEL_JOBS='-j8 -l8'

Alternativamente, puede usar la marca -j con un argumento para ejecutar hasta 8 trabajos en paralelo, independientemente de la carga del sistema:

export ROS_PARALLEL_JOBS=-j8

Recomendamos 'encarecidamente' usar la marca -l para establecer un límite de paralelismo dependiente de la carga del sistema. El paralelismo excesivo en una construcción grande puede agotar la memoria del sistema.

Qué carga del sistema es aceptable para usted depende de cuántos núcleos tenga: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages

Entonces 8 podría ser adecuado para una máquina con 8 núcleos.

ROS_LANG_DISABLE

Una lista de nombres de paquetes separados por dos puntos para generadores de mensajes / bibliotecas cliente que deben deshabilitarse. La generación de mensajes no ocurrirá para los idiomas de esta lista.

Para paquetes compilados con 'catkin' , debe enumerar los nombres de los generadores de mensajes que deben ignorarse, por ejemplo:

export ROS_LANG_DISABLE=genlisp

Para los paquetes compilados con 'rosbuild' necesita enumerar los nombres de los generadores de mensajes así como las bibliotecas cliente que deben ignorarse, por ejemplo:

export ROS_LANG_DISABLE=genlisp:roslisp

Al ignorar los generadores de mensajes con rosbuild, el paso de configuración de CMake mostrará una advertencia de que la biblioteca cliente (por ejemplo, roslisp) no es un generador de mensajes conocido. Esta advertencia se puede ignorar con seguridad.

Tenga en cuenta que antes de deshabilitar un idioma, primero debe estar muy seguro de que ninguno de los códigos que está utilizando requiere los enlaces de ese idioma.

ROS_OS_OVERRIDE

Formato: "OS_NAME:OS_VERSION_STRING:OS_CODENAME" Forzara la deteccion de Ubuntu Bionic:

export ROS_OS_OVERRIDE=ubuntu:18.04:bionic

Si se define, esto anulará la detección automática de un sistema operativo. Esto puede ser útil al depurar dependencias de rosdep en plataformas extrañas o ajenas, cuando las plataformas son realmente muy similares y podrían necesitar ser forzadas o, por supuesto, si la autodetección falla.

Wiki: es/ROS/VariablesDelEntorno (last edited 2021-10-28 21:02:28 by Matias Bavera)