URML composition draft over ROS-Industrial drivers: does the manifest match?

Hi ROS-Industrial maintainers (especially @mrobinson and @gavanderhoorn),

My team and I are working on URML (Universal Robot Language), a small
Apache 2.0 intent-level spec that composes over existing robotics
stacks rather than replacing them. The composition pattern lives in
urml_ros2_runtime.RclpyAdapter, the substrate engine delegated to
by every brand adapter. The reference industrial-arm runtime ships
sixteen first-class brand adapters, ABB, FANUC, KUKA, YASKAWA,
Universal Robots, Franka, Kawasaki, Stäubli, Comau, Mitsubishi, Denso,
Hyundai, Nachi, Epson, Omron, Hanwha, each composing RclpyAdapter
rather than re-implementing MoveIt 2 / control_msgs plumbing. Spec
and code: https://urml.dev and GitHub - URML-MARS/URML: The specification, reference runtimes, validator, LLM bridge, and conformance suite for URML — an open language for robot intent. · GitHub .

URML adds three industrial Layer-2 primitives via RFC-0013 (state:
Implemented), pick_from, place_at, swap_tool, with normative
signatures, validator Pass-2 capability checks, ROS-2 reference
executors, 40 industrial conformance fixtures, and a runnable
example. Notable design call: swap_tool rides the existing
send_docking_goal station-service mechanism rather than adding a
new substrate Protocol method (the station declares swap_tool in
its docking_stations[].services list). The adjacency to Felix
Exner’s UR motion-primitive talk at ROS-Industrial Conference 2025 is
direct.

I drafted a URML composition over the ROS-Industrial driver family,
including the brand-neutral cell manifest the composition assumes
(mirrored from URML’s in-repo industrial_cell.yaml fixture), the
runnable RFC-0013 example, and a composition diagram showing where
URML sits between MES (OPC UA Robotics north-bound) and the drivers
(ROS 2 south-bound). Packet here: URML composition draft over the ROS-Industrial driver family, bounded technical artifact for ros-industrial. URML: https://github.com/URML-MARS/URML (Phase 0, Apache 2.0) · GitHub

Three questions specifically:

  1. Manifest match. Does the manifest’s shape, frames.cell as
    root, declared_locations for stations, manipulation.grippers[]. force_max_n, docking_stations[].services declaring swap_tool, match how abb_robot_driver, motoman_driver, and the Franka
    stack actually expose cell capability today? @gavanderhoorn’s long
    history with the ABB driver is the right calibration here.

  2. Composition cut. Is composing RclpyAdapter per-brand the right
    cut, or are we encoding an assumption (frame names, action names,
    lifecycle semantics) that doesn’t hold across your sixteen-brand
    ecosystem? The diagram in the packet shows the cut explicitly. UR
    motion-primitives at ROS-I 2025 is the natural reference adjacency.

  3. Layering with OPC UA Robotics. RFC-0013 sketches both ROS 2 and
    OPC UA substrate implementations for each industrial primitive.
    The 2018 ros-industrial-consortium/articles/ros_with_opc-ua.md
    precedent and the still-live OPC UA Companion Specification
    Robotics Discourse thread (where @gavanderhoorn participated)
    suggest the consortium has historically engaged OPC UA Robotics
    rather than displaced it. Where would a URML intent layer sitting
    above a ROS-Industrial driver and below an MES talking OPC UA
    Robotics be useful, or where would it be the wrong abstraction?

On what’s working and what isn’t yet. URML’s ROS 2 reference runtime
is green on recorded gazebo-e2e runs (TurtleBot 4 + Nav2 + Gazebo);
evidence ledger:
URML/docs/launch/claims-audit.md at main · URML-MARS/URML · GitHub .
The audit’s honesty section is the source-of-truth on which workflow
runs are green. The sixteen industrial-arm brand adapters are on main,
hermetically unit-tested, and exercised through the conformance runner
on 40 industrial fixtures against MockROSAdapter. No live ROS-I-driver
hardware run yet; first run on each brand’s real driver is a
calibration run by design. RFC-0013 has ROS 2 executors; the OPC UA
implementations in the substrate sketches are not coded yet.

URML is not a competing standard. It is an intent layer above
your drivers, complementary to OPC UA Robotics for north-bound
MES/SCADA. The “yet-another-standard” critique is one we want to hear
if the framing does not actually hold, that’s the question this
thread is asking.

URML is Phase 0 and there’s no commercial program. We’ll want
ecosystem governance participation eventually, and ROS-Industrial
Consortium is one of the natural participants. For this thread
specifically
the useful thing is your technical critique above;
that’s how we earn the right to ask for more.

Thanks,
Ido (greenvh@gmail.com)