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:ARISE Initiative Robosuite PotWithHandles

From Leeroopedia
Revision as of 12:00, 16 February 2026 by Admin (talk | contribs) (Auto-imported from implementations/ARISE_Initiative_Robosuite_PotWithHandles.md)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Knowledge Sources
Domains Robotics, Simulation, MJCF_Modeling
Last Updated 2026-02-15 07:00 GMT

Overview

PotWithHandlesObject is a procedurally generated composite object that creates a rectangular pot with two side handles, primarily used in the TwoArmLift task for bimanual manipulation.

Description

The PotWithHandlesObject class extends CompositeObject to build a pot model from multiple box geoms. The pot body consists of a base plate and four walls arranged to form an open-top rectangular container. The wall positions are computed using offsets from the body center, with rotations applied via axis-angle to quaternion conversions for the side walls. The wall thickness is configurable separately from the overall body dimensions.

Two handles are attached to opposite sides of the pot (along the y-axis). Each handle can be either solid (a single box geom) or hollow (composed of a center bar and two side bars forming a U-shape). The handles extend outward from the pot body by the handle_length parameter and have configurable friction, width, and radius. Sites are placed at each handle location and at the pot center, and these are registered as important_sites for task reward computation. The handle_distance property computes the total distance between the two handles.

Materials are assigned using wood textures: "WoodRed" for the pot body, "WoodGreen" for handle 0, and "WoodBlue" for handle 1, providing clear visual differentiation for the two handles. This color coding aligns with the typical bimanual task setup where each robot arm targets a specific handle. The handle0_geoms, handle1_geoms, and handle_geoms properties expose prefix-corrected geom names for per-handle or combined collision checking.

Usage

Use PotWithHandlesObject for bimanual manipulation tasks where two robot arms must coordinate to grasp an object from opposite sides. It is the primary object for the TwoArmLift task, but can be used in any scenario requiring a pot-shaped object with clearly defined grasping points.

Code Reference

Source Location

Signature

class PotWithHandlesObject(CompositeObject):
    def __init__(
        self,
        name,
        body_half_size=(0.07, 0.07, 0.07),
        handle_radius=0.01,
        handle_length=0.09,
        handle_width=0.09,
        handle_friction=1.0,
        density=1000,
        use_texture=True,
        rgba_body=None,
        rgba_handle_0=None,
        rgba_handle_1=None,
        solid_handle=False,
        thickness=0.01,
    )

Import

from robosuite.models.objects.composite.pot_with_handles import PotWithHandlesObject

I/O Contract

Inputs

Name Type Required Description
name str Yes Name of this Pot object
body_half_size 3-array of float No (x, y, z) half-dimensions of the main pot body. Default: (0.07, 0.07, 0.07)
handle_radius float No Radius of the handle bar geoms. Default: 0.01
handle_length float No Length of each handle extending from the pot body. Default: 0.09
handle_width float No Width of each handle. Default: 0.09
handle_friction float No Sliding friction value for handles. Default: 1.0
density float No Density for all geoms in kg/m^3. Default: 1000
use_texture bool No If True, apply wood textures. Default: True
rgba_body 4-array or None No RGBA color for the pot body. Default: RED
rgba_handle_0 4-array or None No RGBA color for handle 0. Default: GREEN
rgba_handle_1 4-array or None No RGBA color for handle 1. Default: BLUE
solid_handle bool No If True, use a single box geom per handle; otherwise, use a hollow U-shape. Default: False
thickness float No Wall thickness of the pot body. Default: 0.01

Outputs

Name Type Description
handle_distance float Total distance between the two handles (body_half_size[1] * 2 + handle_length * 2)
handle0_geoms list of str Prefix-corrected geom names for handle 0
handle1_geoms list of str Prefix-corrected geom names for handle 1
handle_geoms list of str Combined geom names for both handles
important_sites dict Sites dict including "handle0", "handle1", and "center" entries
bottom_offset np.array (0, 0, -body_half_size[2])
top_offset np.array (0, 0, body_half_size[2])
horizontal_radius float sqrt(2) * (max(body_half_size) + handle_length)

Usage Examples

from robosuite.models.objects.composite.pot_with_handles import PotWithHandlesObject

# Create a pot with default properties
pot = PotWithHandlesObject(name="my_pot")

# Create a larger pot with solid handles
pot = PotWithHandlesObject(
    name="big_pot",
    body_half_size=(0.1, 0.1, 0.1),
    handle_length=0.12,
    handle_width=0.1,
    solid_handle=True,
    handle_friction=2.0,
)

# Access handle properties for reward computation
print("Handle distance:", pot.handle_distance)
print("Handle 0 geoms:", pot.handle0_geoms)
print("Handle 1 geoms:", pot.handle1_geoms)
print("Important sites:", pot.important_sites)

Related Pages

Page Connections

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