User

This page describes the XML format used for roslaunch.launch files. For background on roslaunch, its functionality, and related tools, please consult the roslaunch page first.

Evaluation order

roslaunch evaluates the XML file in a single pass. Includes are processed in depth-first traversal order. Tags are evaluated serially and the last setting wins. Thus, if there are multiple settings of a parameter, the last value specified for the parameter will be used.

Relying on the override behavior can be brittle. There is no guarantee that an override is specified correctly (e.g. if a parameter name is changed in an included file). Instead, it is recommended that override behavior be done using $(arg)/<arg> settings.

substitution args

Roslaunch tag attributes can make use of substitution args, which roslaunch will resolve prior to launching nodes. The currently supported substitution args are:

$(env ENVIRONMENT_VARIABLE)

Substitute the value of a variable from the current environment. The launch will fail if environment variable is not set. This value cannot be overridden by <env> tags.

Substitute the value of an environment variable if it is set. If default_value is provided, it will be used if the environment variable is not set. If default_value is not provided, an empty string will be used. default_value can be multiple words separated by spaces.

e.g. $(find rospy)/manifest.xml. Specifies a package-relative path. The filesystem path to the package directory will be substituted inline. Use of package-relative paths is highly encouraged as hard-coded paths inhibit the portability of the launch configuration. Forward and backwards slashes will be resolved to the local filesystem convention.

$(anon name)

e.g. $(anon rviz-1). Generates an anonymous id based on name. name itself is a unique identifier: multiple uses of $(anon foo) will create the same "anonymized" name. This is used for <node> name attributes in order to create nodes with anonymous names, as ROS requires nodes to have unique names. For example:

will compute the circumference from the radius argument and assign the result to an appropriate parameter.

Note: As a limitation, $(eval) expressions need to span the whole attribute string. A mixture of other substitution args with eval within a single string is not possible:

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

To remedy this limitation, all substitution commands are available as functions withineval as well:

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

For your convnience, arguments are also implicitly resolved, i.e. the following two expressions are identical:

"$(eval arg('foo'))"
"$(eval foo)"

Substitution args are currently resolved on the local machine. In other words, environment variables and ROS package paths will be set to their values in your current environment, even for remotely launched processes.

if and unless attributes

All tags support if and unless attributes, which include or exclude a tag based on the evaluation of a value. "1" and "true" are considered true values. "0" and "false" are considered false values. Other values will error.

if=value (optional)

If value evaluates to true, include tag and its contents.

unless=value (optional)

Unless value evaluates to false, include tag and its contents.

Example

<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 -->

Tag Reference

Example .launch XML Config Files

NOTE: by convention, the roslaunch XML files are named with the extension .launch, e.g. example.launch.

Minimal Example

The following example shows a minimal launch configuration script. It launches a single 'talker' node, which is part of the 'rospy_tutorials' package. This node will launch on the local machine using the currently configured ROS environment (i.e. ROS_ROOT, etc...).