dora-rs node that simulates OpenArm bimanual robot in MuJoCo
Project description
dora-openarm-mujoco
MuJoCo simulation node for the OpenArm bimanual robot, designed to run inside a dora-rs dataflow.
It replaces the physical follower arms and cameras: it accepts joint-position commands and publishes arm observations and JPEG camera frames at the same interface as the real hardware.
Installation
uv sync
Quick start
A self-contained dummy dataflow is included for testing without real hardware. It wires a dummy leader node to the MuJoCo sim and records to disk.
uv run dora build dataflow-dummy.yaml --uv
uv run dora run dataflow-dummy.yaml
Dataflow configuration
Minimal (headless and position forwarding only no cameras)
- id: openarm-mujoco
build: pip install -e .
path: dora-openarm-mujoco
inputs:
position_right: leader/follower_position_right
position_left: leader/follower_position_left
outputs:
- status
- arm_right_observation
- arm_left_observation
Full (interactive viewer + all cameras, with contacts, can be used for vr teleoperation)
- id: openarm-mujoco
build: pip install -e .
path: dora-openarm-mujoco
args: "--viewer --render --enable-collision --ctrl --keyframe home"
inputs:
position_right: leader/follower_position_right
position_left: leader/follower_position_left
outputs:
- status
- arm_right_observation
- arm_left_observation
- camera_wrist_right
- camera_wrist_left
- camera_head_left
- camera_head_right
- camera_ceiling
Inputs
| ID | Type | Description |
|---|---|---|
position_right |
float32[8] |
Target joint positions for the right arm: joints 1–7 then the gripper. ~500 Hz. |
position_left |
float32[8] |
Same layout for the left arm. |
pose_right |
float32[7] |
VR controller pose [x, y, z, qw, qx, qy, qz]. Used only with --debug-frames. |
pose_left |
float32[7] |
Same for the left controller. |
Outputs
| ID | Type | Description |
|---|---|---|
arm_right_observation |
float32[8] |
Observed joint positions, published per incoming command. |
arm_left_observation |
float32[8] |
Same for the left arm. |
camera_wrist_right |
uint8[N] |
JPEG frame, ~30 Hz. Requires --render. |
camera_wrist_left |
uint8[N] |
JPEG frame, ~30 Hz. Requires --render. |
camera_head_left |
uint8[N] |
JPEG frame, ~30 Hz. Requires --render. |
camera_head_right |
uint8[N] |
JPEG frame, ~30 Hz. Requires --render. |
camera_ceiling |
uint8[N] |
JPEG frame, ~30 Hz. Requires --render. |
Camera outputs carry metadata={"encoding": "jpeg"}.
Arguments
Pass these via the args: field in the dataflow YAML, or directly on the command line.
| Argument | Default | Description |
|---|---|---|
--xml PATH |
unset | MJCF scene file to load. Overrides --scene when set. |
--scene NAME |
cell |
Bundled scene to load when --xml is not set. Choices: cell, demo, pedestal, bimanual. |
--keyframe NAME |
home |
Keyframe in the MJCF to reset to on startup. |
--enable-collision |
off | Enable contact/collision detection. Disabled by default to avoid unexpected joint-locking during teleoperation. |
--ctrl |
off | Write incoming positions to data.ctrl and step the physics (mj_step) to simulate actuator control. The default writes directly to data.qpos with mj_forward. |
--viewer |
off | Open the interactive MuJoCo viewer window. Requires a display. |
--render |
off | Enable offscreen camera rendering and publish JPEG frames. Leave off if cameras are not needed. |
--debug-frames |
off | Draw VR controller poses as coloured arrows in the viewer. Only visible with --viewer. |
License
Licensed under the Apache License 2.0. See LICENSE for details.
Copyright 2026 Enactic, Inc.
Code of Conduct
All participation in the OpenArm project is governed by our Code of Conduct.
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
File details
Details for the file dora_openarm_mujoco-0.1.0.tar.gz.
File metadata
- Download URL: dora_openarm_mujoco-0.1.0.tar.gz
- Upload date:
- Size: 14.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c2f21786f14e77f613cd6325d8dc1f8863c253a43632e97ab85457de7244317
|
|
| MD5 |
47ec04f1894ca5d7c6594c194068a93f
|
|
| BLAKE2b-256 |
82e62c9bc8001b58221cedb4637006813f0e477ece9d6e3e82f59ba9886d720b
|
Provenance
The following attestation bundles were made for dora_openarm_mujoco-0.1.0.tar.gz:
Publisher:
package.yaml on enactic/dora-openarm-mujoco
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dora_openarm_mujoco-0.1.0.tar.gz -
Subject digest:
2c2f21786f14e77f613cd6325d8dc1f8863c253a43632e97ab85457de7244317 - Sigstore transparency entry: 1714516847
- Sigstore integration time:
-
Permalink:
enactic/dora-openarm-mujoco@32a4b114b2b9a3829579f6aa5f78e7a5e6efc053 -
Branch / Tag:
refs/tags/0.1.0 - Owner: https://github.com/enactic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
package.yaml@32a4b114b2b9a3829579f6aa5f78e7a5e6efc053 -
Trigger Event:
push
-
Statement type: