Esta página describe el formato XML utilizado para los archivos roslaunch .launch. Para obtener información sobre roslaunch, su funcionalidad y las herramientas relacionadas, consulte primero la página roslaunch.

Orden de evaluación

roslaunch evalúa el archivo XML en una sola pasada. Las inclusiones se procesan en orden transversal en profundidad. Las etiquetas se evalúan en serie y la última configuración gana. Por lo tanto, si hay varias configuraciones de un parámetro, se utilizará el último valor especificado para el parámetro.

Confiar en el comportamiento de anulación puede resultar riesgoso. No hay garantía de que una anulación se especifique correctamente (por ejemplo, si se cambia el nombre de un parámetro en un archivo incluido). En su lugar, se recomienda que el comportamiento de anulación se realice usando la configuración $(arg)/<arg>.

Argumentos de sustitución (substitution args)

Los atributos de etiqueta de Roslaunch pueden hacer uso de "argumentos de sustitución", que roslaunch resolverá antes de lanzar los nodos. Los argumentos de sustitución admitidos actualmente son:

  • $(env ENVIRONMENT_VARIABLE)

    • Sustituye el valor de una variable del entorno actual. El lanzamiento fallará si no se establece la variable de entorno. Este valor no puede ser reemplazado por etiquetas <env>.

  • $(optenv ENVIRONMENT_VARIABLE) $(optenv ENVIRONMENT_VARIABLE default_value)

    • Sustituye el valor de una variable de entorno si está establecida. Si se proporciona default_value (valor predeterminado), se utilizará si la variable de entorno no está configurada. Si no se proporciona default_value, se utilizará una cadena vacía. default_value puede ser varias palabras separadas por espacios.

    • Ejemplos:
    •   <param name="foo" value="$(optenv NUM_CPUS 1)" />
        <param name="foo" value="$(optenv CONFIG_PATH /home/marvin/ros_workspace)" />
        <param name="foo" value="$(optenv VARIABLE ros rocks)" />
  • $(find pkg)

    • p.ej. $(find rospy)/manifest.xml. Especifica una "ruta relativa al paquete". La ruta del sistema de archivos al directorio del paquete se sustituirá en línea. Se recomienda encarecidamente el uso de rutas relativas a paquetes, ya que las rutas codificadas inhiben la portabilidad de la configuración de lanzamiento. Las barras inclinadas hacia adelante y hacia atrás se resolverán según la convención del sistema de archivos local.

  • $(anon name)

    • p.ej. $(anon rviz-1).Genera una identificación anónima basada en name. name en sí mismo es un identificador único: múltiples usos de $(anon foo) crearán el mismo name "anonimizado". Esto se usa para los atributos <node> name con el fin de crear nodes con name anónimos, ya que ROS requiere que los nodos tengan nombres únicos. Por ejemplo:

      •   <node name="$(anon foo)" pkg="rospy_tutorials" type="talker.py" />
          <node name="$(anon foo)" pkg="rospy_tutorials" type="talker.py" />
    • Generará un error de que hay dos <node> s con el mismo nombre.

  • $(arg foo)

    • $(arg foo) evalúa el valor especificado por una etiqueta <arg>. Debe haber una etiqueta <arg> correspondiente en el mismo archivo de launch que declara el argumento arg.

    • Por ejemplo:
        <param name="foo" value="$(arg my_foo)" />
    • Asignará el argumento my_foo al parámetro foo .

    • Otro ejemplo:
      <node name="add_two_ints_server" pkg="beginner_tutorials" type="add_two_ints_server" />
      <node name="add_two_ints_client" pkg="beginner_tutorials" type="add_two_ints_client" args="$(arg a) $(arg b)" />

      Lanzará tanto el servidor como el cliente desde el <add_two_ints>ejemplo, pasando como parámetros el valor a y b. El proyecto de lanzamiento resultante se puede llamar de la siguiente manera:

      roslaunch beginner_tutorials launch_file.launch a:=1 b:=5

    $(eval <expression>) New in Kinetic

    • $(eval <expression>) permite evaluar expresiones de Python complejas arbitrarias.

    • Por ejemplo:
      <param name="circumference" value="$(eval 2.* 3.1415 * arg('radius'))"/>
    • Calculará la circunferencia a partir del argumento "radio" y asignará el resultado a un parámetro apropiado.
    • Nota: Como limitación, las expresiones $ (eval) deben abarcar toda la cadena de atributos. Una mezcla de otros argumentos de sustitución con eval dentro de una sola cadena no es posible:

      <param name="foo" value="$(arg foo)$(eval 6*7)bar"/>

Para remediar esta limitación, todos los comandos de sustitución también están disponibles como funciones dentro de eval:

  • "$(eval arg('foo') + env('PATH') + 'bar' + find('pkg')"

. Para su comodidad, los argumentos también se resuelven implícitamente, es decir, las dos expresiones siguientes son idénticas:

  • "$(eval arg('foo'))"
    "$(eval foo)"
  • $(dirname) New in Lunar

    • $(dirname) devuelve la ruta absoluta al directorio del archivo launch en el que aparece. Esto se puede usar junto con eval y if/unless para modificar el comportamiento en función de la ruta de instalación, o simplemente como una conveniencia para hacer referencia a los archivos launch o yaml relativos al archivo actual en lugar de a un raíz del paquete (como con $(find PKG)).

      • Por ejemplo:
      <include file="$(dirname)/other.launch" />
    • Esperará encontrar other.launch en el mismo directorio que el archivo launch en el que aparece.

Los argumentos de sustitución se resuelven actualmente en la máquina local. En otras palabras, las variables de entorno y las rutas de los paquetes ROS se establecerán en sus valores en su entorno actual, incluso para los procesos iniciados de forma remota.

Atributos if (si) y unless (a menos que)

Todas las etiquetas que incluyen o excluyen una etiqueta que evalúa un valor, admiten los atributos if y unless. "1" y "verdadero" se consideran valores verdaderos. "0" y "falso" se consideran valores falsos. Otros valores serán erróneos.

  • if=value (opcional)

    • Si value se evalúa como verdadero, incluya la etiqueta y su contenido.

  • unless=value (opcional)

    • A menos que value se evalúe como verdadero (lo que significa que si value se evalúa como falso), incluya la etiqueta y su contenido. Ejemplo:

  • <group if="$(arg foo)">
      <!-- stuff that will only be evaluated if foo is true -->
    </group>
    
    <param name="foo" value="bar" unless="$(arg foo)" />  <!-- This param won't be set when "unless" condition is met -->

Etiquetas Referencias

Ejemplo .launch XML Config Files

NOTA: por convención, los archivos XML roslaunch se nombran con la extensión .launch, p. ej. ejemplo.launch.

Ejemplo Mínimo

El siguiente ejemplo muestra un script de configuración en su mínima expresión. Lanza un solo nodo 'talker' (hablador), que es parte del paquete 'rospy_tutorials'. Este nodo se iniciará en la máquina local utilizando el entorno ROS configurado actualmente (es decir, ROS_ROOT, etc.).

<launch>
  <node name="talker" pkg="rospy_tutorials" type="talker" />
</launch>

Ejemplo más avanzado

<launch>
  <!-- local machine already has a definition by default.
       This tag overrides the default definition with
       specific ROS_ROOT and ROS_PACKAGE_PATH values -->
  <machine name="local_alt" address="localhost" default="true" ros-root="/u/user/ros/ros/" ros-package-path="/u/user/ros/ros-pkg" />
  <!-- a basic listener node -->
  <node name="listener-1" pkg="rospy_tutorials" type="listener" />
  <!-- pass args to the listener node -->
  <node name="listener-2" pkg="rospy_tutorials" type="listener" args="-foo arg2" />
  <!-- a respawn-able listener node -->
  <node name="listener-3" pkg="rospy_tutorials" type="listener" respawn="true" />
  <!-- start listener node in the 'wg1' namespace -->
  <node ns="wg1" name="listener-wg1" pkg="rospy_tutorials" type="listener" respawn="true" />
  <!-- start a group of nodes in the 'wg2' namespace -->
  <group ns="wg2">
    <!-- remap applies to all future statements in this scope. -->
    <remap from="chatter" to="hello"/>
    <node pkg="rospy_tutorials" type="listener" name="listener" args="--test" respawn="true" />
    <node pkg="rospy_tutorials" type="talker" name="talker">
      <!-- set a private parameter for the node -->
      <param name="talker_1_param" value="a value" />
      <!-- nodes can have their own remap args -->
      <remap from="chatter" to="hello-1"/>
      <!-- you can set environment variables for a node -->
      <env name="ENV_EXAMPLE" value="some value" />
    </node>
  </group>
</launch>

Configurando parámetros

También puede establecer parámetros en el Parameter Server. Estos parámetros se almacenarán en el servidor de parámetros (parameter server) antes de que se inicien los nodos.

Puede omitir el atributo type si el valor no es ambiguo. Los tipos admitidos son str, int, double, bool. También puede especificar el contenido de un archivo utilizando los atributos textfile o binfile.

Ejemplo:

<launch>
  <param name="somestring1" value="bar" />
  <!-- force to string instead of integer -->
  <param name="somestring2" value="10" type="str" />

  <param name="someinteger1" value="1" type="int" />
  <param name="someinteger2" value="2" />

  <param name="somefloat1" value="3.14159" type="double" />
  <param name="somefloat2" value="3.0" />

  <!-- you can set parameters in child namespaces -->
  <param name="wg/childparam" value="a child namespace parameter" />

  <!-- upload the contents of a file to the server -->
  <param name="configfile" textfile="$(find roslaunch)/example.xml" />
  <!-- upload the contents of a file as base64 binary to the server -->
  <param name="binaryfile" binfile="$(find roslaunch)/example.xml" />

</launch>

Wiki: es/roslaunch/XML (last edited 2021-09-02 20:33:06 by JuanEduardoRiva)