Skip to content

Scene Presets

Scene presets are functions that return a SceneOptions with a ground plane (or a full room) already in it. The robot is the robot argument (left_robot / right_robot on the two-arm BimanualEmpty and LBMEval), and every other entity is a keyword argument named after it. The core presets are also exported as short names: en.scenes.Empty, BimanualEmpty, Tabletop, KitchenCountertop and LBMEval. The scenes and terrains guide covers scenes, objects and terrain.

import eden as en

# excerpted from eden/tasks/benchmark/reacher/config.py
scene_options = en.scenes.Empty(
    is_support_enabled=True,
    robot=en.robots.Yam(default_root_pos=(0.0, 0.0, 0.0), default_root_quat=(1.0, 0.0, 0.0, 0.0)),
)

Core presets

Empty scene presets (plane-only, single and bimanual).

These are factory functions, not SceneOptions subclasses: each returns a plain SceneOptions with the ground plane and robot(s) added as named children. A factory (rather than a builder __init__ on a subclass) keeps the saved/reconstructed type a base SceneOptions, so a config round-trips through validated load — a builder __init__ that takes non-persisted args (is_support_enabled/surface) and injects entities cannot be reconstructed from the serialized entity list.

Attributes

Classes

Functions:

EmptySceneOptions

EmptySceneOptions(robot: EntityOptions, *, is_support_enabled: bool = False, surface: SurfaceLike | None = None, **entities: EntityOptions) -> SceneOptions

Basic scene with a robot and a ground plane.

PARAMETER DESCRIPTION
robot

The robot entity configuration.

TYPE: EntityOptions

is_support_enabled

Whether to enable support-surface tracking on the plane.

TYPE: bool DEFAULT: False

surface

Surface for the plane, e.g. PlasticSurfaceOptions(color=(1.0, 1.0, 1.0)).

TYPE: SurfaceLike | None DEFAULT: None

**entities

Additional named entities to add to the scene. Passing plane= replaces the flat ground with that entity (e.g. TerrainOptions) under the same name.

TYPE: EntityOptions DEFAULT: {}

Source code in eden/options/scenes/empty.py
def EmptySceneOptions(
    robot: EntityOptions,
    *,
    is_support_enabled: bool = False,
    surface: SurfaceLike | None = None,
    **entities: EntityOptions,
) -> SceneOptions:
    """Basic scene with a robot and a ground plane.

    Parameters
    ----------
    robot : EntityOptions
        The robot entity configuration.
    is_support_enabled : bool
        Whether to enable support-surface tracking on the plane.
    surface : SurfaceLike | None
        Surface for the plane, e.g. ``PlasticSurfaceOptions(color=(1.0, 1.0, 1.0))``.
    **entities : EntityOptions
        Additional named entities to add to the scene. Passing ``plane=`` replaces the flat
        ground with that entity (e.g. ``TerrainOptions``) under the same name.
    """
    ground = _ground(entities, is_support_enabled, surface)  # pops a `plane` override out of entities
    return SceneOptions(robot=robot, plane=ground, **entities)

BimanualEmptySceneOptions

BimanualEmptySceneOptions(right_robot: EntityOptions, left_robot: EntityOptions, *, is_support_enabled: bool = False, surface: SurfaceLike | None = None, **entities: EntityOptions) -> SceneOptions

Basic bimanual scene with two robots and a ground plane.

PARAMETER DESCRIPTION
right_robot

The right/left robot entity configurations.

TYPE: EntityOptions

left_robot

The right/left robot entity configurations.

TYPE: EntityOptions

is_support_enabled

Whether to enable support-surface tracking on the plane.

TYPE: bool DEFAULT: False

surface

Surface for the plane.

TYPE: SurfaceLike | None DEFAULT: None

**entities

Additional named entities to add to the scene. Passing plane= replaces the flat ground with that entity (e.g. TerrainOptions) under the same name.

TYPE: EntityOptions DEFAULT: {}

Source code in eden/options/scenes/empty.py
def BimanualEmptySceneOptions(
    right_robot: EntityOptions,
    left_robot: EntityOptions,
    *,
    is_support_enabled: bool = False,
    surface: SurfaceLike | None = None,
    **entities: EntityOptions,
) -> SceneOptions:
    """Basic bimanual scene with two robots and a ground plane.

    Parameters
    ----------
    right_robot, left_robot : EntityOptions
        The right/left robot entity configurations.
    is_support_enabled : bool
        Whether to enable support-surface tracking on the plane.
    surface : SurfaceLike | None
        Surface for the plane.
    **entities : EntityOptions
        Additional named entities to add to the scene. Passing ``plane=`` replaces the flat
        ground with that entity (e.g. ``TerrainOptions``) under the same name.
    """
    ground = _ground(entities, is_support_enabled, surface)  # pops a `plane` override out of entities
    return SceneOptions(
        right_robot=right_robot,
        left_robot=left_robot,
        plane=ground,
        **entities,
    )

Tabletop and kitchen-countertop scene options.

These are factory functions, not SceneOptions subclasses: each returns a plain SceneOptions with the table/countertop and ground plane added as named children, so a config round-trips through validated load (the saved/reconstructed type is a base SceneOptions).

Classes

Functions:

TabletopSceneOptions

TabletopSceneOptions(robot: EntityOptions, *, plane: PlaneOptions | None = None, table: EntityOptions | None = None, **entities: EntityOptions) -> SceneOptions

Tabletop scene with a robot, a ground plane, and a work table.

PARAMETER DESCRIPTION
robot

The entity configuration to be used for the robot.

TYPE: EntityOptions

plane

The plane entity configuration (defaults to a bare :class:PlaneOptions).

TYPE: PlaneOptions | None DEFAULT: None

table

The table entity configuration (defaults to work_table.obj).

TYPE: EntityOptions | None DEFAULT: None

**entities

Additional named entities to add to the scene.

TYPE: EntityOptions DEFAULT: {}

Source code in eden/options/scenes/tabletop.py
def TabletopSceneOptions(
    robot: EntityOptions,
    *,
    plane: PlaneOptions | None = None,
    table: EntityOptions | None = None,
    **entities: EntityOptions,
) -> SceneOptions:
    """Tabletop scene with a robot, a ground plane, and a work table.

    Parameters
    ----------
    robot : EntityOptions
        The entity configuration to be used for the robot.
    plane : PlaneOptions | None
        The plane entity configuration (defaults to a bare :class:`PlaneOptions`).
    table : EntityOptions | None
        The table entity configuration (defaults to ``work_table.obj``).
    **entities : EntityOptions
        Additional named entities to add to the scene.
    """
    return SceneOptions(
        robot=robot,
        plane=plane if plane is not None else PlaneOptions(),
        table=table if table is not None else _default_work_table(),
        **entities,
    )

KitchenCountertopSceneOptions

KitchenCountertopSceneOptions(robot: EntityOptions, *, plane: PlaneOptions | None = None, countertop: EntityOptions | None = None, **entities: EntityOptions) -> SceneOptions

Kitchen countertop scene with a robot, a ground plane, and a countertop.

PARAMETER DESCRIPTION
robot

The entity configuration to be used for the robot.

TYPE: EntityOptions

plane

The plane entity configuration (defaults to a bare :class:PlaneOptions).

TYPE: PlaneOptions | None DEFAULT: None

countertop

The countertop entity configuration (defaults to kitchen_counter.glb).

TYPE: EntityOptions | None DEFAULT: None

**entities

Additional named entities to add to the scene.

TYPE: EntityOptions DEFAULT: {}

Source code in eden/options/scenes/tabletop.py
def KitchenCountertopSceneOptions(
    robot: EntityOptions,
    *,
    plane: PlaneOptions | None = None,
    countertop: EntityOptions | None = None,
    **entities: EntityOptions,
) -> SceneOptions:
    """Kitchen countertop scene with a robot, a ground plane, and a countertop.

    Parameters
    ----------
    robot : EntityOptions
        The entity configuration to be used for the robot.
    plane : PlaneOptions | None
        The plane entity configuration (defaults to a bare :class:`PlaneOptions`).
    countertop : EntityOptions | None
        The countertop entity configuration (defaults to ``kitchen_counter.glb``).
    **entities : EntityOptions
        Additional named entities to add to the scene.
    """
    return SceneOptions(
        robot=robot,
        plane=plane if plane is not None else PlaneOptions(),
        countertop=countertop if countertop is not None else _default_kitchen_counter(),
        **entities,
    )

LBM-eval scene options.

Classes

Functions:

LBMEvalSceneOptions

LBMEvalSceneOptions(left_robot: EntityOptions | None = None, right_robot: EntityOptions | None = None, plane: PlaneOptions | None = None, **kwargs: EntityOptions) -> SceneOptions

Bimanual scene built around the Riverway dual-Franka station.

The two arms default to :class:FrankaEmikaPanda. The scene re-poses them onto the station's left (+x site) and right (-y site) gantry base plates, orients each one so its forward (+x) points into the workspace (left=180° about z, right=90° about z), and applies a ±π/4 offset to joint1 (the base DOF) so the two arms splay away from each other at init instead of meeting in the middle of the table.

Returns a plain :class:SceneOptions (station + re-posed robots as named children) so the config round-trips through validated load.

Source code in eden/options/scenes/lbm_eval.py
def LBMEvalSceneOptions(
    left_robot: EntityOptions | None = None,
    right_robot: EntityOptions | None = None,
    plane: PlaneOptions | None = None,
    **kwargs: EntityOptions,
) -> SceneOptions:
    """Bimanual scene built around the Riverway dual-Franka station.

    The two arms default to :class:`FrankaEmikaPanda`. The scene re-poses them
    onto the station's left (+x site) and right (-y site) gantry base plates,
    orients each one so its forward (+x) points into the workspace
    (left=180° about z, right=90° about z), and applies a ±π/4 offset to
    ``joint1`` (the base DOF) so the two arms splay away from each other at
    init instead of meeting in the middle of the table.

    Returns a plain :class:`SceneOptions` (station + re-posed robots as named
    children) so the config round-trips through validated load.
    """
    if left_robot is None or right_robot is None:
        # Lazy import: a robot module loads the whole ``eden.options.robots`` package,
        # which this scene needs only for the default arms.
        from eden.options.robots.franka_emika_panda import FrankaEmikaPanda

        if left_robot is None:
            left_robot = FrankaEmikaPanda()
        if right_robot is None:
            right_robot = FrankaEmikaPanda()

    scene_kwargs: dict[str, EntityOptions] = {
        "station": LBMRiverwayStation(),
        "left_robot": left_robot.model_copy(
            update={
                "default_root_pos": LBM_LEFT_ROBOT_POS,
                "default_root_quat": LBM_LEFT_ROBOT_QUAT,
                "default_dofs_pos": _with_joint1_offset(left_robot, _LBM_LEFT_JOINT1_OFFSET),
            }
        ),
        "right_robot": right_robot.model_copy(
            update={
                "default_root_pos": LBM_RIGHT_ROBOT_POS,
                "default_root_quat": LBM_RIGHT_ROBOT_QUAT,
                "default_dofs_pos": _with_joint1_offset(right_robot, _LBM_RIGHT_JOINT1_OFFSET),
            }
        ),
    }
    if plane is not None:
        scene_kwargs["plane"] = plane
    return SceneOptions(**scene_kwargs, **kwargs)

Benchmark scenes

Scene constructors derived from benchmark environments. A scene preset alone is not a registered task; the task suites are documented under Tasks.

LIBERO

Reusable scene presets for the six LIBERO workspaces.

Attributes

Classes

Functions:

LiberoTabletopSceneOptions

LiberoTabletopSceneOptions(mount: LiberoMountedPanda | None = None, **entities: BaseEntityOptions | CompositeEntityOptions) -> SceneOptions

Return the mounted-Panda tabletop preset.

Source code in eden/options/scenes/libero/base.py
def LiberoTabletopSceneOptions(
    mount: LiberoMountedPanda | None = None,
    **entities: BaseEntityOptions | CompositeEntityOptions,
) -> SceneOptions:
    """Return the mounted-Panda tabletop preset."""
    return SceneOptions(
        **{
            LiberoTabletopWorkspace.workspace_entity_name: LiberoTabletopWorkspace(),
            LIBERO_MOUNT_ENTITY_NAME: _mounted_panda((-0.66, 0.0, 0.922)) if mount is None else mount,
        },
        **entities,
    )

LiberoFloorSceneOptions

LiberoFloorSceneOptions(robot: LiberoPanda | None = None, **entities: BaseEntityOptions | CompositeEntityOptions) -> SceneOptions

Return the fixed-base Panda floor preset.

Source code in eden/options/scenes/libero/base.py
def LiberoFloorSceneOptions(
    robot: LiberoPanda | None = None,
    **entities: BaseEntityOptions | CompositeEntityOptions,
) -> SceneOptions:
    """Return the fixed-base Panda floor preset."""
    return SceneOptions(
        **{
            LiberoFloorWorkspace.workspace_entity_name: LiberoFloorWorkspace(),
            LIBERO_ROBOT_ENTITY_NAME: (
                LiberoPanda(default_root_pos=(-0.6, 0.0, 0.0), is_fixed_base=True) if robot is None else robot
            ),
        },
        **entities,
    )

LiberoKitchenTabletopSceneOptions

LiberoKitchenTabletopSceneOptions(mount: LiberoMountedPanda | None = None, **entities: BaseEntityOptions | CompositeEntityOptions) -> SceneOptions

Return the mounted-Panda kitchen-tabletop preset.

Source code in eden/options/scenes/libero/base.py
def LiberoKitchenTabletopSceneOptions(
    mount: LiberoMountedPanda | None = None,
    **entities: BaseEntityOptions | CompositeEntityOptions,
) -> SceneOptions:
    """Return the mounted-Panda kitchen-tabletop preset."""
    return SceneOptions(
        **{
            LiberoKitchenTabletopWorkspace.workspace_entity_name: LiberoKitchenTabletopWorkspace(),
            LIBERO_MOUNT_ENTITY_NAME: _mounted_panda((-0.66, 0.0, 0.922)) if mount is None else mount,
        },
        **entities,
    )

LiberoLivingRoomTabletopSceneOptions

LiberoLivingRoomTabletopSceneOptions(robot: LiberoPanda | None = None, **entities: BaseEntityOptions | CompositeEntityOptions) -> SceneOptions

Return the fixed-base Panda living-room tabletop preset.

Source code in eden/options/scenes/libero/base.py
def LiberoLivingRoomTabletopSceneOptions(
    robot: LiberoPanda | None = None,
    **entities: BaseEntityOptions | CompositeEntityOptions,
) -> SceneOptions:
    """Return the fixed-base Panda living-room tabletop preset."""
    return SceneOptions(
        **{
            LiberoLivingRoomTabletopWorkspace.workspace_entity_name: LiberoLivingRoomTabletopWorkspace(),
            LIBERO_ROBOT_ENTITY_NAME: (
                LiberoPanda(default_root_pos=(-0.51, 0.0, 0.42), is_fixed_base=True) if robot is None else robot
            ),
        },
        **entities,
    )

LiberoStudyTabletopSceneOptions

LiberoStudyTabletopSceneOptions(mount: LiberoMountedPanda | None = None, **entities: BaseEntityOptions | CompositeEntityOptions) -> SceneOptions

Return the mounted-Panda study-tabletop preset.

Source code in eden/options/scenes/libero/base.py
def LiberoStudyTabletopSceneOptions(
    mount: LiberoMountedPanda | None = None,
    **entities: BaseEntityOptions | CompositeEntityOptions,
) -> SceneOptions:
    """Return the mounted-Panda study-tabletop preset."""
    return SceneOptions(
        **{
            LiberoStudyTabletopWorkspace.workspace_entity_name: LiberoStudyTabletopWorkspace(),
            LIBERO_MOUNT_ENTITY_NAME: _mounted_panda((-0.75, 0.0, 0.922)) if mount is None else mount,
        },
        **entities,
    )

LiberoCoffeeTableSceneOptions

LiberoCoffeeTableSceneOptions(robot: LiberoPanda | None = None, **entities: BaseEntityOptions | CompositeEntityOptions) -> SceneOptions

Return the fixed-base Panda coffee-table preset.

Source code in eden/options/scenes/libero/base.py
def LiberoCoffeeTableSceneOptions(
    robot: LiberoPanda | None = None,
    **entities: BaseEntityOptions | CompositeEntityOptions,
) -> SceneOptions:
    """Return the fixed-base Panda coffee-table preset."""
    return SceneOptions(
        **{
            LiberoCoffeeTableWorkspace.workspace_entity_name: LiberoCoffeeTableWorkspace(),
            LIBERO_ROBOT_ENTITY_NAME: (
                LiberoPanda(default_root_pos=(-0.51, 0.0, 0.41), is_fixed_base=True) if robot is None else robot
            ),
        },
        **entities,
    )

CALVIN

CALVIN play-table scene options.

Classes

Functions:

CalvinPlayTableSceneOptions

CalvinPlayTableSceneOptions(robot: EntityOptions | None = None, **kwargs: EntityOptions) -> SceneOptions

CALVIN play-table scene built from the original table-D and block URDFs.

Returns a plain :class:SceneOptions with the play table and the three colored blocks added as named children so the config round-trips through validated load.

Source code in eden/options/scenes/calvin/base.py
def CalvinPlayTableSceneOptions(robot: EntityOptions | None = None, **kwargs: EntityOptions) -> SceneOptions:
    """CALVIN play-table scene built from the original table-D and block URDFs.

    Returns a plain :class:`SceneOptions` with the play table and the three
    colored blocks added as named children so the config round-trips through
    validated load.
    """
    scene_kwargs: dict[str, EntityOptions] = {
        "plane": PlaneOptions(),
        "table": CalvinPlayTable(default_root_pos=(0.0, 0.0, 0.0)),
        "block_red": CalvinRedBlock(default_root_pos=(-0.12, -0.12, 0.49)),
        "block_blue": CalvinBlueBlock(default_root_pos=(0.0, -0.12, 0.49)),
        "block_pink": CalvinPinkBlock(default_root_pos=(0.12, -0.12, 0.49)),
    }
    if robot is not None:
        scene_kwargs["robot"] = robot
    return SceneOptions(**scene_kwargs, **kwargs)

The ReplicaCAD and RoboCasa scene modules (eden/options/scenes/replica_cad/, robocasa/, robocasa365/) have no __init__.py, so they are not rendered here; read them in the source.

See also