{"id":50429900,"url":"https://github.com/enactic/dora-openarm-mujoco","last_synced_at":"2026-05-31T13:30:28.383Z","repository":{"id":358876100,"uuid":"1239559093","full_name":"enactic/dora-openarm-mujoco","owner":"enactic","description":"dora-rs node that simulate OpenArm bimanual robot in MuJoCo","archived":false,"fork":false,"pushed_at":"2026-05-27T02:40:54.000Z","size":409,"stargazers_count":0,"open_issues_count":2,"forks_count":6,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-27T04:24:05.372Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/enactic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-15T07:57:02.000Z","updated_at":"2026-05-27T02:40:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/enactic/dora-openarm-mujoco","commit_stats":null,"previous_names":["enactic/dora-openarm-mujoco"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/enactic/dora-openarm-mujoco","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fdora-openarm-mujoco","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fdora-openarm-mujoco/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fdora-openarm-mujoco/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fdora-openarm-mujoco/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enactic","download_url":"https://codeload.github.com/enactic/dora-openarm-mujoco/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fdora-openarm-mujoco/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33733754,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-31T13:30:27.712Z","updated_at":"2026-05-31T13:30:28.376Z","avatar_url":"https://github.com/enactic.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dora-openarm-mujoco\n\nMuJoCo simulation node for the [OpenArm](https://github.com/enactic/openarm_mujoco) bimanual robot, designed to run inside a [dora-rs](https://github.com/dora-rs/dora) dataflow.\n\nIt 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.\n\n## Installation\n\n```bash\nuv sync\n```\n\n## Quick start\n\nA self-contained dummy dataflow is included for testing without real hardware.\nIt wires a dummy leader node to the MuJoCo sim and records to disk.\n\n```bash\nuv run dora build dataflow-dummy.yaml --uv\nuv run dora run dataflow-dummy.yaml\n```\n\n![Example](media/example.png)\n\n## Dataflow configuration\n\n### Minimal (headless and position forwarding only no cameras)\n\n```yaml\n- id: openarm-mujoco\n  build: pip install -e .\n  path: dora-openarm-mujoco\n  inputs:\n    position_right: leader/follower_position_right\n    position_left:  leader/follower_position_left\n  outputs:\n    - status\n    - arm_right_observation\n    - arm_left_observation\n```\n\n### Full (interactive viewer + all cameras, with contacts, can be used for vr teleoperation)\n\n```yaml\n- id: openarm-mujoco\n  build: pip install -e .\n  path: dora-openarm-mujoco\n  args: \"--viewer --render --enable-collision --ctrl --keyframe home\"\n  inputs:\n    position_right: leader/follower_position_right\n    position_left:  leader/follower_position_left\n  outputs:\n    - status\n    - arm_right_observation\n    - arm_left_observation\n    - camera_wrist_right\n    - camera_wrist_left\n    - camera_head_left\n    - camera_head_right\n    - camera_ceiling\n```\n\n## Inputs\n\n| ID | Type | Description |\n|----|------|-------------|\n| `position_right` | `float32[8]` | Target joint positions for the right arm: joints 1–7 then the gripper. ~500 Hz. |\n| `position_left` | `float32[8]` | Same layout for the left arm. |\n| `pose_right` | `float32[7]` | VR controller pose `[x, y, z, qw, qx, qy, qz]`. Used only with `--debug-frames`. |\n| `pose_left` | `float32[7]` | Same for the left controller. |\n\n## Outputs\n\n| ID | Type | Description |\n|----|------|-------------|\n| `arm_right_observation` | `float32[8]` | Observed joint positions, published per incoming command. |\n| `arm_left_observation` | `float32[8]` | Same for the left arm. |\n| `camera_wrist_right` | `uint8[N]` | JPEG frame, ~30 Hz. Requires `--render`. |\n| `camera_wrist_left` | `uint8[N]` | JPEG frame, ~30 Hz. Requires `--render`. |\n| `camera_head_left` | `uint8[N]` | JPEG frame, ~30 Hz. Requires `--render`. |\n| `camera_head_right` | `uint8[N]` | JPEG frame, ~30 Hz. Requires `--render`. |\n| `camera_ceiling` | `uint8[N]` | JPEG frame, ~30 Hz. Requires `--render`. |\n\nCamera outputs carry `metadata={\"encoding\": \"jpeg\"}`.\n\n## Arguments\n\nPass these via the `args:` field in the dataflow YAML, or directly on the command line.\n\n| Argument | Default | Description |\n|----------|---------|-------------|\n| `--xml PATH` | unset | MJCF scene file to load. Overrides `--scene` when set. |\n| `--scene NAME` | `cell` | Bundled scene to load when `--xml` is not set. Choices: `cell`, `demo`, `pedestal`, `bimanual`. |\n| `--keyframe NAME` | `home` | Keyframe in the MJCF to reset to on startup. |\n| `--enable-collision` | off | Enable contact/collision detection. Disabled by default to avoid unexpected joint-locking during teleoperation. |\n| `--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`. |\n| `--viewer` | off | Open the interactive MuJoCo viewer window. Requires a display. |\n| `--render` | off | Enable offscreen camera rendering and publish JPEG frames. Leave off if cameras are not needed. |\n| `--debug-frames` | off | Draw VR controller poses as coloured arrows in the viewer. Only visible with `--viewer`. |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenactic%2Fdora-openarm-mujoco","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenactic%2Fdora-openarm-mujoco","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenactic%2Fdora-openarm-mujoco/lists"}