ROS 2 / Robotics-Config / Behavior-Tree DSLs Family Index


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 DSLslaunch.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-controlsibling 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-devopscolcon build orchestration, CMakeLists.txt with ament_cmake macros, rosdep YAML.
  • 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

FormatFirst appearedOriginTypeStatus (2026)URL
ROS 2 launch.py2018 (ROS 2 Bouncy)Open Robotics / OSRFPython-internal imperative DSL; LaunchDescription returned from generate_launch_description()Active and dominant; the de facto launch authoring choice in 2026https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Creating-Launch-Files.html
ROS 2 launch.xml2019Open RoboticsDeclarative XML frontend to the same LaunchDescription runtimeActive, preferred by teams porting from ROS 1’s roslaunchhttps://docs.ros.org/en/jazzy/How-To-Guides/Launch-file-different-formats.html
ROS 2 launch.yaml2019Open RoboticsYAML frontend to LaunchDescriptionActive but niche; rarely chosen over .py or .xmlhttps://docs.ros.org/en/jazzy/How-To-Guides/Launch-file-different-formats.html
ROS 2 parameter YAML2018Open RoboticsYAML node-parameter files; loaded via --ros-args --params-fileActive, ubiquitoushttps://docs.ros.org/en/jazzy/Concepts/Basic/About-Parameters.html
package.xml (REP-149 format 3)2017 (ROS 2) / format 3 finalised 2019Open Robotics (REP-149)XML package manifest — build/exec/test/doc deps, license, maintainersActive; format 3 universal in Jazzy/Kilted/Lyricalhttps://ros.org/reps/rep-0149.html
CMakeLists.txt + ament_cmake2018Open RoboticsCMake macros layered on standard CMake; ament_target_dependencies, ament_export_*Active and dominant; ament_cmake is the standard build system for C++ ROS 2 packageshttps://design.ros2.org/articles/ament.html
colcon meta-build YAML2018Open Robotics (replaces catkin_tools)Meta-build orchestrator; colcon.meta YAML defines per-package overridesActive and dominant; the standard ROS 2 build CLIhttps://colcon.readthedocs.io/
rosdep YAML (rosdistro)2010 (ROS 1) / ported 2018Open RoboticsSystem-dependency mapping; YAML keys map ROS package names to apt/dnf/brew/pip packages per platformActive, indispensablehttps://docs.ros.org/en/independent/api/rosdep/html/
bloom release.yaml2013Open RoboticsROS package release tracking; YAML in the rosdistro repo records released versions per distroActive, used for every ROS package releasehttps://github.com/ros-infrastructure/bloom

Tier 3 family table — Behavior trees

FormatFirst appearedOriginTypeStatus (2026)URL
BehaviorTree.CPP (BT XML)2018 (initial), v3 2020, v4 2022, current 4.9.0Davide Faconti / Aurynrobotics (MIT)C++17 BT runtime + XML schema; ports, blackboards, scripting expressions, async actionsVery active, dominant; 4.9.0 the current release in 2026https://www.behaviortree.dev/
Groot 22022 (Groot 1 → Groot 2 with BT.CPP 4.0 compat); 1.9.0 Feb 2026BehaviorTree project (Faconti)Qt-based visual IDE for BT XML; live debugging, recording, free + Pro tiersActive, the canonical BT editorhttps://www.behaviortree.dev/groot/
Nav2 BT XML2020 (Nav2 GA)Steve Macenski et al. / Open RoboticsNav2-specific BT XML dialect using BT.CPP; ships ~15 navigation behaviors (FollowPath, ComputePathToPose, Recovery, etc.)Active, the standard mobile-nav orchestration layerhttps://docs.nav2.org/behavior_trees/index.html
PyTrees2014Daniel StonierPure-Python BT framework; introspectable, blackboards, snapshot visualisationActive, maintenance-mode but stablehttps://py-trees.readthedocs.io/
PyTrees-ROS2017Daniel StonierROS-aware wrapper around PyTrees (publishers, action clients as leaves)Active, niche; less common than BT.CPP in productionhttps://py-trees-ros.readthedocs.io/

Tier 3 family table — Motion planning / control

FormatFirst appearedOriginTypeStatus (2026)URL
MoveIt 2 SRDF2011 (ROS 1 MoveIt) / ported 2020 (MoveIt 2)Willow Garage → PickNik RoboticsXML “Semantic Robot Description Format” layered on URDF — planning groups, end-effectors, virtual joints, disable_collisions pairsActive, mandatory for any MoveIt 2 setuphttps://moveit.picknik.ai/main/doc/concepts/urdf_srdf.html
MoveIt 2 ompl_planning.yaml2014 (ROS 1) / ported 2020OMPL (Kavraki Lab, Rice) + MoveItYAML configuring OMPL planner instances (RRTConnect, PRM, BIT*) per planning groupActive, ubiquitoushttps://moveit.picknik.ai/main/doc/concepts/planning_scene.html
MoveIt 2 collision_check / kinematics.yaml2014 / 2020MoveIt projectYAML for FCL-vs-Bullet collision checking, IK solver selection (KDL/TRAC-IK/IKFast/PickIK), boundsActivehttps://moveit.picknik.ai/main/doc/examples/kinematics_configuration/kinematics_configuration_tutorial.html
ros2_control YAML2020ROS 2 control WGController-manager + hardware-interface configuration; declarative joint command/state interfaces and controller chainingActive, the standard control-stack config; Kilted/Jazzy/Lyrical builds documentedhttps://control.ros.org/

Tier 3 family table — Recording / visualization / messages

FormatFirst appearedOriginTypeStatus (2026)URL
rosbag2 (SQLite3 storage)2020Open RoboticsNative ROS 2 bag format; SQLite3 row-per-message, schema in companion metadata.yamlActive, the default rosbag2 storage pluginhttps://github.com/ros2/rosbag2
rosbag2 MCAP storage plugin2022Foxglove + Open RoboticsMCAP-backed rosbag2 storage; available as rosbag2_storage_mcap and shipping default in newer distrosActive and rapidly displacing SQLite3 as the default in 2025–2026https://github.com/ros-tooling/rosbag2_storage_mcap
MCAP file format2022 (v0.0.1) / stable sinceFoxglove (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 specActive, the de facto cross-stack robotics recording format; “if you record an MCAP today, you can read it forever” forward-compat contracthttps://mcap.dev/
Foxglove Studio layout JSON2021FoxgloveJSON layout files for the cross-platform visualization tool (replaces RViz for many web/remote use cases)Active, widely usedhttps://docs.foxglove.dev/docs/visualization/layouts
rosbridge JSON-WS protocol2012 (ROS 1) / ROS 2 port 2020Robot Web Tools (Brown / Willow Garage origin)WebSocket JSON encoding of ROS topics/services for browser/JS clientsActive, the standard web-bridgehttps://github.com/RobotWebTools/rosbridge_suite
ROS 2 IDL (.msg / .srv / .action)2017 (ROS 2 Ardent)Open RoboticsCustom IDL for messages/services/actions; code-generated to C/C++/Python; backed by OMG IDL underneathActive, the fundamental ROS 2 interface description languagehttps://docs.ros.org/en/jazzy/Concepts/Basic/About-Interfaces.html

Tier 3 family table — Middleware / cross-listed

FormatFirst appearedOriginTypeStatus (2026)URL
Eclipse Zenoh + rmw_zenoh2022 (Zenoh 0.7) / rmw_zenoh GA Jazzy 2024ZettaScale Technology (originally ADLINK)Pub/sub + query protocol; ROS 2 RMW implementation via rmw_zenoh, plus DDS-bridging via zenoh-plugin-ros2ddsActive, the principal non-DDS RMW in ROS 2 Jazzy/Kilted/Lyrical; the two paths (RMW vs DDS-bridge) are not interoperablehttps://zenoh.io/
Gazebo SDF (Simulation Description Format)2012Open Robotics / Open Source Robotics FoundationXML scene+world+model description; superset of URDF for simulationActive; also catalogued in robotics-controlhttp://sdformat.org/
Webots PROTO2000sCyberbotics / EPFLWebots simulator’s scene+robot prototyping languageActive (open-sourced 2018); also in robotics-controlhttps://cyberbotics.com/doc/reference/proto
Drake URDF / MultibodyPlant config2017+ (Drake open-sourced)Toyota Research Institute / MIT (Russ Tedrake)Drake’s URDF dialect + YAML for MultibodyPlant scene config; tighter math-rigorous semantics than Gazebo URDFActive, research-and-industry; cross-pollinates with ROS 2 via drake_roshttps://drake.mit.edu/
Isaac Sim / NVIDIA Isaac (USD)2019 (Isaac SDK) / 2022 (Isaac Sim on USD)NVIDIAPixar USD scenes + Omniverse assets for GPU-accelerated robot simulation; Isaac ROS packages plug into ROS 2 nodesActive, growing AV/manipulation sharehttps://nvidia-isaac-ros.github.io/
micro-ROS2020eProsima + Bosch + FIWARE FoundationROS 2 client for 32-bit MCUs (≥32 kB RAM); runs on FreeRTOS, Zephyr, ESP-IDF, NuttX, Azure RTOSActive, the official embedded ROS 2 toolkit; Jazzy + Kilted lines trackedhttps://micro.ros.org/

Tier 3 family table — Drone / embedded autopilot

FormatFirst appearedOriginTypeStatus (2026)URL
PX4 parameter files~2013ETH Zurich (Lorenz Meier) → PX4 Autopilot project (Dronecode / Linux Foundation)Per-airframe parameter YAML / SD-card persistent param storage; loaded into the autopilot at bootActive; PX4 v1.16 current (released 2025); v1.17-rc2 targeted June 2026https://docs.px4.io/main/en/advanced_config/parameters_and_configurations.html
ArduPilot parameter files2010DIY Drones / ArduPilot project.parm text files; key=value lines for full vehicle config; Mission Planner / MAVProxy load them via MAVLink PARAM protocolActive, large hobbyist + commercial install basehttps://ardupilot.org/copter/docs/parameters.html
uORB topic definitions (PX4)2012PX4 / Lorenz MeierPub/sub message definitions internal to PX4 (*.msg files in msg/); code-generated to C structs at build timeActive, the PX4 internal middleware substratehttps://docs.px4.io/main/en/middleware/uorb.html
MAVLink message format (.xml dialects)2009Lorenz Meier (ETH) → MAVLink WG / DronecodeXML 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 formatsActive and universal; the de facto ground-station ↔ autopilot protocolhttps://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; rosdistro YAML 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.py dominates 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.xml survives in teams porting from ROS 1’s roslaunch; launch.yaml is 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 rosbag2 as 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_zenoh reached 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) and zenoh-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