-
Notifications
You must be signed in to change notification settings - Fork 158
Description
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.