One sentence moves a robot. One program moves a fleet, in sync.
The next step past "one English sentence makes a robot move" is a single program commanding several heterogeneous robots at once: name each one, address it, combine and synchronize their work, and have the validator reject a cross-robot collision before any actuator engages. No single vendor SDK does this across vendors.
A courier-to-arm handoff.
A mobile base brings a tray to a shared dock; a stationary arm picks a widget and places it on a conveyor; the courier leaves only after the arm has cleared. Two heterogeneous robots, one job neither can do alone.
Three reasons, each a real removal of work or risk.
One language, not N SDKs.
Choreographing a mobile base and an industrial arm today means two vendor SDKs plus hand-rolled timing. A roster and one program replace it: one validator, one synchronizer.
Cross-robot safety, before anything moves.
The validator rejects two robots sent into the same place at the same instant, statically. No single vendor SDK can catch this, because no single SDK sees both robots.
Substrate-fungible orchestration.
Replace a member's robot and the choreography is unchanged. Only the roster entry changes. 'Universal' made concrete across vendors.
Four cross-robot checks the validator runs before anything moves.
An `on:` or `barrier:` names a robot the roster does not declare.
A command is scoped to a member whose manifest cannot do it.
Two robots are driven to the same location at once with no barrier.
A barrier synchronizes a member that declares no peer link.
The third (two robots into the same place at the same instant) is the collision class no single vendor SDK can catch, because no single SDK sees both robots. That is the moat URML's validator extends from one robot to a fleet.
The reference slice is shipped and tested. Some of it is named as future work.
- The cross-robot validator (validate_fleet) and its four checks
- The reference FleetRuntime: hermetic, no ROS, any OS
- A conformance lane: one positive, four negatives
- A runnable demo: python examples/fleet/run_demo.py
- Collision is by declared-location name today; geometric volume overlap is future.
- A barrier is statically checked; an executed concurrency-hazard scenario is future.
- Building-scale fleet traffic (lift queues, aisle reservation) composes with Open-RMF, not URML.
- A dedicated multi-robot LLM-bridge prompt mode is a follow-on.
Claim your robot's fleet name.
The lightest way into the URML world, lighter than building an adapter. Publish a small, self-declared manifest and your robot's name becomes a handle any fleet program can address. No code. One YAML file you write and own.
- A name a fleet program can address. Opt-in, de-listable any time.
- Self-declared by you. We never list a product its maker hasn't published.
- Not an endorsement, in either direction.
- Not a certification or compatibility mark.
- Not a partnership. A claim is a claim, nothing more.