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