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

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

Overview

Concrete tool for simulating a table wiping manipulation task with force-sensitive contact provided by robosuite.

Description

The Wipe class implements a single-arm robot wiping task where the robot must clean dirt particles (represented as small pegs/markers) from a table surface using a specialized wiping gripper (WipingGripper). The environment generates a configurable number of dirt markers (default 100) arranged in a line or two clusters on the table surface, and the robot must methodically wipe them away by making contact with each marker using the corners of its wiping tool.

The reward function is highly configurable through a task_config dictionary (or the DEFAULT_WIPE_CONFIG). In dense mode, multiple reward components are summed: distance-based reaching reward (in [0, distance_multiplier], proportional to distance from the gripper to the centroid of remaining dirt), table contact reward (wipe_contact_reward when the gripper is in contact), per-marker wiped reward (unit_wiped_reward per newly wiped marker), task completion reward (task_complete_reward when all markers are cleared), pressure-based contact reward (bonus for applying force above pressure_threshold), and penalties for arm collisions (arm_limit_collision_penalty), excessive force (excess_force_penalty_mul), and large accelerations (ee_accel_penalty). In sparse mode, only the per-marker and completion rewards are given. The per-step reward is normalized by a factor that accounts for the theoretical best episode return.

The environment features early termination conditions including arm collision with the table, task completion, and joint limit violations. A specialized WipeArena is used that supports configurable table friction (with per-episode randomization via table_friction_std), table height variation, coverage factor, and marker layout (single line or two clusters). The wiping detection uses a geometric algorithm that projects each marker onto the plane defined by the wiping tool's corners and checks whether the marker falls within the tool's rectangular contact area.

Usage

Use this environment for training and evaluating force-controlled manipulation policies, particularly for contact-rich tasks requiring controlled pressure application. The Wipe environment is useful for studying compliant manipulation, surface exploration strategies, and safety-aware control (force limiting).

Code Reference

Source Location

Signature

class Wipe(ManipulationEnv):
    def __init__(
        self,
        robots,
        env_configuration="default",
        controller_configs=None,
        gripper_types="WipingGripper",
        base_types="default",
        initialization_noise="default",
        use_camera_obs=True,
        use_object_obs=True,
        reward_scale=1.0,
        reward_shaping=True,
        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,
        task_config=None,
        renderer="mjviewer",
        renderer_config=None,
        seed=None,
    ):

Import

from robosuite.environments.manipulation.wipe import Wipe, DEFAULT_WIPE_CONFIG

I/O Contract

Inputs

Name Type Required Description
robots str or list of str Yes Specification for a single single-arm robot (e.g., "Panda")
gripper_types str No Must be "WipingGripper". Default: "WipingGripper"
reward_scale None or float No Scales the normalized reward. Default: 1.0
reward_shaping bool No If True, uses dense multi-component rewards. Default: True
task_config dict or None No Configuration dict for task parameters. Default: DEFAULT_WIPE_CONFIG
horizon int No Episode length in timesteps. Default: 1000

The task_config dictionary supports the following key parameters:

Key Type Default Description
arm_limit_collision_penalty float -10.0 Penalty for arm collision or joint limit
wipe_contact_reward float 0.01 Reward for wiping tool contacting the table
unit_wiped_reward float 50.0 Reward per dirt marker wiped
excess_force_penalty_mul float 0.05 Penalty multiplier for force over safety threshold
distance_multiplier float 5.0 Scale for distance-based reaching reward
num_markers int 100 Number of dirt particles to generate
contact_threshold float 1.0 Minimum end-effector force (N) to qualify as contact
pressure_threshold float 0.5 Force threshold (N) for increased contact reward
pressure_threshold_max float 60.0 Maximum allowed force (N)
early_terminations bool True Whether to allow early episode termination
use_condensed_obj_obs bool True Use condensed (centroid-based) object observation

Outputs

Name Type Description
proportion_wiped float Fraction of markers that have been wiped (0 to 1)
wipe_radius float Radius of circle from centroid capturing remaining markers
wipe_centroid np.array (3,) 3D centroid position of remaining unwipped markers
{arm}gripper_to_wipe_centroid np.array (3,) Vector from gripper to wipe centroid (condensed mode)
{pf}contact bool Whether the gripper is in contact with the table
reward float Scalar reward value per step

Usage Examples

import robosuite as suite
import numpy as np

# Create a Wipe environment with default configuration
env = suite.make(
    env_name="Wipe",
    robots="Panda",
    has_renderer=False,
    has_offscreen_renderer=False,
    use_camera_obs=False,
    use_object_obs=True,
    reward_shaping=True,
    horizon=500,
)

obs = env.reset()

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

env.close()

# Create a Wipe environment with custom configuration
custom_config = {
    **suite.environments.manipulation.wipe.DEFAULT_WIPE_CONFIG,
    "num_markers": 50,
    "pressure_threshold_max": 40.0,
    "early_terminations": False,
}
env_custom = suite.make(
    env_name="Wipe",
    robots="Sawyer",
    task_config=custom_config,
    has_renderer=False,
    has_offscreen_renderer=False,
    use_camera_obs=False,
)

Related Pages

Page Connections

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