Robot Ontology Framework — machine-readable robot specification for LLM agents
Project description
roboonto
A toolchain that turns robot vendor materials (URDF, SDK, manuals) into a queryable, agent-ready ontology — and ships first-party ontologies for specific robots.
Docs: Quickstart · Specification · MCP integration · Agent-Readiness Levels · Capability layer · Data sources
vendor materials ──► [ roboonto importers ] ──► YAML ontology ──► [ api ] ──► your agent / runtime
▲ ▲
│ │
log/mcap ──► [ ingestor ] ──► [ diagnostics ]
What you get
- A tool (this repo): importers, an ontology API, a log ingestor, and reference diagnostics.
- Packs (under
robots/): per-robot ontologies. AgiBot X2 ships v0.3.0.
Status
| Version | v0.3.0 capability layer |
| Robots covered | AgiBot X2 · Unitree G1 EDU · HalfCheetah (sim) |
| Pack grades | X2 customer-ready 100/100 · G1 customer-ready 100/100 (ARL-3) |
| X2 pack contents | 256 objects · 22 actions · 403 links · 11 capabilities |
| X2 3D atlas | robots/agibot_x2/roboonto_pack_3d.html |
| Tests | 107 |
| Python | 3.10+ |
Install
git clone https://github.com/zengury/roboonto
cd roboonto
pip install -e .
Optional, for log ingestion:
pip install pyyaml mcap mcap-ros2-support
Use
Query an ontology
from roboonto.api.loader import OntologyLoader
from roboonto.api.query import Query
ontology = OntologyLoader("robots/agibot_x2").load()
q = Query(ontology)
# What joints are in the left arm?
for j in q.objects_of_type("Joint"):
if j["id"].startswith("agibot_x2.kin.joint.left_arm"):
print(j["id"], j["properties"]["effort_limit"])
# What actions are allowed in LOCOMOTION_DEFAULT?
for a in q.actions_allowed_in_mode("LOCOMOTION_DEFAULT"):
print(a["type_id"], a.get("safety_class"))
# What can the robot do, and how should an agent call it?
for affordance in q.agent_affordance_menu(capability_kind="navigation"):
print(affordance["name"], [a["id"] for a in affordance["actions"]])
Capability-first agent queries
python3 -m roboonto.cli query robots/agibot_x2 agent-affordances navigation
python3 -m roboonto.cli query robots/agibot_x2 service-fit agibot_x2.req.safe_base_motion
python3 -m roboonto.cli infer-capabilities robots/agibot_x2 --yaml
The capability layer separates what the robot can do from how to call it:
SoftwareComponent / Sensor
-> provides_capability -> Capability
-> exposed_via -> Topic / Service / Action
-> satisfies_requirement -> ServiceRequirement
Standards alignment
RoboOnto keeps its engineering YAML format, but the v0.3 capability layer includes explicit mappings to robotics ontology standards:
- IEEE 1872.2 / AuR: anchors robot autonomy concepts such as autonomous capability, task, autonomous system, and environment.
- IEEE 1872.1 / CORA: anchors core robotics terms for robot, actuator, sensor, and related physical entities.
- RoSO: anchors service-oriented concepts such as component, function, sensing, actuation, and parameters.
These mappings live in each pack's standard_mappings.yaml and in object-level standard_mappings fields where useful. They are used as vocabulary anchors for agents and tools, while RoboOnto remains the operational schema for loading, querying, validation, CLI, MCP, and 3D visualization.
3D ontology atlas
Open robots/agibot_x2/roboonto_pack_3d.html in a browser to inspect the X2 ontology interactively. The atlas version is synced with the package version (v0.3.0) and supports:
Graphmode for the whole relation network.Layeredmode for hardware / compute / interface / action / capability / requirement paths.- Node search, node explanations, incoming/outgoing relation inspection, and one-hop navigation.
Validate an action call
from roboonto.api.action_validator import ActionValidator
v = ActionValidator(ontology)
report = v.check(
"set_forward_velocity",
params={"forward_velocity": 0.05, "source": "test"},
state={"mc_action": "LOCOMOTION_DEFAULT", "is_moving": False,
"registered_input_sources": ["test"]},
)
# report.failures explains why precondition fails
Ingest a session log
python3 -m roboonto.tools.log_ingestor \
/path/to/session_dir \
--robot agibot_x2 \
--output ./output \
-v
Reads bag/, info/, log/ subdirs. Handles .mcap, .atop, .log, .yaml, .json. Produces session.summary.json + coverage.report.md + stats.json.
Layout
roboonto/
├── roboonto/ tool code
│ ├── core/ meta-schema (defines what an ontology is)
│ ├── api/ loader · query · action validator
│ ├── importers/ URDF · SDK docs · ...
│ └── tools/ log ingestor + readers (mcap, atop)
├── robots/ ontology packs
│ └── agibot_x2/ hardware · kinematics · capabilities · interfaces · behaviors · events · actions · derived_links
├── skills/ operational knowledge (universal · humanoid · instance)
├── docs/ spec · quickstart · MCP · ARL · quality methodology
├── examples/ quickstart scripts
└── tests/
Design
The repo separates two things deliberately:
- archive (under
robots/): YAML files describing what a robot is. Per-robot. Versioned independently. - engine (under
roboonto/): Python code that loads, queries, validates, ingests. Robot-agnostic.
Source provenance is mandatory. Every ontology object carries a source field: document (with locator), urdf_import, log_observation (with confidence + diff_status), or aimrt_introspect. Mixed-source claims are explicit, not hidden.
For a deeper dive: docs/SPEC.md, docs/ONTOLOGY_QUALITY_METHODOLOGY.md.
Roadmap
- v0.4 — ACL (Agent Compliance Level) conformance harness · sim readiness profile · diagnostics engine MVP
- v0.5 — pack registry · third robot pack
- v1.0 — web dashboard · CLI completeness
License
Code and schema: Apache-2.0. Robot packs contain factual specifications extracted from publicly available vendor materials — see SOURCES.md for per-pack provenance and the correction policy.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file roboonto-0.3.0.tar.gz.
File metadata
- Download URL: roboonto-0.3.0.tar.gz
- Upload date:
- Size: 89.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87c0d6dc8317127772e643dc4918d534010bd29a491c271efeeaf3b85672e00e
|
|
| MD5 |
8f2427b35aac00a39c53508f1c982e6f
|
|
| BLAKE2b-256 |
128a1b2da8f1f6c2b3a3e82ac2404a26c714b7ba58400680f9f6b4ca9d4cd5c3
|
File details
Details for the file roboonto-0.3.0-py3-none-any.whl.
File metadata
- Download URL: roboonto-0.3.0-py3-none-any.whl
- Upload date:
- Size: 87.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b6d2bdf5169d1a3fecdc5efa1ab136e0dbff29d2803125facbc6ced2a44bb4d
|
|
| MD5 |
a2a9e14b80544ba4c488e7b6c1596786
|
|
| BLAKE2b-256 |
1cdf1daf8c2310b034473a9cdb2568926810d0ee8c5287b457de5035e5a4be16
|