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

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

Overview

Concrete tool for simulating a two-arm transport and sorting manipulation task provided by robosuite.

Description

The TwoArmTransport class implements a complex bimanual transport task where two robot arms must cooperate to move a payload from a starting bin to a target bin, while also clearing trash from the target bin to a trash bin. The workspace consists of two tables (arranged using a MultiTableArena) with bins positioned on each table. A start bin on one table contains a payload (a hammer object) covered by a lid, while a target bin on the other table contains a trash object (a small red cube). The robot must remove the lid, pick up and transport the payload to the target bin, and move the trash from the target bin to a dedicated trash bin.

The reward function currently only supports sparse rewards. A discrete reward of 1.0 is provided when both conditions are satisfied: the payload is in the target bin and the trash is in the trash bin. Dense reward shaping is noted as a planned feature but is not yet implemented; enabling it will print a warning and fall back to sparse rewards. The final reward is scaled by reward_scale / 1.0.

The environment uses a SequentialCompositeSampler to initialize six objects (start_bin, lid, payload, target_bin, trash, trash_bin) at calibrated positions on their respective tables. During reset, the lid is placed directly on top of the start bin, the payload is placed inside the start bin, and the trash is placed inside the target bin. The TransportGroup model manages the composite object relationships and provides convenience properties for checking whether the payload and trash are in their target locations.

Usage

Use this environment for training and evaluating complex multi-step bimanual manipulation policies that require both spatial reasoning (navigating between tables) and task planning (sequencing lid removal, payload transport, and trash clearing). This is one of the most challenging two-arm tasks in robosuite.

Code Reference

Source Location

Signature

class TwoArmTransport(TwoArmEnv):
    def __init__(
        self,
        robots,
        env_configuration="default",
        controller_configs=None,
        gripper_types="default",
        initialization_noise="default",
        tables_boundary=(0.8, 1.2, 0.05),
        table_friction=(1.0, 5e-3, 1e-4),
        bin_size=(0.3, 0.3, 0.15),
        use_camera_obs=True,
        use_object_obs=True,
        reward_scale=1.0,
        reward_shaping=False,
        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_transport import TwoArmTransport

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")
tables_boundary 3-tuple No (x, y, z) dimensions of the overall table boundary. Default: (0.8, 1.2, 0.05)
table_friction 3-tuple No MuJoCo friction parameters for each table. Default: (1.0, 5e-3, 1e-4)
bin_size 3-tuple No (x, y, z) dimensions of the bins. Default: (0.3, 0.3, 0.15)
reward_scale None or float No Scales the normalized reward. Default: 1.0
reward_shaping bool No If True, attempts to use dense rewards (not yet implemented; falls back to sparse). Default: False
horizon int No Episode length in timesteps. Default: 1000

Outputs

Name Type Description
payload_pos np.array (3,) 3D position of the payload (hammer)
payload_quat np.array (4,) Quaternion orientation of the payload
trash_pos np.array (3,) 3D position of the trash object
trash_quat np.array (4,) Quaternion orientation of the trash
lid_handle_pos np.array (3,) 3D position of the lid handle
lid_handle_quat np.array (4,) Quaternion orientation of the lid handle
target_bin_pos np.array (3,) 3D position of the target bin
trash_bin_pos np.array (3,) 3D position of the trash bin
payload_in_target_bin bool Whether the payload is in the target bin
trash_in_trash_bin bool Whether the trash is in the trash bin
gripper{i}_to_payload np.array (3,) Vector from each gripper to the payload
reward float Scalar reward value per step

Usage Examples

import robosuite as suite
import numpy as np

# Create a TwoArmTransport environment with two Panda robots
env = suite.make(
    env_name="TwoArmTransport",
    robots=["Panda", "Panda"],
    env_configuration="opposed",
    has_renderer=False,
    has_offscreen_renderer=False,
    use_camera_obs=False,
    use_object_obs=True,
    reward_shaping=False,
    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