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 TwoArmLift Environment

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

Overview

Concrete tool for simulating a two-arm cooperative pot lifting manipulation task provided by robosuite.

Description

The TwoArmLift class implements a bimanual lifting task where two robot arms must cooperate to lift a pot with handles from a tabletop. The pot has two handles (handle0 and handle1), and each arm is assigned to grasp its respective handle. The arms must coordinate to simultaneously grasp both handles and lift the pot above a height threshold while keeping it approximately level (within 30 degrees of horizontal).

The reward function supports both sparse and dense modes. In sparse mode, a discrete reward of 3.0 is provided when the pot is lifted above the table by more than 10cm and is tilted less than 30 degrees from horizontal. In dense (shaped) mode, three components are summed: per-arm reaching (each in [0, 0.5], proportional to distance between each gripper and its handle, with 0.5 awarded at contact), per-arm grasping (each in {0, 0.25}, binary for correct handle grasp), and lifting (in [0, 1.5], proportional to the pot's height above the table, capped at a threshold, and only awarded when the pot is tilted less than 30 degrees). The final reward is scaled by reward_scale / 3.0.

The environment supports three robot configurations: a single bimanual robot ("single-robot"), two robots facing each other ("opposed"), or two robots side by side ("parallel"). The pot is initialized with random position and rotation using a UniformRandomSampler. Success requires the pot bottom height to exceed the table height by 10cm.

Usage

Use this environment for training and evaluating bimanual coordination policies that require synchronized grasping and cooperative lifting. The pot's two-handle design inherently requires both arms to participate, making this a natural testbed for coordinated manipulation.

Code Reference

Source Location

Signature

class TwoArmLift(TwoArmEnv):
    def __init__(
        self,
        robots,
        env_configuration="default",
        controller_configs=None,
        gripper_types="default",
        initialization_noise="default",
        table_full_size=(0.8, 0.8, 0.05),
        table_friction=(1.0, 5e-3, 1e-4),
        use_camera_obs=True,
        use_object_obs=True,
        reward_scale=1.0,
        reward_shaping=False,
        placement_initializer=None,
        has_renderer=False,
        has_offscreen_renderer=True,
        render_camera="frontview",
        render_collision_mesh=False,
        render_visual_mesh=True,
        render_gpu_device_id=-1,
        control_freq=20,
        lite_physics=True,
        horizon=1000,
        ignore_done=False,
        hard_reset=True,
        camera_names="agentview",
        camera_heights=256,
        camera_widths=256,
        camera_depths=False,
        camera_segmentations=None,
        renderer="mjviewer",
        renderer_config=None,
        seed=None,
    ):

Import

from robosuite.environments.manipulation.two_arm_lift import TwoArmLift

I/O Contract

Inputs

Name Type Required Description
robots str or list of str Yes Either 2 single-arm robots or 1 bimanual robot
env_configuration str No "opposed" or "parallel" for two-robot setups. Default: "default" (maps to "opposed")
table_full_size 3-tuple No (x, y, z) dimensions of the table. Default: (0.8, 0.8, 0.05)
table_friction 3-tuple No MuJoCo friction parameters. Default: (1.0, 5e-3, 1e-4)
reward_scale None or float No Scales the normalized reward. Default: 1.0
reward_shaping bool No If True, uses dense summed rewards. Default: False
placement_initializer ObjectPositionSampler No Custom placement sampler for the pot. Default: UniformRandomSampler
horizon int No Episode length in timesteps. Default: 1000

Outputs

Name Type Description
pot_pos np.array (3,) 3D position of the pot body
pot_quat np.array (4,) Quaternion orientation (xyzw) of the pot body
handle0_xpos np.array (3,) 3D position of pot handle 0 (left)
handle1_xpos np.array (3,) 3D position of pot handle 1 (right)
gripper{i}_to_handle{i} np.array (3,) Vector from each gripper to its assigned handle
reward float Scalar reward value per step

Usage Examples

import robosuite as suite
import numpy as np

# Create a TwoArmLift environment with two Panda robots
env = suite.make(
    env_name="TwoArmLift",
    robots=["Panda", "Panda"],
    env_configuration="opposed",
    has_renderer=False,
    has_offscreen_renderer=False,
    use_camera_obs=False,
    use_object_obs=True,
    reward_shaping=True,
    horizon=1000,
)

obs = env.reset()

for i in range(1000):
    action = np.random.randn(env.action_dim)
    obs, reward, done, info = env.step(action)
    if done:
        break

env.close()

Related Pages

Page Connections

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