Skip to content

About

OpenArm integration for mjlab

Resources

Code of conduct

Stars

12 stars

Watchers

2 watching

Forks

Repository files navigation

OpenArm mjlab

PPO manipulation tasks for the OpenArm bimanual robot, built on mjlab (MuJoCo Warp + RSL-RL).

Tasks

Choose a task from the table below and use its Task Name as the first argument to openarm-mjlab-train or openarm-mjlab-play.

Task Description Task Name Demo
Reach a target position with the right gripper. OpenArm-Reach OpenArm-Reach demo
Grip a block with the right arm, lift it, and hold it above the table. OpenArm-Lift OpenArm-Lift demo
Grip both ends of a bar and lift it using both arms together. OpenArm-BimanualLift OpenArm-BimanualLift demo
Pick the orange cube from the table with the left arm and place it in the black tray in the full OpenArm Cell scene. The right arm and lifter stay at home. OpenArm-PickPlace OpenArm-PickPlace demo
Push a puck into the goal area and leave it there. The Vision variant uses overhead depth-camera observations instead of privileged puck-position observations. OpenArm-Puck
OpenArm-Puck-Vision
OpenArm-Puck demo
Grasp the handle and swing the door open. OpenArm-Door OpenArm-Door demo
Grasp the handle and pull the drawer open. OpenArm-Drawer OpenArm-Drawer demo
Grasp the lever and turn the valve. OpenArm-Valve OpenArm-Valve demo

Setup

git clone git@github.com:enactic/openarm_mjlab.git
cd openarm_mjlab
uv sync

Train

Real training needs a Linux machine with a CUDA GPU:

uv run openarm-mjlab-train OpenArm-PickPlace \
  --env.scene.num-envs 4096 \
  --env.viewer.height 480 \
  --env.viewer.max-extra-envs 0 \
  --env.viewer.width 640 \
  --video True

CPU smoke test (e.g. on macOS):

CUDA_VISIBLE_DEVICES= uv run openarm-mjlab-train OpenArm-PickPlace \
  --env.scene.num-envs 4 \
  --agent.max-iterations 2

Play a checkpoint

uv run openarm-mjlab-play OpenArm-PickPlace --checkpoint-file <path/to/checkpoint>

Measure a success rate

uv run openarm-mjlab-eval OpenArm-PickPlace

Rolls out one episode per environment and reports the fraction that reach the task's success termination, alongside the rate of every other termination term. Defaults to the latest checkpoint for the task and 256 episodes; pass --checkpoint and --num-envs to change either. When a task has more than one candidate success condition, name it explicitly with --success-term.

Tests

uv run pytest

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.

About

OpenArm integration for mjlab

Resources

Code of conduct

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages