Skip to main content

Robola MJCF Editor Local Bridge - Local Python Library for MuJoCo and Online Web mjcf editing

Project description

Robola – Local MuJoCo Runtime Companion

RobolaPyLib powers the local runtime that feeds the Robola Web Editor:

  • Load and validate MuJoCo MJCF scenes on your own machine
  • Stream geometry/material/joint data to the browser in real time
  • Expose a WebSocket API for simulation control, saving, and asset transfer

✅ Use the online editor at https://www.robolaweb.com/editor. The website never touches your disk—the CLI in this repo loads every file locally and only streams the data you approve.


Installation

From PyPI (recommended)

pip install robola

From source (development)

git clone https://github.com/robola-dev/robola.git
cd robola
pip install -e .

Prerequisites:

  • Python 3.10 or later
  • MuJoCo 3.3+ (and its license/key environment variables configured if required)

5-Minute Quickstart

  1. Prepare a model – keep an *.xml MJCF file handy (for example ./robots/spot.xml).
  2. Start the local server
    robola serve ./robots/spot.xml 
    
    or create mjcf from --new:
    robola serve ./robot.xml --new
    
    • Serves WebSocket traffic on ws://localhost:9527
    • The terminal banner confirms that the runtime is up
  3. Open the online editor – visit https://www.robolaweb.com/editor and sign in.
  4. Connect to the runtime – enter 9527 in the “WebSocket Port” field (top-right) and click Connect.
  5. Model, simulate, iterate
    • The editor fetches the local model and renders the scene
    • You can inspect/edit bodies, joints, materials, etc.
    • Start/pause/stop simulations or save back to disk from the browser

📌 Keep the CLI process running while the browser tab is open so the editor can stream frames and send commands.


Example Models

You can use MJCF models from the MuJoCo Menagerie as examples. Clone the repository and serve any .xml file:

git clone https://github.com/google-deepmind/mujoco_menagerie.git
cd mujoco_menagerie
robola serve ./google_robot/scene.xml 

Then connect to the Robola Web Editor at https://www.robolaweb.com/editor using port 9527.


CLI Usage

# Load a model with the default port (9527)
robola serve /path/to/model.xml

# Bootstrap a blank scene and launch the server (path is created from the built-in template before serving)
robola serve /path/to/new_scene.xml --new

# Use a custom port
robola serve /path/to/model.xml --port 9000

# Restrict CORS origins (production)
robola serve /path/to/model.xml --origin https://robolaweb.com

# Tune streaming rate and logging
robola serve /path/to/model.xml --fps 30

Common Options

Option Description Default
--port WebSocket listening port 9527
--fps Simulation streaming rate (1–60 Hz) 30
--new Create the specified MJCF path with the built-in template before serving (fails if the file already exists) false

Embedding via Python

from robola import serve

serve(
    mjcf_path="path/to/model.xml",
    port=9527,
    fps=30,
)

Call serve() inside a notebook, a script, or your own application to reuse the same local WebSocket protocol that the CLI exposes.


Troubleshooting

Symptom Likely cause Fix
“Unable to connect” in the editor Port/origin mismatch Ensure the CLI --port and --origin match the values entered in the editor
Simulation crashes on start Missing meshes/textures referenced by MJCF Check the terminal logs and verify every asset path is valid relative to the MJCF file
Saving fails File not writable Confirm the XML can be written and that the CLI is still running

⚠️ Current limitation: Robola does not support MuJoCo Flex (soft bodies) or height-field (hfield) based terrain rendering yet. These assets will be ignored/omitted when streaming to the editor.


License

MIT License. PRs and issues are welcome—help more roboticists build faster with Robola. 🤖🚀

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

robola-0.2.4.tar.gz (34.8 kB view details)

Uploaded Source

Built Distribution

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

robola-0.2.4-py3-none-any.whl (37.1 kB view details)

Uploaded Python 3

File details

Details for the file robola-0.2.4.tar.gz.

File metadata

  • Download URL: robola-0.2.4.tar.gz
  • Upload date:
  • Size: 34.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for robola-0.2.4.tar.gz
Algorithm Hash digest
SHA256 01a28cb052e3cf839d10e0566eaf0480b767cd5afbf85238161f52740357827f
MD5 67149e23b08897e9aa4c60f6fe3a93d8
BLAKE2b-256 0e54341951e0db7c1663792c82607a6f3d24b5931d0b2e254145d9abd4f06d19

See more details on using hashes here.

File details

Details for the file robola-0.2.4-py3-none-any.whl.

File metadata

  • Download URL: robola-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 37.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for robola-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 a3d3d7c6ecb79860d5c4eeb6d42fe9734aab19351bfa0bf57b8ab540dd049b43
MD5 90edda68f3b70e2cb91c559e9ef67a62
BLAKE2b-256 744d088f174023376faf939458f65c81414f675a7f4c4995419b91d4217cd5b8

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