SO101-Nexus
Environments

MuJoCoMove-v1

Move the TCP in a specified direction using the MuJoCo backend.

MuJoCoMove-v1

Move the robot's end-effector in a cardinal direction by a fixed distance.

Overview

PropertyValue
Environment IDMuJoCoMove-v1
BackendMuJoCo
Max episode steps256
Config classMoveConfig (extends EnvironmentConfig)
Task description"Move the end-effector {direction} by {distance:.2f} m."

Configuration

MoveConfig extends EnvironmentConfig with the following fields:

FieldTypeDefaultDescription
directionLiteral["up", "down", "left", "right", "forward", "backward"]--Direction of movement
target_distancefloat0.10Distance to move in meters
success_thresholdfloat0.01Shortfall tolerance (m) on the directional displacement.

Observation Space

Default observation includes only joint positions (configurable via observations parameter on MoveConfig):

ComponentClassDimensionsDescription
Joint positionsJointPositions6Current angle of each robot joint

Objects

No objects are present. The goal position is computed at episode start from the initial TCP position offset by direction * target_distance. On the Warp backend (WarpMove-v1) the target is captured from the pre-settle TCP, so it is identical across reset() and same-step autoreset; with reset_settle_frames > 0 the first observed TCP-to-target distance can therefore differ slightly from target_distance.

Success Condition

Succeeds when the TCP has traveled at least target_distance along the move direction (within success_threshold), regardless of perpendicular drift.

Example

import gymnasium as gym
import so101_nexus.mujoco

from so101_nexus.config import MoveConfig

env = gym.make(
    "MuJoCoMove-v1",
    render_mode="human",
    config=MoveConfig(direction="up", target_distance=0.10),
)

obs, info = env.reset()
for _ in range(256):
    action = env.action_space.sample()
    obs, reward, terminated, truncated, info = env.step(action)
    if terminated or truncated:
        obs, info = env.reset()

env.close()

On this page