Skip to main content

JAX-native robotics layer on top of Jaxonomy: URDF/MJCF import, calibrated actuators and sensors, system identification, whole-body control, and a layered code-as-policies API.

Project description

Jaxterity

JAX-native robotics — from a URDF to a calibrated, deployable robot model.

CI PyPI Python License: MIT


Unitree G1 — humanoid
whole-body locomotion

Crazyflie — quadrotor
differentiable flight · vmap'd swarms


SO-101 arm · uncalibrated (overshoots)  ‖  calibrated to real telemetry (settles)

Jaxterity turns a robot description (URDF/MJCF) into a differentiable simulation, calibrates that simulation against real hardware telemetry so it matches the physical machine, and carries one attested model all the way to embedded deployment. The model you tune is the model you ship — no sim-to-real model swap in the middle.

It is built on MJX (GPU/TPU MuJoCo) for articulated dynamics and on the Jaxonomy simulation engine, so every robot is a JAX program: jit-compilable, vmap-batchable, and differentiable end to end.

Why it's different

  • One model, sim to silicon. A calibrated Robot hands off to Jaxility (the deployment compiler, forthcoming) as a single artifact. You design, calibrate, and deploy the same dynamics — not a sim model and a separate shipped model that quietly disagree.
  • Calibrated to your actual unit. System identification fits the model to real telemetry — per-joint friction and damping, per-servo thermal behaviour, battery sag — so the simulation tracks the physical robot, down to the serial number. On a real SO-100/LeKiwi arm the identified plant predicts joint torque 16–45% better than the raw URDF on held-out data.
  • Differentiable through contact. Calibration, control design, and learning all run on one differentiable model. Forward-mode autodiff differentiates through MJX's joint-limit and contact solver — where naive reverse-mode cannot — so you get exact parameter sensitivities for free.
  • Predictive self-check. A per-unit digital twin forecasts off-body state a body-only physics model never sees — servo heat, bus voltage — and vetoes a command that would cook a servo or brown out the battery before it is sent, naming the binding constraint and the time to breach.
  • Attested provenance. Every calibrated model carries a content-hash attestation handle: a stable fingerprint over its structure and fitted parameters, so you can prove which model produced which controller.

What's in the box

  • Import — URDF/MJCF → a Robot with an MJX-backed differentiable model.
  • Calibrate — forward-mode system identification of inertial, friction, and actuator parameters from telemetry, with covariance and provenance.
  • Devices — calibrated actuator and sensor models (DC motor, servo, BLDC, harmonic drive, series-elastic; IMU, encoder, force/torque) you can fit and validate.
  • Control — whole-body control primitives and a layered, agent-friendly "code-as-policies" API (raw torque → skills → high-level goals).
  • Twins & safety — per-unit attested digital twins, a predictive self-check co-processor, a safety monitor (thermal / bus-voltage / torque limits), and pre-flight policy checks.
  • Zoo — ready-to-run reference robots (cartpole, SO-100/SO-101 arm, Crazyflie, Unitree G1) with import + dynamics goldens.

Where it sits

Jaxonomy            Jaxterity                       Jaxility
(simulation     →   (this library:              →   (deployment compiler,
 engine)            robotics + calibration)         Arm SoC + attestation)

Jaxterity imports Jaxonomy for the general-purpose simulation primitives (Diagram, simulate, solvers, autodiff) and never re-implements them; it adds everything robot-specific on top.

Install

pip install jaxterity            # core
pip install "jaxterity[all]"     # optional extras (render, data, MCP, …)

Or from a clone, for development:

pip install -e ".[all,dev]"      # contributors / CI

Requires Python 3.10+ and pulls in Jaxonomy (the simulation engine) from PyPI. The render/zoo helpers use MuJoCo; no GPU is required to run the examples.

Quickstart

End-to-end system identification on a real arm — examples/sysid_so101.py: load the open-source SO-101 URDF, simulate it under gentle excitation to generate telemetry, then recover unknown joint damping from that telemetry with forward-mode autodiff (differentiating through MJX's joint-limit constraint solver), and emit a calibrated, attested Robot.

pip install -e ".[mujoco]"
python -m examples.sysid_so101

The whole pipeline in one file

examples/nanojaxterity.py is the Karpathy-style end-to-end demo — top to bottom in a single readable file, no hidden machinery: load the cartpole with its committed calibration, build a fast functional MJX environment, train a small self-contained PPO agent to balance the pole, and check the result against a committed golden.

python -m examples.nanojaxterity

Deployment to embedded targets — the final leg of URDF → calibrate → train → ship — is handled downstream by Jaxility.

For a guided, visual walkthrough with MuJoCo animations, see the notebook examples/calibrate_so101.ipynb, and the tutorials index for one worked example per robot. A short mental model of how MJCF, MJX, and Jaxonomy fit together is in Jaxterity in one picture.

Maturity

1.0 covers a stable core: URDF/MJCF import, MJX-backed differentiable dynamics, forward-mode system identification, the reference zoo, the attestation handle, and the per-unit twin + predictive self-check stack — each backed by CI-green evidence in CLAIMS.md (some fit from real hardware telemetry).

Some subsystems are still filling in and are best treated as preview: the full whole-body-control stack (the primitives are here; the contact scheduler is not complete), the turnkey sysid-recipe catalogue, and complete actuator/sensor family coverage. Embedded deployment is owned by Jaxility, not this repo. Each of these is written down in KNOWN_GAPS.md, kept symmetric with the claims ledger. Read both before depending on a surface.

Development

bash scripts/check.sh   # ruff lint + format, mypy, pytest

License

MIT — see LICENSE.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jaxterity-1.0.0.tar.gz (263.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jaxterity-1.0.0-py3-none-any.whl (321.8 kB view details)

Uploaded Python 3

File details

Details for the file jaxterity-1.0.0.tar.gz.

File metadata

  • Download URL: jaxterity-1.0.0.tar.gz
  • Upload date:
  • Size: 263.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for jaxterity-1.0.0.tar.gz
Algorithm Hash digest
SHA256 92464daacdd7968e11ca5e2be3f7a30244c1c88a7ced07baaa3bc4f9324d6648
MD5 cdd893e4318fba7a455979567c45c502
BLAKE2b-256 3f7925ba6f01f734f50acb665a80d574f5af86e854f2419f102eab751d3e6bd1

See more details on using hashes here.

File details

Details for the file jaxterity-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: jaxterity-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 321.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for jaxterity-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fd45dbca2f0891ebc39370978e5a66da473cc66282fc0a82b0ac08454915100b
MD5 b648d977c76ee205d4b0ecb82023bbd5
BLAKE2b-256 a9db886b06862b0495e25e6ba0304ea1403fab7ee89908bbf7939fb097a6103e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page