launch icon indicating copy to clipboard operation
launch copied to clipboard

XML: Allow setting environment variables to promote include reuse

Open Ryanf55 opened this issue 9 months ago • 1 comments

Description

I frequently write meta-package launch files that re-use launch files, but I want to set environment variables in the included node(s). You can't do that.

Motivation

When using FastDDS, for certain situations, we like to change environment variables for our XML profiles to use a different profile. This is useful when we do things like data replay.

Design / Implementation Considerations

N/A

Additional Information

Here is a rough idea of what I would like to do, where you have a standard "base" package launch file .

base.launch.xml

<?xml version="1.0"?>
<launch>
  <arg name="config_file" default="$(find-pkg-share base)/config/MyCustomConfig.json"/>
  <node pkg="base" exec="BaseNode" output="screen">
      <param name="config_file" type="str" value="$(var config_file)"/>
  </node>
</launch>

Then, a meta_package launch file that runs the BaseNode from above, but also sets some environment variables for it. meta_package.launch.xml

<launch>
  <include file="$(find-pkg-share base)/launch/base.launch.xml">
    <arg name="config_file" value="$(var visnav_config_file)"/>
    <env name="FASTRTPS_DEFAULT_PROFILES_FILE" value="$(find-pkg-share meta_package)/config/fastdds.xml"/>
    <env name="RMW_FASTRTPS_USE_QOS_FROM_XML" value="1"/> 
  </include> 
</launch>

Currently, if you want to set an environment variable, you have to set it in the OS environment, rather than just applying just to the node of interest.

Instead of including a file, if include had more granularity, to say, include a node by name, then perhaps we can apply the environment variable that way.

To solve this problem today, we make heavy use of docker containers, one per node, but this requires a rebuild every time we change the node.

Ryanf55 avatar Apr 06 '25 00:04 Ryanf55