Skip to content
v0.2.0 · Draft GitHub ↗ Apply for review →
↳ The specification

The spec lives on GitHub. This is your map to it.

github.com/URML-MARS/URML is the normative source of truth. Apache-2.0, DCO-signed. This page indexes the spec, gives you per-primitive code, and links you back to the file you want.

Read on GitHub → Changelog
Spec version
v0.2.0 · DRAFT

Spec is versioned per-commit. The v1.0 freeze is targeted later; see GOVERNANCE.md.
§1 · OVERVIEW

A small, opinionated language.

URML programs are YAML, a tree of intent primitives composed with sequence, branch, parallel, retry, and on_error (plus on / barrier for multi-robot fleets). The runtime translates intent into substrate calls; the validator refuses any program that cannot satisfy all five passes.

§2 · INTENT PRIMITIVES

The verb vocabulary.

core · 12 home · 2 drone · 3 industrial · 3 manipulation · 1 actuation · 1 av · 2

Every URML-compatible runtime must implement the core set. Profile extensions are optional and declared in the manifest.

move_to core
{ frame, pose? }

Move to a named frame or explicit pose. The most-called verb.

dock core
{ station }

Park at a dock or charger. Implies precision alignment.

hover core
{ duration?, station_keep? }

Maintain pose. No horizontal motion. Aerial + marine.

wait core
{ duration }

Idle for a fixed wall-clock duration.

wait_for core
{ condition, timeout? }

Block on a condition (sensor reading, perception event).

grasp core
{ target, force? }

Close end-effector around a bound target.

release core
{ surface? }

Release the held object. Optional surface placement.

detect core
{ object, frame? } -> bind

Run perception, bind a result for later steps.

scan core
{ region, sensor? }

Sweep a region with a sensor. Structured result.

measure core
{ quantity, target? }

Capture a single measurement (distance, mass, temp...).

capture core
{ media, target? }

Capture media (image, audio clip, point cloud).

report core
{ payload, channel? }

Emit a structured report on a declared channel.

speak home
{ text, voice? }

Emit audio via TTS. Home-profile extension.

listen home
{ timeout?, grammar? } -> bind

Capture audio and bind the transcription.

take_off drone
{ altitude }

Transition from grounded to flight.

land drone
{ pad? }

Transition from flight to grounded.

return_to_home drone
{}

Return to the take-off frame. Substrate-implemented.

pick_from industrial
{ source, object }

Pick a part from a declared source (RFC-0013).

place_at industrial
{ target, held }

Place a held part at a declared target (RFC-0013).

swap_tool industrial
{ tool }

Change end-effector at a tool station (RFC-0013).

bimanual manipulation
{ left, right }

Coordinate two arms in one bound action (RFC-0010).

set_output actuation
{ line, value }

Drive a declared digital/analog output line (RFC-0017).

plan_path av
{ goal, constraints? } -> bind

Compute a trajectory under the AV profile (RFC-0020).

follow_trajectory av
{ trajectory }

Execute a bound trajectory (RFC-0020).

§3 · CODE EXAMPLES

A program, a manifest, a policy.

These three files are all you need to validate and execute. The program says what; the manifest says what the robot can; the policy says what the jurisdiction allows.

View on GitHub
# program.urml.yaml: bring me the red mug sequence: - move_to: { room: kitchen } - detect: { object: red_mug, frame: kitchen } - grasp: { target: $detected } - move_to: { room: living_room } - release: { surface: side_table } # All five passes: executed against mock TurtleBot 4
§5 · CONFORMANCE SUITE

Declarative fixtures.

Any URML-compatible runtime must pass the public conformance suite. Fixtures are YAML, hermetic, and produce a machine-readable results file, the artifact you submit for listing. See conformance/CONFORMANCE_KIT.md.

home
speak / listen / room frames
drone
take_off / hover / RTH / envelope
industrial
dock / measure / report
quadruped + biped
legged / humanoid mobility
§6 · COMPATIBLE RUNTIMES

Reference adapters, more welcome.

The repo ships reference adapters across ROS 2, MAVLink, and vendor SDKs. Self-report your own by running the conformance kit and opening a PR.

ros2-runtime ✓ HERMETIC
ROS 2 · Nav2 / MoveIt 2 / vision_msgs
px4-runtime ✓ HERMETIC
PX4 / MAVLink via pymavlink (zero ROS)
industrial-arm-runtime ✓ HERMETIC
16 brands · ABB · FANUC · KUKA · YASKAWA · UR · Franka · Kawasaki · Stäubli · Comau · Mitsubishi · Denso · Hyundai · Nachi · Epson · Omron · Hanwha · (Move #1 mapping RFCs 0023–0030 filed: Yaskawa / UR / KUKA / Stäubli / Mitsubishi / FANUC / Kawasaki / Denso)
cobot-runtime ✓ HERMETIC
8 brands · UR RTDE · Franka FCI · Doosan DRFL · Techman TMflow · Kinova Kortex · Mecademic · Neura · Kassow (zero ROS)
legged / humanoid / mobile / marine ✓ HERMETIC
Spot · ANYmal · Digit · Husky · Jackal · BlueROV2
opcua-runtime ✓ HERMETIC
OPC UA Robotics via asyncua (zero ROS) · RFC-0015/0016 spec-gaps filed
mujoco-runtime / isaac-runtime ✓ HERMETIC
Physics sims · zero ROS · Isaac needs local RTX/Omniverse (not cloud)
embedded-runtime / edu-runtime ✓ HERMETIC
micro:bit · Arduino · VEX V5 · LEGO SPIKE · Thymio (RFC-0011 educational)
autosar-runtime ✓ HERMETIC
AUTOSAR Adaptive ara::com scaffold · zero ROS · RFC-0019 Draft binding
§7 · GLOSSARY

Words we use precisely.

Capability A declared ability in the manifest. The validator checks every verb against the declared set.
Envelope The active safety boundary at deployment. Geofence, altitude bands, people-occupancy zones.
Manifest YAML declaring what a robot can do and where every covered component comes from.
Policy YAML rules pass 5 evaluates the manifest against. Jurisdiction-defined.
Profile A bundle of extensions. Today: home, drone, industrial, educational, research.
Substrate What URML sits on top of. ROS 2, PX4, OPC UA. NOT part of URML.

The spec is on GitHub. The working group is here.

Read on GitHub → Open an RFC