SO101-Nexus
Environments

ManiSkillPickAndPlaceSO101-v1

Pick and place a cube on a target with the SO-101 arm on the ManiSkill backend.

ManiSkillPickAndPlaceSO101-v1

Pick up a cube and place it on a target disc using the SO-101 robot arm in ManiSkill.

Overview

PropertyValue
Environment IDManiSkillPickAndPlaceSO101-v1
BackendManiSkill
RobotSO-101
Max episode steps1024
Config classPickAndPlaceConfig

Observation Space

ComponentDescription
tcp_poseTCP position and orientation
is_graspedWhether the cube is currently grasped
target_posTarget disc position
obj_poseCube position and orientation
tcp_to_obj_posVector from TCP to cube position
obj_to_target_posVector from cube to target position

Success Condition

The episode succeeds when both conditions are met:

  1. The cube is placed at the target location (is_obj_placed).
  2. The robot is static (is_robot_static).

Registration

This environment is registered through ManiSkill's @register_env decorator rather than the core all_registered_env_ids() list. It is available after importing so101_nexus_maniskill.

Vectorized Simulation

ManiSkill supports running multiple environment instances in parallel via the num_envs argument.

Example

import gymnasium as gym
import so101_nexus_maniskill

from so101_nexus_maniskill.config import PickAndPlaceConfig

# Single environment
env = gym.make(
    "ManiSkillPickAndPlaceSO101-v1",
    render_mode="human",
    config=PickAndPlaceConfig(),
)

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

env.close()
# Vectorized (multiple parallel environments)
env = gym.make(
    "ManiSkillPickAndPlaceSO101-v1",
    num_envs=16,
    config=PickAndPlaceConfig(),
)

On this page