Environment Reference
CPU —
make_env(env_id)(from myosuite import make_env). Playback and SB3.mjlab — the same
env_idfor GPU training (scripts/train_mjlab.py), or from Python withmake_env(env_id, backend="mjlab", num_envs=...).
List every CPU ID on your install:
python -c "import myosuite; print('\n'.join(myosuite.myosuite_env_suite))"
Tables below are the common CPU IDs. Muscle-condition variants (myoSarc…, myoFati…,
hand myoReaf…) are registered for the myo* tasks; see Naming Conventions.
GPU (mjlab) coverage
The mjlab backend registers a twin under the same env_id for these CPU families
(myoSarc…/myoFati…/myoReaf… variants exist where the CPU env has them):
Family |
mjlab twins |
|---|---|
Pose |
|
Reach |
|
Leg |
|
Challenge |
|
Variants: myoSarc… exist for all twins above except myoLegDirectional* (no CPU
variant) and the Challenge twins; myoFati… likewise, and myoReaf… for the hand
pose and reach twins.
MuscleMimic (myoMimicFullbody-v0, myoMimicBimanual-v0 and their SAR variants) has its
own mjlab implementation. It is not built from the CPU registration and is registered once a
motion clip is given (MYOSUITE_MIMIC_CLIP or register_mimic_mjlab_tasks_with_clip; see
tutorials 5.x), and it takes no muscle-command features.
Not on mjlab yet: the other Challenge tasks, myoChallengeChaseTagFBVs (two-agent),
myoElbowPoseTask*, myoFullBodyDirectional and the hand manipulation families
(myoHandKeyTurn, ObjHold, PenTwirl, Reorient*) including their variants.
The cross-backend contract lists which envs and backends take which features.
Differences from the CPU env that matter when moving policies between backends:
Torso exosuit (
myoTorsoExoPoseFixedand variants) — experimental: the two free exosuit bodies are 6-DoF joint chains on mjlab (mjlab allows one freejoint per entity); theirqpos/qvelare converted back to the CPU layout, so the observation is the same 296-d vector (matching CPU to ~1e-3 over short rollouts, seetest_torso_exo_observation_matches_cpu). Transfer of trained policies between the backends has not been tested yet.Terrain walks: the terrain is baked into the model with a fixed seed instead of being resampled at each reset (
myoLegRoughTerrainWalkuses one fixed sample).Leg locomotion twins (walk, directional, terrain) are step-parity tested like the other twins, with looser tolerances where contacts dominate (see Backend parity). Height-field contacts differ most, because MuJoCo Warp creates at most one capsule-hfield contact.
Naming Conventions
Base environment IDs follow the pattern:
myo<Model><Task>[Difficulty]-v<N>
Muscle-condition variants are registered for the base myo* CPU environments. Each variant is
the base env registered together with the matching wrapper (SarcopeniaWrapper,
FatigueWrapper, ReafferentationWrapper), so the same features work on any env that runs
muscle stages; see Neuroscience Quick Start for examples and
docs/wiki/cross-backend-contract.md for how features are registered and which envs and
backends support them:
Prefix pattern |
Condition |
Example |
|---|---|---|
|
Sarcopenia (50 % peak force) |
|
|
Cumulative neuromuscular fatigue |
|
|
Tendon transfer / reafferentation (all hand envs) |
|
The suffix Fixed indicates a fixed (non-random) target;
Random indicates a randomly sampled target each episode.
myoFinger (4 DoF, 5–6 muscles)
Environment ID |
Task |
Diff. |
Sarc |
Fati |
|---|---|---|---|---|
|
Fingertip reach |
Easy |
✓ |
✓ |
|
Fingertip reach |
Hard |
✓ |
✓ |
|
Joint pose |
Easy |
✓ |
✓ |
|
Joint pose |
Hard |
✓ |
✓ |
Each base environment also exposes myoSarc… and myoFati… variants
(12 total IDs for this model).
myoElbow (1 DoF, 6 muscles)
Environment ID |
Task |
Diff. |
Sarc |
Fati |
|---|---|---|---|---|
|
Joint pose |
Easy |
✓ |
✓ |
|
Joint pose |
Hard |
✓ |
✓ |
|
Pose + elbow exoskeleton |
Easy |
✓ |
✓ |
|
Pose + elbow exoskeleton |
Hard |
✓ |
✓ |
Each row additionally has myoSarc… and myoFati… variants (12 total IDs).
Experimental, defined by a TaskConfig instead of an env class (tutorial 4.3):
myoElbowPoseTaskFixed-v0 and myoElbowPoseTaskRandom-v0, with myoSarc… and myoFati…
variants.
myoHand (23 DoF, 39 muscles)
Environment ID |
Task |
Diff. |
Sarc |
Fati |
Reaf |
|---|---|---|---|---|---|
|
23-DoF joint pose |
Easy |
✓ |
✓ |
✓ |
|
23-DoF joint pose |
Hard |
✓ |
✓ |
✓ |
|
Fingertip spatial reach |
Easy |
✓ |
✓ |
✓ |
|
Fingertip spatial reach |
Hard |
✓ |
✓ |
✓ |
|
Key rotation (thumb + index) |
Easy |
✓ |
✓ |
✓ |
|
Key rotation, random init |
Hard |
✓ |
✓ |
✓ |
|
Object repositioning (no drop) |
Easy |
✓ |
✓ |
✓ |
|
Random object, random target |
Hard |
✓ |
✓ |
✓ |
|
Pen twirl to fixed orientation |
Easy |
✓ |
✓ |
✓ |
|
Pen twirl to random orientation |
Hard |
✓ |
✓ |
✓ |
|
Reorient 1 of 8 objects |
Easy |
✓ |
✓ |
✓ |
|
Reorient 1 of 100 objects |
Medium |
✓ |
✓ |
✓ |
|
Reorient 1 of 1000 (in-domain) |
Hard |
✓ |
✓ |
✓ |
|
Reorient 1 of 1000 (out-of-domain) |
Hardest |
✓ |
✓ |
✓ |
With all three variants each row generates myoSarc…, myoFati…, and
myoReaf… IDs. The full hand environment count is 14 × 4 = 56 IDs.
MyoChallenge hand tasks (several also register myoSarc…/myoFati… variants, 40 variant IDs in total):
Environment ID |
Task |
|---|---|
|
Die reorientation demo |
|
Die reorientation (limited goal range) |
|
Die reorientation (full range + friction/size variation) |
|
Baoding balls — swap positions |
|
Baoding balls — full rotation + size/friction variation |
|
Grasp & place object (phase 1) |
|
Grasp & place (phase 2, harder) |
|
Relocate phase 2 — evaluation split |
|
Table tennis swing (warm-up) |
|
Table tennis (phase 1) |
|
Table tennis (phase 2, full task) |
|
Bimanual object manipulation |
myoArm (hand-free variant used here: 18 DoF, 50 muscles; full arm: 27 DoF, 63 muscles)
Environment ID |
Task |
Diff. |
Sarc |
Fati |
|---|---|---|---|---|
|
Index fingertip reach (fixed) |
Easy |
✓ |
✓ |
|
Index fingertip reach (random) |
Hard |
✓ |
✓ |
The arm model used here is the hand-free variant (extrinsic + intrinsic hand muscles removed) to isolate reaching without manipulation.
myoLeg (14 joints plus the 6-DoF free root = 20 DoF, 80 muscles)
Environment ID |
Task |
Diff. |
Sarc |
Fati |
|---|---|---|---|---|
|
Static balance — random init |
Easy |
✓ |
✓ |
|
Flat-ground forward walking |
Medium |
✓ |
✓ |
|
Walking on rough terrain |
Hard |
✓ |
✓ |
|
Walking on hilly terrain |
Hard |
✓ |
✓ |
|
Stair climbing |
Hardest |
✓ |
✓ |
|
Directional walking — forward |
— |
— |
— |
|
Directional walking — backward |
— |
— |
— |
|
Directional walking — random direction |
— |
— |
— |
MyoChallenge leg / whole-body tasks:
Environment ID |
Task |
|---|---|
|
Chase-tag locomotion (phase 1) |
|
Chase-tag (phase 2, two-agent) |
|
Chase-tag phase 2 — evaluation split |
|
OSL prosthetic running (fixed terrain) |
|
OSL prosthetic running (random terrain) |
|
Soccer ball kicking (phase 1) |
|
Soccer ball kicking (phase 2) |
myoTorso (18 joints, 216 muscles)
Environment ID |
Task |
Diff. |
Sarc |
Fati |
|---|---|---|---|---|
|
Lumbar spine pose |
Fixed |
✓ |
✓ |
|
Lumbar spine pose + exoskeleton |
Fixed |
✓ |
✓ |
Full body and MuscleMimic
Environment ID |
Task |
mjlab |
|---|---|---|
|
MuscleMimic full-body motion imitation |
yes |
|
MuscleMimic bimanual arm imitation |
yes |
|
Full-body directional locomotion |
no |
|
Chase-tag, full body, scripted opponent |
yes |
|
Chase-tag, full body, two agents (1v1) |
no |
The MuscleMimic and mjlab columns are explained under “GPU (mjlab) coverage” above.
mjlab (GPU)
Install pip install -e ".[mjlab]" (see Installation for matching the torch
build to your driver’s CUDA version) and train with the CPU env_id:
python scripts/train_mjlab.py myoElbowPose1D6MRandom-v0 --env.scene.num-envs 1024
List the registered mjlab IDs with mjlab.tasks.registry.list_tasks().
MJX (experimental)
A JAX path exists (pip install -e ".[mjx]",
from myosuite.envs.myo.backends.mjx import make). Do not start new work on
it; use mjlab for GPU training. The MJX envs are not observation- or
reward-compatible with the CPU/mjlab envs of the same task, so MJX-trained
policies do not transfer to them (see the limitations in
myosuite/envs/myo/backends/mjx/README.md).
Supported envs:
Family |
MJX ids ( |
|---|---|
Pose |
|
Reach |
|
Walk |
|
Mimic |
|
MJX ids use the Mjx prefix and are not the myo… ids of the CPU and mjlab
backends; there is no MJX version of the torso, arm, leg terrain/stand/directional
envs or of the myoSarc…/myoFati…/myoReaf… variants. The list is defined in
myosuite/envs/myo/backends/mjx/__init__.py.