ROS 2 / Robotics-Config / Behavior-Tree DSLs Family Index
type: language-family-index family: ros2-robotics-config languages_catalogued: 27 tags: [language-reference, family-index, ros2-robotics-config, ros2, moveit, nav2, behavior-trees, mavlink, mcap, zenoh, px4, ardupilot]
ROS 2 / Behavior-Tree / Robotics-Config — Family Index
Family overview
This family covers the modern open-source robotics middleware-and-config DSL stack — the layer that sits on top of the kinematic description formats (URDF, SDF, MJCF, OpenSCENARIO) catalogued in robotics-control and underneath the host languages (C++, Python) that actually run the nodes. Roughly: ROS 2’s distribution and tooling, MoveIt 2 + Nav2 + ros2_control configs, behavior-tree XML, MCAP/rosbag2 recording, drone autopilot parameter files (PX4, ArduPilot, MAVLink, uORB), and emerging middleware alternatives (Eclipse Zenoh, micro-ROS). Together these are not a single language but a coordinated federation of YAML, XML, custom-IDL, and Python-internal DSLs that every ROS 2 deployment threads together.
ROS 2 itself was the 2017–2022 rewrite of ROS 1 onto a DDS-based, real-time-friendly middleware (initially exclusively DDS via several vendor RMW implementations — eProsima Fast DDS, RTI Connext, Eclipse Cyclone DDS — and as of ROS 2 Jazzy / Kilted also Zenoh via the rmw_zenoh implementation). The launch system was redesigned around a trio of equivalent DSLs — launch.py (Python imperative, the de facto winner), launch.xml, and launch.yaml — all targeting the same LaunchDescription runtime. The release cadence is annual every May; Lyrical Luth is the 2026 LTS (codename “lyrical”, May 2026 distro freeze, 5-year support), succeeding Kilted Kaiju (May 2025, 18-month non-LTS) and Jazzy Jalisco (May 2024, the previous 5-year LTS).
Above the middleware sit two large config-driven ecosystems: MoveIt 2 (manipulation, semantic robot description via SRDF, OMPL/STOMP planner configs in YAML, collision-check parameters) and Nav2 (mobile navigation, with Behavior Trees as the canonical task-orchestration substrate). Behavior trees are the dominant story of the 2020s in robotics — Davide Faconti’s BehaviorTree.CPP (currently 4.9.0, MIT, the C++17 reference implementation) plus the Groot 2 visual editor (1.9.0, Feb 2026) have effectively replaced finite-state-machine frameworks (SMACH, FlexBE) as the default. Nav2’s own BT XML dialect, Python’s PyTrees/PyTrees-ROS, and BT.CPP all share the same conceptual core (composite/decorator/leaf nodes, blackboards, tick-based execution) with subtly different XML schemas.
Parallel to ROS 2 lives the drone-autopilot ecosystem: PX4 (currently v1.16, with v1.17 in RC for June 2026) and ArduPilot, both built on uORB (PX4’s lightweight pub/sub topic system) and MAVLink (the universal ground-station ↔ vehicle protocol — XML-defined messages, XMLSchema-validated, code-generated for C/C++/Python/Rust). The two ecosystems converge through Mission Planner / QGroundControl on the ground side, and increasingly through micro-ROS (ROS 2 client running on FreeRTOS/Zephyr/ESP-IDF microcontrollers, default embedded toolkit for ROS 2). Finally, MCAP (Foxglove, 2022+) has decisively displaced rosbag1’s SQLite-backed format as the cross-platform, schema-embedded, forward-compatible recording container — adopted by Foxglove Studio, ROS 2’s rosbag2 (alongside its native SQLite3 storage), Autoware, and most AV-stack vendors.
In our deep library
None of the DSLs in this family have standalone Tier 1/2 deep-library notes — they all sit on top of host languages and config substrates.
Cross-reference:
- robotics-control — sibling family covering URDF, SDF, MJCF, SCXML, OpenSCENARIO, Webots PROTO, and robot-vendor scripting (Universal Robots URScript, KUKA KRL, ABB RAPID, FANUC TP). Gazebo SDF and Webots PROTO are catalogued there but are cross-listed below.
- aerospace-defence — DDS itself (the underlying middleware), ARINC, MIL-STD-1553. Shares the DDS substrate with ROS 2.
- automotive-onvehicle — AUTOSAR ARXML, CAN DBC, FIBEX, ODX. Different domain but overlapping AV-sim tooling (Autoware uses MCAP + Nav2-adjacent components).
- build-devops —
colconbuild orchestration,CMakeLists.txtwithament_cmakemacros,rosdepYAML. - embedded-firmware — micro-ROS targets, Zephyr / FreeRTOS / ESP-IDF substrate.
- config-and-dsl — general YAML/XML config DSL family.
- cpp — host for
rclcpp, BehaviorTree.CPP, MoveIt 2 core, Nav2 core. - python — host for
rclpy, the launch-DSL Python frontend, PyTrees, MAVSDK-Python, PX4 ROS bridge tooling.
Tier 3 family table — ROS 2 launch & config
| Format | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
| ROS 2 launch.py | 2018 (ROS 2 Bouncy) | Open Robotics / OSRF | Python-internal imperative DSL; LaunchDescription returned from generate_launch_description() | Active and dominant; the de facto launch authoring choice in 2026 | https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Creating-Launch-Files.html |
| ROS 2 launch.xml | 2019 | Open Robotics | Declarative XML frontend to the same LaunchDescription runtime | Active, preferred by teams porting from ROS 1’s roslaunch | https://docs.ros.org/en/jazzy/How-To-Guides/Launch-file-different-formats.html |
| ROS 2 launch.yaml | 2019 | Open Robotics | YAML frontend to LaunchDescription | Active but niche; rarely chosen over .py or .xml | https://docs.ros.org/en/jazzy/How-To-Guides/Launch-file-different-formats.html |
| ROS 2 parameter YAML | 2018 | Open Robotics | YAML node-parameter files; loaded via --ros-args --params-file | Active, ubiquitous | https://docs.ros.org/en/jazzy/Concepts/Basic/About-Parameters.html |
| package.xml (REP-149 format 3) | 2017 (ROS 2) / format 3 finalised 2019 | Open Robotics (REP-149) | XML package manifest — build/exec/test/doc deps, license, maintainers | Active; format 3 universal in Jazzy/Kilted/Lyrical | https://ros.org/reps/rep-0149.html |
CMakeLists.txt + ament_cmake | 2018 | Open Robotics | CMake macros layered on standard CMake; ament_target_dependencies, ament_export_* | Active and dominant; ament_cmake is the standard build system for C++ ROS 2 packages | https://design.ros2.org/articles/ament.html |
| colcon meta-build YAML | 2018 | Open Robotics (replaces catkin_tools) | Meta-build orchestrator; colcon.meta YAML defines per-package overrides | Active and dominant; the standard ROS 2 build CLI | https://colcon.readthedocs.io/ |
| rosdep YAML (rosdistro) | 2010 (ROS 1) / ported 2018 | Open Robotics | System-dependency mapping; YAML keys map ROS package names to apt/dnf/brew/pip packages per platform | Active, indispensable | https://docs.ros.org/en/independent/api/rosdep/html/ |
| bloom release.yaml | 2013 | Open Robotics | ROS package release tracking; YAML in the rosdistro repo records released versions per distro | Active, used for every ROS package release | https://github.com/ros-infrastructure/bloom |
Tier 3 family table — Behavior trees
| Format | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
| BehaviorTree.CPP (BT XML) | 2018 (initial), v3 2020, v4 2022, current 4.9.0 | Davide Faconti / Aurynrobotics (MIT) | C++17 BT runtime + XML schema; ports, blackboards, scripting expressions, async actions | Very active, dominant; 4.9.0 the current release in 2026 | https://www.behaviortree.dev/ |
| Groot 2 | 2022 (Groot 1 → Groot 2 with BT.CPP 4.0 compat); 1.9.0 Feb 2026 | BehaviorTree project (Faconti) | Qt-based visual IDE for BT XML; live debugging, recording, free + Pro tiers | Active, the canonical BT editor | https://www.behaviortree.dev/groot/ |
| Nav2 BT XML | 2020 (Nav2 GA) | Steve Macenski et al. / Open Robotics | Nav2-specific BT XML dialect using BT.CPP; ships ~15 navigation behaviors (FollowPath, ComputePathToPose, Recovery, etc.) | Active, the standard mobile-nav orchestration layer | https://docs.nav2.org/behavior_trees/index.html |
| PyTrees | 2014 | Daniel Stonier | Pure-Python BT framework; introspectable, blackboards, snapshot visualisation | Active, maintenance-mode but stable | https://py-trees.readthedocs.io/ |
| PyTrees-ROS | 2017 | Daniel Stonier | ROS-aware wrapper around PyTrees (publishers, action clients as leaves) | Active, niche; less common than BT.CPP in production | https://py-trees-ros.readthedocs.io/ |
Tier 3 family table — Motion planning / control
| Format | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
| MoveIt 2 SRDF | 2011 (ROS 1 MoveIt) / ported 2020 (MoveIt 2) | Willow Garage → PickNik Robotics | XML “Semantic Robot Description Format” layered on URDF — planning groups, end-effectors, virtual joints, disable_collisions pairs | Active, mandatory for any MoveIt 2 setup | https://moveit.picknik.ai/main/doc/concepts/urdf_srdf.html |
| MoveIt 2 ompl_planning.yaml | 2014 (ROS 1) / ported 2020 | OMPL (Kavraki Lab, Rice) + MoveIt | YAML configuring OMPL planner instances (RRTConnect, PRM, BIT*) per planning group | Active, ubiquitous | https://moveit.picknik.ai/main/doc/concepts/planning_scene.html |
| MoveIt 2 collision_check / kinematics.yaml | 2014 / 2020 | MoveIt project | YAML for FCL-vs-Bullet collision checking, IK solver selection (KDL/TRAC-IK/IKFast/PickIK), bounds | Active | https://moveit.picknik.ai/main/doc/examples/kinematics_configuration/kinematics_configuration_tutorial.html |
| ros2_control YAML | 2020 | ROS 2 control WG | Controller-manager + hardware-interface configuration; declarative joint command/state interfaces and controller chaining | Active, the standard control-stack config; Kilted/Jazzy/Lyrical builds documented | https://control.ros.org/ |
Tier 3 family table — Recording / visualization / messages
| Format | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
| rosbag2 (SQLite3 storage) | 2020 | Open Robotics | Native ROS 2 bag format; SQLite3 row-per-message, schema in companion metadata.yaml | Active, the default rosbag2 storage plugin | https://github.com/ros2/rosbag2 |
| rosbag2 MCAP storage plugin | 2022 | Foxglove + Open Robotics | MCAP-backed rosbag2 storage; available as rosbag2_storage_mcap and shipping default in newer distros | Active and rapidly displacing SQLite3 as the default in 2025–2026 | https://github.com/ros-tooling/rosbag2_storage_mcap |
| MCAP file format | 2022 (v0.0.1) / stable since | Foxglove (John Hurliman, Roman Shtylman et al.) | Pub/sub container; embedded schemas, multi-encoding (ROS 1/2 msg, Protobuf, JSON, FlatBuffers), LZ4/Zstd compression, forward-compatible spec | Active, the de facto cross-stack robotics recording format; “if you record an MCAP today, you can read it forever” forward-compat contract | https://mcap.dev/ |
| Foxglove Studio layout JSON | 2021 | Foxglove | JSON layout files for the cross-platform visualization tool (replaces RViz for many web/remote use cases) | Active, widely used | https://docs.foxglove.dev/docs/visualization/layouts |
| rosbridge JSON-WS protocol | 2012 (ROS 1) / ROS 2 port 2020 | Robot Web Tools (Brown / Willow Garage origin) | WebSocket JSON encoding of ROS topics/services for browser/JS clients | Active, the standard web-bridge | https://github.com/RobotWebTools/rosbridge_suite |
| ROS 2 IDL (.msg / .srv / .action) | 2017 (ROS 2 Ardent) | Open Robotics | Custom IDL for messages/services/actions; code-generated to C/C++/Python; backed by OMG IDL underneath | Active, the fundamental ROS 2 interface description language | https://docs.ros.org/en/jazzy/Concepts/Basic/About-Interfaces.html |
Tier 3 family table — Middleware / cross-listed
| Format | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
Eclipse Zenoh + rmw_zenoh | 2022 (Zenoh 0.7) / rmw_zenoh GA Jazzy 2024 | ZettaScale Technology (originally ADLINK) | Pub/sub + query protocol; ROS 2 RMW implementation via rmw_zenoh, plus DDS-bridging via zenoh-plugin-ros2dds | Active, the principal non-DDS RMW in ROS 2 Jazzy/Kilted/Lyrical; the two paths (RMW vs DDS-bridge) are not interoperable | https://zenoh.io/ |
| Gazebo SDF (Simulation Description Format) | 2012 | Open Robotics / Open Source Robotics Foundation | XML scene+world+model description; superset of URDF for simulation | Active; also catalogued in robotics-control | http://sdformat.org/ |
| Webots PROTO | 2000s | Cyberbotics / EPFL | Webots simulator’s scene+robot prototyping language | Active (open-sourced 2018); also in robotics-control | https://cyberbotics.com/doc/reference/proto |
| Drake URDF / MultibodyPlant config | 2017+ (Drake open-sourced) | Toyota Research Institute / MIT (Russ Tedrake) | Drake’s URDF dialect + YAML for MultibodyPlant scene config; tighter math-rigorous semantics than Gazebo URDF | Active, research-and-industry; cross-pollinates with ROS 2 via drake_ros | https://drake.mit.edu/ |
| Isaac Sim / NVIDIA Isaac (USD) | 2019 (Isaac SDK) / 2022 (Isaac Sim on USD) | NVIDIA | Pixar USD scenes + Omniverse assets for GPU-accelerated robot simulation; Isaac ROS packages plug into ROS 2 nodes | Active, growing AV/manipulation share | https://nvidia-isaac-ros.github.io/ |
| micro-ROS | 2020 | eProsima + Bosch + FIWARE Foundation | ROS 2 client for 32-bit MCUs (≥32 kB RAM); runs on FreeRTOS, Zephyr, ESP-IDF, NuttX, Azure RTOS | Active, the official embedded ROS 2 toolkit; Jazzy + Kilted lines tracked | https://micro.ros.org/ |
Tier 3 family table — Drone / embedded autopilot
| Format | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
| PX4 parameter files | ~2013 | ETH Zurich (Lorenz Meier) → PX4 Autopilot project (Dronecode / Linux Foundation) | Per-airframe parameter YAML / SD-card persistent param storage; loaded into the autopilot at boot | Active; PX4 v1.16 current (released 2025); v1.17-rc2 targeted June 2026 | https://docs.px4.io/main/en/advanced_config/parameters_and_configurations.html |
| ArduPilot parameter files | 2010 | DIY Drones / ArduPilot project | .parm text files; key=value lines for full vehicle config; Mission Planner / MAVProxy load them via MAVLink PARAM protocol | Active, large hobbyist + commercial install base | https://ardupilot.org/copter/docs/parameters.html |
| uORB topic definitions (PX4) | 2012 | PX4 / Lorenz Meier | Pub/sub message definitions internal to PX4 (*.msg files in msg/); code-generated to C structs at build time | Active, the PX4 internal middleware substrate | https://docs.px4.io/main/en/middleware/uorb.html |
| MAVLink message format (.xml dialects) | 2009 | Lorenz Meier (ETH) → MAVLink WG / Dronecode | XML message-definition files (common.xml, ardupilotmega.xml, development.xml); XMLSchema-validated; code-generated to C/C++/Python/Rust/Java; v1.0 (2009), v2.0 (2017) wire formats | Active and universal; the de facto ground-station ↔ autopilot protocol | https://mavlink.io/ |
Notable threads
-
ROS 2 LTS cadence locks the ecosystem to May. Every May Open Robotics releases a new distro, with the LTS pattern of “every 3rd release is a 5-year LTS.” Recent history: Humble (May 2022, LTS), Iron (May 2023, non-LTS), Jazzy (May 2024, LTS), Kilted Kaiju (May 2025, non-LTS, 18-month support), Lyrical Luth (May 2026, LTS, 5-year support — distro freeze 2026-05-18, beta 2026-04-27). The cadence drives every package’s release plan;
rosdistroYAML and bloom release.yaml files are mass-regenerated each May. -
The launch-DSL trio: Python imperative won. ROS 2’s decision to offer three equally first-class launch DSLs (Python, XML, YAML) was a deliberate hedge. Ten years in, the verdict is clear:
launch.pydominates in production because real-world launch logic is conditional, parameter-substituting, and composition-heavy — exactly where YAML/XML are clumsy and Python is comfortable.launch.xmlsurvives in teams porting from ROS 1’sroslaunch;launch.yamlis essentially unused. -
BehaviorTree.CPP eating the FSM market. Through ~2018 robotics task orchestration ran on FSMs (SMACH, FlexBE, ROS 1 actionlib state machines). BT.CPP (v3 in 2020, v4 in 2022, 4.9.0 in 2026) plus Nav2 picking BT.CPP as Nav2’s default in 2020 catalysed a generational shift: behavior trees offer compositional reuse, deterministic tick semantics, runtime introspection (Groot 2), and clean leaf-action async boundaries that FSMs can’t match. By 2026, “FSM-vs-BT” is no longer a debate in production robotics — BT won.
-
MCAP eclipsing rosbag1 / SQLite3-rosbag2. Foxglove launched MCAP in 2022 with a hard forward-compatibility promise; by 2024 it had been adopted by ROS 2’s
rosbag2as a storage plugin (rosbag2_storage_mcap), Autoware, NVIDIA Isaac ROS, and most AV stacks. The format wins on (a) embedded schemas (you can read a 2026 MCAP file in 2031 without the original .msg files), (b) multi-serialization-format support (one bag can hold ROS, Protobuf, JSON, FlatBuffers messages on different channels), and (c) cleaner indexing for fast seek. ROS 2’s default rosbag2 storage flipped from SQLite3 to MCAP across many distributions / Foxglove-integrated deployments. -
Zenoh as the credible non-DDS alternative. ROS 2’s original “RMW is pluggable, but the implementations are all DDS vendors” stance held until Eclipse Zenoh’s
rmw_zenohreached production usability in Jazzy (2024). Zenoh’s pitch — lower discovery overhead, location-transparent routing, native WAN/IoT support — addresses the long-standing complaint that DDS is heavyweight for small-robot, cloud-bridge, and constrained-network deployments. In 2026 there are now two parallel ROS-2-on-Zenoh worlds:rmw_zenoh(Zenoh as the actual RMW) andzenoh-plugin-ros2dds(Zenoh as a bridge above DDS); they share a wire protocol but cannot interoperate at the ROS-graph level due to differing key-expression schemes. -
The drone-autopilot parallel ecosystem (PX4 vs ArduPilot, MAVLink universal). PX4 (ETH Zurich origin, BSD, v1.16 current, v1.17-rc2 targeting June 2026, Dronecode/Linux Foundation governance) and ArduPilot (GPLv3, DIY Drones origin, ardupilot.org governance) are the two dominant open-source autopilots — distinct codebases, distinct philosophies (PX4 favors NuttX + modular library architecture; ArduPilot favors monolithic compile-time configuration), but both speak MAVLink to the ground. MAVLink is the universal protocol — XML-defined messages, multi-language code generation, ground-station agnostic. The ROS 2 bridge story matured significantly via PX4-ROS 2 message translation in v1.16 and via micro-ROS for in-vehicle ROS 2 nodes on embedded autopilot companions.
-
Isaac Sim’s NVIDIA push. NVIDIA’s bet on Pixar USD as the universal scene format, combined with GPU-accelerated physics (PhysX) and synthetic data generation (Omniverse Replicator), is reshaping the simulator landscape. Isaac Sim + Isaac ROS packages now ship reference implementations for AMR navigation, manipulation, and AV that explicitly target ROS 2 Humble/Jazzy. The pressure on Gazebo (the historical Open Robotics simulator) has been visible — Gazebo’s transition to Gazebo Sim (formerly Ignition) was completed by 2023, and Harmonic LTS (2023) is the current line, with PX4 v1.16 switching its default sim to Gazebo Harmonic.
Citations
- ROS 2 Lyrical Luth release notes: https://docs.ros.org/en/rolling/Releases/Release-Lyrical-Luth.html
- ROS 2 Kilted Kaiju release announcement (May 2025): https://www.openrobotics.org/blog/2025/5/23/ros-2-kilted-kaiju-released
- ROS 2 launch documentation (Jazzy): https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Creating-Launch-Files.html
- REP-149 (package.xml format 3): https://ros.org/reps/rep-0149.html
- colcon documentation: https://colcon.readthedocs.io/
- ament_cmake design article: https://design.ros2.org/articles/ament.html
- MoveIt 2 documentation (PickNik fork): https://moveit.picknik.ai/main/
- Nav2 documentation: https://docs.nav2.org/
- Nav2 Behavior Trees: https://docs.nav2.org/behavior_trees/index.html
- BehaviorTree.CPP: https://www.behaviortree.dev/
- BehaviorTree.CPP releases (4.9.0): https://github.com/BehaviorTree/BehaviorTree.CPP/releases
- Groot 2 (1.9.0, Feb 2026): https://www.behaviortree.dev/groot/
- PyTrees: https://py-trees.readthedocs.io/
- PyTrees-ROS: https://py-trees-ros.readthedocs.io/
- ros2_control documentation: https://control.ros.org/
- rosbag2 repo: https://github.com/ros2/rosbag2
- MCAP specification: https://mcap.dev/spec
- MCAP main site: https://mcap.dev/
- Foxglove Studio docs: https://docs.foxglove.dev/
- rosbridge_suite: https://github.com/RobotWebTools/rosbridge_suite
- Eclipse Zenoh: https://zenoh.io/
- rmw_zenoh: https://github.com/ros2/rmw_zenoh
- zenoh-plugin-ros2dds: https://github.com/eclipse-zenoh/zenoh-plugin-ros2dds
- micro-ROS: https://micro.ros.org/
- Gazebo SDF: http://sdformat.org/
- Drake (TRI/MIT): https://drake.mit.edu/
- NVIDIA Isaac ROS: https://nvidia-isaac-ros.github.io/
- PX4 v1.16 release notes: https://docs.px4.io/main/en/releases/1.16
- ArduPilot documentation: https://ardupilot.org/
- MAVLink protocol: https://mavlink.io/
- uORB (PX4 middleware): https://docs.px4.io/main/en/middleware/uorb.html