PPO manipulation tasks for the OpenArm bimanual robot, built on mjlab (MuJoCo Warp + RSL-RL).
Choose a task from the table below and use its Task Name as the first argument
to openarm-mjlab-train or openarm-mjlab-play.
git clone git@github.com:enactic/openarm_mjlab.git
cd openarm_mjlab
uv syncReal 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 TrueCPU smoke test (e.g. on macOS):
CUDA_VISIBLE_DEVICES= uv run openarm-mjlab-train OpenArm-PickPlace \
--env.scene.num-envs 4 \
--agent.max-iterations 2uv run openarm-mjlab-play OpenArm-PickPlace --checkpoint-file <path/to/checkpoint>uv run openarm-mjlab-eval OpenArm-PickPlaceRolls 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.
uv run pytestLicensed under the Apache License 2.0. See LICENSE for details.
Copyright 2026 Enactic, Inc.
All participation in the OpenArm project is governed by our Code of Conduct.







