Skip to main content

A Rerun data loader for MJCF (MuJoCo XML) files

Project description

rerun-loader-mjcf

CI

A Rerun external data loader for MJCF (MuJoCo XML) files.

https://github.com/user-attachments/assets/a9f95ed6-1441-4ce0-bef8-c3fb1e720d56

Simulating fourier_n1 and boston_dynamics_spot from mujoco_menagerie:

uv run rerun-loader-mjcf --simulate mujoco_menagerie/fourier_n1/scene.xml
uv run rerun-loader-mjcf --simulate mujoco_menagerie/boston_dynamics_spot/scene.xml

https://github.com/user-attachments/assets/36aab5aa-134f-49a3-92d4-efb6b61e9354

Loading all robots from mujoco_menagerie

Installation

pip install rerun-loader-mjcf

Usage

CLI

rerun-loader-mjcf robot.xml

To run a real-time simulation loop:

rerun-loader-mjcf robot.xml --simulate

Or run directly without installing:

uvx rerun-loader-mjcf robot.xml

Python API

import mujoco
import rerun as rr
import rerun_loader_mjcf

model = mujoco.MjModel.from_xml_path("robot.xml")
data = mujoco.MjData(model)

rr.init("mjcf_viewer", spawn=True)
logger = rerun_loader_mjcf.MJCFLogger(model)

rr.set_time("frame", sequence=0)
logger.log_model()

data.qpos[0] += 0.5
mujoco.mj_forward(model, data)

rr.set_time("frame", sequence=1)
logger.log_data(data)

Options

logger = rerun_loader_mjcf.MJCFLogger(
    model,
    entity_path_prefix="robot",  # Prefix for all entity paths
    opacity=0.5,                 # Transparency (0.0 to 1.0)
    log_collision=True,          # Log collision geometries (default: False)
)

When log_collision=True, collision geometries are logged to a separate entity path ({prefix}/collision_geometries/) which can be toggled in the Rerun viewer.

To log collision geometries but hide them by default:

import rerun.blueprint as rrb

logger = rerun_loader_mjcf.MJCFLogger(model, log_collision=True)
rr.set_time("sim_time", duration=0.0)
logger.log_model()

blueprint = rrb.Spatial3DView(
    overrides={logger.paths.collision_root: rrb.EntityBehavior(visible=False)}
)
rr.send_blueprint(blueprint)

Dynamic Body Colors

You can change body colors during simulation (e.g., for highlighting):

# Set a body to red
logger.set_body_color(body_id=5, rgba=[1.0, 0.0, 0.0, 1.0])

# Reset to original color
logger.reset_body_color(body_id=5)

# Reset with custom opacity
logger.reset_body_color(body_id=5, opacity=0.5)

Recording Simulations

For efficient batch recording of simulations, use MJCFRecorder:

import mujoco
import rerun as rr
import rerun_loader_mjcf

model = mujoco.MjModel.from_xml_path("robot.xml")
data = mujoco.MjData(model)

rr.init("simulation", spawn=True)

logger = rerun_loader_mjcf.MJCFLogger(model)
rr.set_time("sim_time", duration=0.0)
logger.log_model()

# With simulation time (default: uses duration=data.time)
with rerun_loader_mjcf.MJCFRecorder(logger) as recorder:
    while data.time < 5.0:
        mujoco.mj_step(model, data)
        recorder.record(data)

# With explicit sequence index
with rerun_loader_mjcf.MJCFRecorder(logger, timeline_name="frame") as recorder:
    for i in range(1000):
        mujoco.mj_step(model, data)
        recorder.record(data, sequence=i)

# With explicit timestamp
with rerun_loader_mjcf.MJCFRecorder(logger, timeline_name="sim_time") as recorder:
    while data.time < 5.0:
        mujoco.mj_step(model, data)
        recorder.record(data, timestamp=data.time)

Lint

uv run pre-commit run -a

Credits

Inspired by rerun-loader-python-example-urdf.

What's Next

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

rerun_loader_mjcf-1.0.0.tar.gz (11.2 kB view details)

Uploaded Source

Built Distribution

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

rerun_loader_mjcf-1.0.0-py3-none-any.whl (12.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: rerun_loader_mjcf-1.0.0.tar.gz
  • Upload date:
  • Size: 11.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for rerun_loader_mjcf-1.0.0.tar.gz
Algorithm Hash digest
SHA256 54f10c32e6877e2ec0ae97e30360e34fcc88c99386466f7155a9cc39c5b240e1
MD5 ab18b794366e831c483e90e2aa748f32
BLAKE2b-256 0b576683c618e1a65fc7af388e89e7c35853dc7391963876561d1fbbb0a8960b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rerun_loader_mjcf-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 12.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for rerun_loader_mjcf-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d8641f1ca676068643dcc6f9fb27745f2f057b0da8718d161205bf274854f6b1
MD5 5209c61d4e86c441f1f413659dc583e3
BLAKE2b-256 4fff7c6b8fcabe93dccd4ef6ef556e9696b999dc3c22e5b27f46dc5f8affe33b

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