Isaac Lab Arena Documentation#

Isaac Lab Arena is an extends Isaac Lab to simplify the creation of task/environment libraries.

G1 Locomanipulation Box Pick and Place Task

A G1 humanoid robot performing a locomanipulation task of transporting a box to a tray. This environment was designed using Isaac Lab Arena.#

The Problem#

With the advent of generalist robot policies, such as GR00T and Pi_0, there is a growing need to evaluate these policies in a variety of tasks/environments.

Traditional approaches to building task libraries suffer from significant limitations. Each new environment variation—whether testing a different robot embodiment or swapping objects—requires tedious manual creation of a new task configuration. This leads to redundant, unscalable tasks where most of the environment setup, scene configuration, and task logic is duplicated across variations. As the number of robot types and objects grows, maintaining and extending such task libraries becomes increasingly impractical.

Task duplications in a task library

Task duplications in a task library. When evaluating policies across different robot embodiments and objects, most of the environment setup and task logic remains the same, leading to significant code duplication.#

Can we simplify environment creation?#

Axis of variation for the pick and place task

Axis of variation of a pick and place task. Each environment differs along two axis, the robot embodiment and the object to be manipulated. All other aspects of the environment and the task remain the same.#

Tasks in a task library are typically highly redundant. For example, you may want to test how well a policy performs on a pick and place task, on many different objects. In this example, each environment differs in the object-to-be-manipulated, but all other aspects remain the same. For example, the scene layout, the robot, the observations, actions, rewards, etc are all conserved across the environments. Isaac Lab’s manager-based environment API is convenient for expressing one such task, but does not naturally support expressing this type of variation.

Isaac Lab Arena extends the manager-based interface to provide a convenient way of expressing task variation, while benefiting from the modularity, performance, and accuracy of Isaac Lab.

Isaac Lab Arena#

Isaac Lab Arena is a framework that simplifies the creation and maintenance of such task/environment libraries. To simplify the expression of task/environment variation in Isaac Lab Arena, we compose the environment on-the-fly from independent sub-pieces. Because the sub-pieces are independent, they can be reused and independently varied. Furthermore, because the environment is built on the fly, we never need to write and maintain duplicate code.

Isaac Lab Arena Architecture Overview

Isaac Lab Arena decomposes the environment into three independent sub-pieces:

  • Scene: The physical environment layout. The scene is a collection of objects.

  • Embodiment: The robot embodiment, its observations, actions, sensors etc.

  • Task: A definition of what is to be accomplished in the environment.

The ArenaEnvBuilder composes the environment from these sub-pieces, into a ManagerBasedRLEnvCfg which can be run in Isaac Lab.

Usage Example#

The following code snippet shows a simple example(pick up a tomato soup can and place it in the destination location) of how to set up a manager-based RL environment using isaaclab_arena.

embodiment = asset_registry.get_asset_by_name("franka")(enable_cameras=True)
background = asset_registry.get_asset_by_name("kitchen")()
tomato_soup_can = asset_registry.get_asset_by_name("tomato_soup_can")()
destination_location = ObjectReference(
         name="destination_location",
         prim_path="{ENV_REGEX_NS}/kitchen/Cabinet_B_02",
         parent_asset=background,
         object_type=ObjectType.RIGID,
     )
teleop_device = device_registry.get_device_by_name("keyboard")()

# Compose the scene
scene = Scene([background, tomato_soup_can])

isaaclab_arena_environment = IsaacLabArenaEnvironment(
   name="franka_kitchen_pickup",
   embodiment=embodiment,
   scene=scene,
   task=PickAndPlaceTask(tomato_soup_can, destination, background),
   teleop_device=teleop_device,
)

env_builder = ArenaEnvBuilder(isaaclab_arena_environment, args_cli)
env = env_builder.make_registered() # This will register the environment with the gym registry.
Franka Kitchen Pickup Task

Franka — Kitchen Pickup Task#

To get started with isaaclab_arena, please finish the installation process by following the instructions in Installation and refer to the First Arena Environment example.

Installation#

See our Installation page for instructions. Note that isaaclab_arena version v0.1.0 only supports installation from source in a docker container.

Examples#

Below are some example environments built using isaaclab_arena.

Check out more of our examples environments here: IsaacLab Arena Examples.

License#

This code is under an open-source license (Apache 2.0).

Contributing#

For more details, please refer to the Contributing Guidelines.

TABLE OF CONTENTS#

References