Implementation:Haosulab ManiSkill FMBAssembly
| Knowledge Sources | |
|---|---|
| Domains | Robotics, Simulation, Assembly |
| Last Updated | 2026-02-15 08:00 GMT |
Overview
Concrete implementation of the Functional Manipulation Benchmark (FMB) Assembly task in ManiSkill.
Description
The FMBAssembly1Env is a simulation version of the Multi-Object Multi-Stage Manipulation Assembly1 task from the Functional Manipulation Benchmark (Luo et al.). The goal is to assemble parts together using a reorienting fixture onto a red board. The scene includes a board, yellow peg, purple U-shape, blue U-shape, green bridge, and a reorienting fixture.
Registered as FMBAssembly1Easy-v1 with max_episode_steps=500. The supported robot is panda. Reward modes include "sparse" and "none".
The bridge piece position is randomized with noise of +/-0.025m. Success is determined by the bridge being within 0.005m of its goal position on the board. Objects are loaded from local GLB/PLY asset files.
Usage
Use this environment for multi-stage assembly manipulation research. It tests the ability to grasp, reorient, and precisely place parts in a specific order.
Code Reference
Source Location
- Repository: Haosulab_ManiSkill
- File: mani_skill/envs/tasks/fmb/fmb.py
Signature
@register_env("FMBAssembly1Easy-v1", max_episode_steps=500)
class FMBAssembly1Env(BaseEnv):
SUPPORTED_REWARD_MODES = ["sparse", "none"]
SUPPORTED_ROBOTS = ["panda"]
agent: Panda
Import
import gymnasium as gym
import mani_skill.envs
env = gym.make("FMBAssembly1Easy-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 the Panda robot |
Outputs
| Name | Type | Description |
|---|---|---|
| obs | dict/array | Observation including TCP pose, board position, bridge pose |
| reward | float | Sparse reward when bridge is placed correctly |
| terminated | bool | Whether episode ended by success/failure |
| truncated | bool | Whether episode hit max steps (500) |
| info | dict | Contains success flag |
Usage Examples
Basic Usage
import gymnasium as gym
import mani_skill.envs
env = gym.make("FMBAssembly1Easy-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()