Variations#
Variations are a structured way of introducing randomization into simulated environments.
Variations are automatically available in Arena-defined environments. Activating the variation causes that particular source of randomness to be injected into the environment.
Build-time and run-time variations#
Some properties must be chosen before the environment is created. Others can change whenever an environment resets during policy rollouts. Arena calls these build-time and run-time variations.
Type |
When it changes |
Where the drawn value applies |
Examples |
|---|---|---|---|
Build-time |
Before the environment is built |
Every parallel environment and episode in that build |
Background image, lighting changes. |
Run-time |
When an environment resets |
One episode in one parallel environment |
Camera extrinsics, camera intrinsics |
This distinction matters when planning an evaluation. To collect several values of a build-time variation, the environment must be rebuilt several times. A run-time variation can produce a new value on each reset without rebuilding the scene.
Discovering available variations#
Pass --list_variations to print every Hydra-configurable variation for the selected
environment and then exit before rollout:
python isaaclab_arena/evaluation/policy_runner.py \
--policy_type zero_action \
--list_variations \
pick_and_place_maple_table
The output lists each asset (scene asset or embodiment), the variation name, whether it is run-time or build-time, the Hydra path to enable it, and all tunable fields with their current defaults:
Variations (Hydra-configurable)
================================
Asset: droid_abs_joint_pos
camera_extrinsics_wrist_camera (CameraExtrinsicsVariation, run-time)
Enable: droid_abs_joint_pos.camera_extrinsics_wrist_camera.enabled=true (default: False)
Fields:
droid_abs_joint_pos.camera_extrinsics_wrist_camera.sampler_cfg.high = [0.005,0.005,0.005]
droid_abs_joint_pos.camera_extrinsics_wrist_camera.sampler_cfg.low = [-0.005,-0.005,-0.005]
Asset: light
hdr_image (HDRImageVariation, build-time)
Enable: light.hdr_image.enabled=true (default: False)
Fields:
light.hdr_image.hdr_names = []
Asset: bowl_ycb_robolab
(no variations)
...
Enabling variations#
To enable a variation, with default control parameters append its enabled=true override token
after the environment subcommand. For example, to enable the HDR image and camera extrinsics variations
run:
python isaaclab_arena/evaluation/policy_runner.py \
--viz kit \
--policy_type zero_action \
--num_steps 50 \
--enable_cameras \
pick_and_place_maple_table \
light.hdr_image.enabled=true \
droid_abs_joint_pos.camera_extrinsics_wrist_camera.enabled=true
The same run with tunable variation control parameters spelled out:
python isaaclab_arena/evaluation/policy_runner.py \
--viz kit \
--policy_type zero_action \
--num_steps 50 \
--enable_cameras \
pick_and_place_maple_table \
light.hdr_image.enabled=true \
"light.hdr_image.hdr_names=[home_office_robolab,billiard_hall_robolab,garage_robolab]" \
droid_abs_joint_pos.camera_extrinsics_wrist_camera.enabled=true \
"droid_abs_joint_pos.camera_extrinsics_wrist_camera.sampler_cfg.low=[-0.01,-0.01,-0.01]" \
"droid_abs_joint_pos.camera_extrinsics_wrist_camera.sampler_cfg.high=[0.01,0.01,0.01]"
The hdr_names list restricts HDR sampling to the three named maps instead of the full
registered set. The sampler_cfg.low / sampler_cfg.high vectors widen the camera
extrinsics jitter range to ±10 mm per axis.
To see the available variations and control parameters for a specific environment, see Discovering available variations.
Configuring variations in an experiment config#
When running experiments with experiment_runner.py, variations are configured per run via a
dedicated variations field instead of command-line override tokens. The field maps each
dotted Hydra path to its value. For example, the entry light.hdr_image.enabled: true is
equivalent to the command-line override light.hdr_image.enabled=true.
The example config isaaclab_arena_environments/experiment_configs/droid_pnp_variations_experiment.yaml
enables three variations on a single run:
# Copyright (c) 2026, The Isaac Lab Arena Project Developers (https://github.com/isaac-sim/IsaacLab-Arena/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
runs:
variations_demo:
environment:
type: pick_and_place_maple_table
enable_cameras: true
embodiment: droid_rel_joint_pos
policy:
type: zero_action
rollout_limit:
num_steps: 10
# Number of times the environment is rebuilt with different variation values.
num_rebuilds: 5
# The variations to enable for this run.
variations:
light.hdr_image.enabled: true
light.intensity.enabled: true
droid_rel_joint_pos.camera_extrinsics_wrist_camera.enabled: true
Run it with:
python isaaclab_arena/evaluation/experiment_runner.py \
--viz kit \
--experiment_config isaaclab_arena_environments/experiment_configs/droid_pnp_variations_experiment.yaml
--list_variations works with experiment_runner.py too, printing the variations catalogue for
each run’s environment:
python isaaclab_arena/evaluation/experiment_runner.py \
--list_variations \
--experiment_config isaaclab_arena_environments/experiment_configs/droid_pnp_variations_experiment.yaml
Available variations#
The variations shipped in isaaclab_arena/variations/ are listed below. Run-time variations
are realised via an event term and resampled during simulation (e.g. per reset); build-time
variations are sampled once and applied to asset configs before the environment is composed.
Variation |
Type |
Description |
|---|---|---|
|
run-time |
Adds a small sampled offset to a camera’s nominal local position on every reset. |
|
build-time |
Perturbs a pinhole camera’s focal lengths and principal point when the environment is built. |
|
run-time |
Perturbs a pinhole camera’s focal lengths and principal point on every reset. |
|
build-time |
Samples a single HDR and attaches it to a dome light. |
|
build-time |
Samples a white-point color temperature (Kelvin) and applies it to a light. |
|
build-time |
Samples an RGB color and applies it to a light. |
|
build-time |
Samples a continuous orientation and applies it to a directional light. |
|
build-time |
Samples a single intensity and applies it to a light. |