Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:Haosulab ManiSkill FixtureStack

From Leeroopedia
Knowledge Sources
Domains Robotics, Simulation, Scene_Building
Last Updated 2026-02-15 08:00 GMT

Overview

Concrete tool for creating vertical stacks of kitchen fixtures (cabinets, drawers, panels) in RoboCasa environments, managing layered placement and configuration.

Description

The FixtureStack class encapsulates a vertical arrangement of stackable fixtures. It takes a configuration dictionary that specifies the stack size, the fixture types at each level, and the percentage of total height each level occupies.

Stackable fixture types (defined in STACKABLE dictionary): single_cabinet, hinge_cabinet, drawer, panel_cabinet, box.

Key features:

  • Multi-level stacking -- Levels are created bottom-to-top, each assigned a percentage of the total height.
  • Split levels -- A level can contain up to 2 fixtures placed side-by-side (each taking half the width).
  • Base platform -- An optional base Box is created below the stack with configurable height and overhang.
  • Style inheritance -- Fixture styles, textures, and configurations are loaded from the scene style system.
  • Alignment -- Stacks can be positioned absolutely or aligned relative to other fixtures using the align_to config key.
  • Group transforms -- Supports group rotation and positioning parameters for island and L-shaped layouts.
  • Configuration validation -- _check_config_syntax() verifies all required keys are present and well-formed.

Each fixture in the stack is created via scene_utils.initialize_fixture() and registered in the scene fixtures and configs dictionaries.

Usage

Used by the RoboCasa scene builder when layout configurations specify stacked fixture arrangements, commonly for upper and lower cabinet assemblies.

Code Reference

Source Location

Signature

STACKABLE = {
    "single_cabinet": SingleCabinet,
    "hinge_cabinet": HingeCabinet,
    "drawer": Drawer,
    "panel_cabinet": PanelCabinet,
    "box": Box,
}

class FixtureStack:
    def __init__(self, scene: ManiSkillScene, config, scene_fixtures, scene_configs,
                 scene_style, base_height=0.05, base_overhang=0.07,
                 default_texture=None, rng=None): ...
    def _create_stack(self): ...
    @staticmethod
    def _check_config_syntax(config): ...

Import

from mani_skill.utils.scene_builder.robocasa.fixtures.fixture_stack import FixtureStack

I/O Contract

The config dictionary must contain:

Key Type Description
size list [width, depth, height] of the full stack
levels list Fixture type names per level (string or list of 2 strings)
percentages list Height fraction for each level (must sum to approximately 1.0)
name str Base name for all fixtures in the stack
pos list (optional) Absolute position; if absent, uses align_to
align_to str (optional) Name of fixture to align relative to

Usage Examples

config = {
    "name": "upper_stack",
    "size": [0.6, 0.35, 1.4],
    "levels": ["hinge_cabinet", "drawer"],
    "percentages": [0.7, 0.3],
    "pos": [1.0, 0.5, 1.0],
}
stack = FixtureStack(
    scene=scene,
    config=config,
    scene_fixtures=scene_fixtures,
    scene_configs=scene_configs,
    scene_style=scene_style,
)
# stack.fixtures contains all created fixture objects

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment