Implementation:ARISE Initiative Robosuite Wipe Environment
| 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
- Repository: ARISE_Initiative_Robosuite
- File: robosuite/environments/manipulation/wipe.py
- Lines: 1-829
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,
)