Environment Builder#
Environment compilation is the step that turns the three independent components —
scene, embodiment, and task — into a runnable Isaac Lab environment.
ArenaEnvBuilder does this by collecting the partial configuration each
component contributes and merging them into a single
ManagerBasedRLEnvCfg.
ArenaEnvBuilder merges the Scene, Embodiment, and Task into a runnable ManagerBasedRLEnv.#
environment = IsaacLabArenaEnvironment(
name="manipulation_task",
embodiment=embodiment,
scene=scene,
task=task,
)
env_builder = ArenaEnvBuilder(environment, ArenaEnvBuilderCfg())
env = env_builder.make_registered()
How it works#
Each component (Scene, Embodiment, Task) exposes a set of get_*_cfg() methods that return its
contribution to each Isaac Lab manager. The typical contributions of each component
to each manager are tabulated below:
Isaac Lab Manager |
Isaac Lab - Arena Component |
||
|---|---|---|---|
Scene |
Embodiment |
Task |
|
Scene |
assets, lights |
robot, sensors |
task-specific assets |
Observations |
proprioception, cameras |
goal observations |
|
Actions |
control interface |
||
Events (resets) |
object placement |
robot reset |
task reset |
Terminations |
success, failure |
||
Rewards |
dense rewards (RL) |
||
Recorder |
metrics-required data |
||
ArenaEnvBuilder.compose_manager_cfg() first assembles the partial manager contributions
from each component into a set of complete managers. Then it merges these complete managers
into a single ManagerBasedRLEnvCfg.
By default, the builder also solves spatial relations for placed objects and
supported robot embodiments. Set
ArenaEnvBuilderCfg(solve_relations=False) in Python to disable this step.
Arena command-line runners expose the equivalent --no_solve_relations
option.
Seeds during compilation#
Environment compilation and rollout use more than one random stream, so locking a single global seed is not enough when you need layouts, object-set picks, or run-time variation draws to be reproducible independently.
What it is#
ArenaEnvBuilder exposes two seeds. They are independent — locking one does
not fix the other.
Control |
CLI / config |
Default |
Locking it reproduces |
|---|---|---|---|
Environment seed |
|
|
Simulation RNG after the Isaac Lab env is created: reset noise and run-time variation draws. |
Placement seed |
|
|
Relation-solver layouts and random
RigidObjectSet member
assignment. With |
There is no variation seed. Run-time variations follow --seed; build-time
variations are drawn once at compile time and are not locked by either seed.
See Variations and
Pooled Placement.
How to set it#
Pass the seed you want to lock on the runner CLI (or set the matching field on
ArenaEnvBuilderCfg / placer_params):
python isaaclab_arena/evaluation/policy_runner.py \
--policy_type zero_action \
--seed 42 \
--placement_seed 7 \
--num_steps 100 \
pick_and_place_maple_table
Set
--seedto fix simulation and run-time variation draws.Set
--placement_seedto fix layouts and random object-set picks.Omit
--placement_seedwhen placement should vary across runs.
The compiled config is then registered with the gym registry under the
environment’s name, and gym.make() returns the gym environment.
Mimic mode#
Passing --mimic at the command line compiles a
ManagerBasedRLMimicEnv instead of a standard ManagerBasedRLEnv.
The mimic environment is used for demonstration generation and includes
subtask configurations from the task. Metrics and recorders are excluded
in mimic mode.
python submodules/IsaacLab/scripts/imitation_learning/isaaclab_mimic/generate_dataset.py \
--external_callback isaaclab_arena.environments.isaaclab_interop.environment_registration_callback \
--mimic ...
Next Steps#
Continue to Relations and Strategies to learn how anchors and spatial relations describe a placement layout.