URML's intent layer composes over 16 ROS-Industrial drivers without replacing them
A new Apache 2.0 spec adds pick/place/swap primitives across ABB, FANUC, KUKA, and more.
URML (Universal Robot Language) is a new Apache 2.0 intent-level specification designed to sit atop existing robotics stacks rather than replace them. Its composition pattern lives in urml_ros2_runtime.RclpyAdapter, a substrate engine delegated to by each brand adapter. The reference industrial-arm runtime ships 16 first-class brand adapters — ABB, FANUC, KUKA, YASKAWA, Universal Robots, Franka, Kawasaki, Stäubli, Comau, Mitsubishi, Denso, Hyundai, Nachi, Epson, Omron, Hanwha — all composing RclpyAdapter instead of re-implementing MoveIt 2 or control_msgs plumbing. RFC-0013 (state: Implemented) adds three industrial Layer-2 primitives: pick_from, place_at, and swap_tool, with normative signatures, validator checks, ROS 2 reference executors, and 40 conformance fixtures. Notably, swap_tool rides the existing send_docking_goal station-service mechanism rather than adding a new substrate Protocol method.
The draft raises three key questions for ROS-Industrial maintainers. First, does the manifest shape (frames.cell root, declared_locations, manipulation.grippers[].force_max_n, docking_stations[].services) match how abb_robot_driver, motoman_driver, and Franka stacks expose capabilities today? Second, is composing RclpyAdapter per-brand the right cut, given the differences across sixteen brands in frame names, action names, and lifecycle semantics? Third, how should URML layer with OPC UA Robotics for north-bound MES/SCADA — where would an intent layer between ROS-Industrial drivers and OPC UA be useful, and where would it be wrong? Currently the ROS 2 reference runtime is green on gazebo-e2e runs (TurtleBot 4 + Nav2 + Gazebo), and all 16 brand adapters are unit-tested against a MockROSAdapter, but no live hardware runs have been performed yet. URML is Phase 0, Apache 2.0, and explicitly not a competing standard.
- URML provides 16 brand adapters (ABB, FANUC, KUKA, etc.) sharing a single RclpyAdapter substrate instead of re-implementing MoveIt 2.
- RFC-0013 implements three industrial primitives (pick_from, place_at, swap_tool) with 40 conformance fixtures and ROS 2 reference executors.
- Open questions: manifest compatibility with existing drivers, per-brand composition cut, and layering with OPC UA Robotics for MES/SCADA.
Why It Matters
URML could unify intent-level programming across diverse robot brands without requiring driver rewrites, simplifying industrial automation stacks.