Skip to content

Config Merging

When a launch file includes other packages, DendROS automatically merges their dendROS.yaml configs at runtime.


How it works

ros2 launch my_bringup main.launch.py
ros2 launch my_bringup main.launch.py │ ├── my_bringup/config/dendROS.yaml ← primary (wins conflicts) ├── nav2_bringup/config/dendROS.yaml ← merged in └── slam_toolbox/config/dendROS.yaml ← merged in

When ros2 launch is intercepted, DendROS:

  1. Parses the launch file for package references.
  2. Locates each referenced package's dendROS.yaml via ros2 pkg prefix or AMENT_PREFIX_PATH.
  3. Merges all configs — the primary package wins any node-name conflicts.
  4. Processes output with the merged config.

Merge depth

Config merging is one level deep only — packages included by included packages are not recursively scanned (for the time being).


Supported formats

get_package_share_directory('nav2_bringup')
FindPackageShare('slam_toolbox')
<include file="$(find-pkg-share nav2_bringup)/launch/bringup.launch.py"/>

Conflict resolution

When the same node name appears in multiple configs, the primary package's definition wins. Among secondaries, the first one found in parse order wins.


Toggling

Config merging is on by default. To disable:

dendros config   # navigate to "Config merge" → off

Or per-package:

defaults:
  config_merge: false