Implementation:Haosulab ManiSkill OpenCabinetDrawer
| Knowledge Sources | |
|---|---|
| Domains | Robotics, Simulation, Mobile_Manipulation |
| Last Updated | 2026-02-15 08:00 GMT |
Overview
Concrete implementation of the cabinet drawer opening task for the Fetch mobile manipulation robot in ManiSkill.
Description
The OpenCabinetDrawerEnv requires the Fetch mobile robot to navigate toward a target cabinet and open a specific drawer. Cabinets are sourced from the PartNet-Mobility dataset.
Registered as OpenCabinetDrawer-v1 with max_episode_steps=100 and asset_download_ids=["partnet_mobility_cabinet"]. The supported robot is fetch.
Randomizations include: robot initialization 1.6-1.8m from the cabinet facing it, base orientation randomized by -9 to 9 degrees, random cabinet selection from PartNet-Mobility cabinets with drawers, and random drawer selection. Success requires the drawer to be open at least 90% (configurable via min_open_frac=0.75) with small angular/linear velocities.
Reward modes include "sparse" and "none".
Usage
Use this environment for mobile manipulation research involving navigation and articulated object manipulation. It tests the ability of a mobile robot to approach and interact with household furniture.
Code Reference
Source Location
- Repository: Haosulab_ManiSkill
- File: mani_skill/envs/tasks/mobile_manipulation/open_cabinet_drawer.py
Signature
@register_env(
"OpenCabinetDrawer-v1",
asset_download_ids=["partnet_mobility_cabinet"],
max_episode_steps=100,
)
class OpenCabinetDrawerEnv(BaseEnv):
SUPPORTED_ROBOTS = ["fetch"]
agent: Union[Fetch]
handle_types = ["prismatic"]
min_open_frac = 0.75
Import
import gymnasium as gym
import mani_skill.envs
env = gym.make("OpenCabinetDrawer-v1")
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| obs_mode | str | No | Observation mode |
| reward_mode | str | No | Reward mode: "sparse", "none" |
| control_mode | str | No | Control mode for Fetch robot |
Outputs
| Name | Type | Description |
|---|---|---|
| obs | dict/array | Observation including robot state, cabinet state, handle position |
| reward | float | Sparse reward based on drawer open fraction |
| terminated | bool | Whether episode ended by success/failure |
| truncated | bool | Whether episode hit max steps (100) |
| info | dict | Contains success flag, open fraction |
Usage Examples
Basic Usage
import gymnasium as gym
import mani_skill.envs
env = gym.make("OpenCabinetDrawer-v1", obs_mode="state", render_mode="rgb_array")
obs, info = env.reset()
for _ in range(100):
action = env.action_space.sample()
obs, reward, terminated, truncated, info = env.step(action)
if terminated or truncated:
obs, info = env.reset()
env.close()