GR00T#

GR00T N1.6 is a pre-trained robotic foundation model. No fine-tuning or separate model download is required. The weights are fetched from HuggingFace when the policy server starts for the first time.

Start a GR00T policy server#

The closed-loop policy connects to a GR00T policy server in a separate process. The server runs from the Isaac-GR00T submodule pinned at commit e29d8fc. Populate it if needed:

git submodule update --init submodules/Isaac-GR00T

If you run Arena from its native uv environment, install the GR00T client package:

uv sync --group gr00t-client
uv sync --no-default-groups --group isaaclab-from-wheel --group gr00t-client

Then start the server from the repository root in a separate shell:

Todo

The submodules/Isaac-GR00T submodule will be removed after the policy config refactor. After that, users will set up a separate GR00T repository checkout and launch the server from there.

cd submodules/Isaac-GR00T
uv run python gr00t/eval/run_gr00t_server.py \
  --model-path nvidia/GR00T-N1.6-DROID \
  --embodiment-tag OXE_DROID \
  --device cuda --host 127.0.0.1 --port 5555

GR00T N1.6-DROID provides its own modality configuration, so the command does not need --modality-config-path. The first launch downloads the model weights; later launches reuse the local cache. Leave this server running.

Run GR00T with the Experiment Runner#

Arena includes a one-Run YAML configuration for the first rollout. It selects the DROID environment, connects the GR00T policy to the server, and stops after three episodes.

Configuration file (droid_pnp_gr00t_experiment.yaml)
# 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:
  droid_pnp_gr00t:
    environment:
      type: pick_and_place_maple_table
      enable_cameras: true
      embodiment: droid_abs_joint_pos
      pick_up_object: rubiks_cube_hot3d_robolab
      destination_location: bowl_ycb_robolab
      hdr: home_office_robolab
    environment_builder:
      language_instruction: Pick up the Rubik's cube and place it in the bowl.
    policy:
      type: isaaclab_arena_gr00t.policy.gr00t_remote_closedloop_policy.Gr00tRemoteClosedloopPolicy
      policy_config_yaml_path: isaaclab_arena_gr00t/policy/config/droid_manip_gr00t_closedloop_config.yaml
      policy_device: cuda:0
      remote_host: 127.0.0.1
      remote_port: 5555
    rollout_limit:
      num_episodes: 3

GR00T N1.6-DROID uses absolute joint positions. The YAML therefore selects droid_abs_joint_pos and enables the cameras required by the policy. The natural-language instruction belongs to the environment builder, while the server connection belongs to the policy.

Open another shell, enter the Arena container, and start the rollout with the Experiment Runner:

python isaaclab_arena/evaluation/experiment_runner.py \
  --viz kit \
  --experiment_config isaaclab_arena_environments/experiment_configs/droid_pnp_gr00t_experiment.yaml

The Kit window shows the DROID arm acting on GR00T commands. After every episode, Arena reports whether the pick-and-place task succeeded.

If the server runs on another host or port, override the declared policy value. For example:

python isaaclab_arena/evaluation/experiment_runner.py \
  --viz kit \
  --experiment_config isaaclab_arena_environments/experiment_configs/droid_pnp_gr00t_experiment.yaml \
  runs.droid_pnp_gr00t.policy.remote_port=5556

Evaluate several object variations#

The multi-Run YAML evaluates nine combinations of pick-up object, destination, HDR background, and language instruction. Its shared mapping keeps the GR00T policy and rollout settings in one place. Every Run lists only what changes.

Configuration file (droid_pnp_srl_gr00t_experiment.yaml)
# 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

# Values below shared are used by every Run. Each Run lists only the scene and
# language instruction that differ from these defaults.
shared:
  environment:
    type: pick_and_place_maple_table
    enable_cameras: true
    embodiment: droid_abs_joint_pos
    pick_up_object: rubiks_cube_hot3d_robolab
    destination_location: bowl_ycb_robolab
  environment_builder:
    language_instruction: Pick up the Rubik's cube and place it in the bowl.
  policy:
    type: isaaclab_arena_gr00t.policy.gr00t_remote_closedloop_policy.Gr00tRemoteClosedloopPolicy
    policy_config_yaml_path: isaaclab_arena_gr00t/policy/config/droid_manip_gr00t_closedloop_config.yaml
    policy_device: cuda:0
    remote_host: 127.0.0.1
    remote_port: 5555
  rollout_limit:
    num_episodes: 3

runs:
  droid_pnp_srl_gr00t_billiard_hall:
    environment:
      hdr: billiard_hall_robolab

  droid_pnp_srl_gr00t_blue_block:
    environment:
      pick_up_object: blue_block_basic_robolab
      destination_location: wooden_bowl_hot3d_robolab
      hdr: home_office_robolab
    environment_builder:
      language_instruction: Pick up the blue block and place it in the bowl.

  droid_pnp_srl_gr00t_alphabet_soup_can:
    environment:
      pick_up_object: alphabet_soup_can_hope_robolab
      destination_location: bowl_ycb_robolab
      hdr: empty_warehouse_robolab
    environment_builder:
      language_instruction: Pick up the soup can and place it in the bowl.

  droid_pnp_srl_gr00t_orange:
    environment:
      pick_up_object: orange_01_fruits_veggies_robolab
      destination_location: wooden_bowl_hot3d_robolab
      hdr: aerodynamics_workshop_robolab
    environment_builder:
      language_instruction: Pick up the orange and place it in the bowl.

  droid_pnp_srl_gr00t_lemon:
    environment:
      pick_up_object: lemon_01_fruits_veggies_robolab
      destination_location: bowl_ycb_robolab
      hdr: wooden_lounge_robolab
    environment_builder:
      language_instruction: Pick up the lemon and place it in the bowl.

  droid_pnp_srl_gr00t_tomato_sauce_can:
    environment:
      pick_up_object: tomato_sauce_can_hot3d_robolab
      destination_location: wooden_bowl_hot3d_robolab
      hdr: garage_robolab
    environment_builder:
      language_instruction: Pick up the tomato sauce can and place it in the bowl.

  droid_pnp_srl_gr00t_mustard_bottle:
    environment:
      pick_up_object: mustard_bottle_hot3d_robolab
      destination_location: wooden_bowl_hot3d_robolab
      hdr: kiara_interior_robolab
    environment_builder:
      language_instruction: Pick up the mustard bottle and place it in the bowl.

  droid_pnp_srl_gr00t_sugar_box:
    environment:
      pick_up_object: sugar_box_ycb_robolab
      destination_location: bowl_ycb_robolab
      hdr: brown_photostudio_robolab
    environment_builder:
      language_instruction: Pick up the sugar box and place it in the bowl.

  droid_pnp_srl_gr00t_mug:
    environment:
      pick_up_object: mug_ycb_robolab
      destination_location: wooden_bowl_hot3d_robolab
      hdr: carpentry_shop_robolab
    environment_builder:
      language_instruction: Pick up the mug and place it in the bowl.

Start all nine Runs with one command:

python isaaclab_arena/evaluation/experiment_runner.py \
  --viz kit \
  --experiment_config isaaclab_arena_environments/experiment_configs/droid_pnp_srl_gr00t_experiment.yaml

The runner executes the nine Runs in YAML order. It keeps one SimulationApp open, but builds a fresh environment for every Run.

3x3 grid of GR00T N1.6 DROID Runs across different objects, backgrounds, and destinations

Nine closed-loop Runs of GR00T N1.6 on the DROID embodiment. Each cell changes the pick-up object, HDR background, and destination.#

When all Runs finish, Arena prints a summary table followed by a metrics report:

Example Run summary and metrics

Metric values can vary between evaluations. This is example output:

+---------------------------------------+-----------+-------------------------+----------+-----------+--------------+--------------+
|               Run Name                |  Status   |       Policy Type       | Num Envs | Num Steps | Num Episodes | Num Rebuilds |
+---------------------------------------+-----------+-------------------------+----------+-----------+--------------+--------------+
|   droid_pnp_srl_gr00t_billiard_hall   | completed | gr00t_remote_closedloop |    1     |   None    |      3       |      1       |
|    droid_pnp_srl_gr00t_blue_block     | completed | gr00t_remote_closedloop |    1     |   None    |      3       |      1       |
| droid_pnp_srl_gr00t_alphabet_soup_can | completed | gr00t_remote_closedloop |    1     |   None    |      3       |      1       |
|      droid_pnp_srl_gr00t_orange       | completed | gr00t_remote_closedloop |    1     |   None    |      3       |      1       |
|       droid_pnp_srl_gr00t_lemon       | completed | gr00t_remote_closedloop |    1     |   None    |      3       |      1       |
| droid_pnp_srl_gr00t_tomato_sauce_can  | completed | gr00t_remote_closedloop |    1     |   None    |      3       |      1       |
|  droid_pnp_srl_gr00t_mustard_bottle   | completed | gr00t_remote_closedloop |    1     |   None    |      3       |      1       |
|     droid_pnp_srl_gr00t_sugar_box     | completed | gr00t_remote_closedloop |    1     |   None    |      3       |      1       |
|        droid_pnp_srl_gr00t_mug        | completed | gr00t_remote_closedloop |    1     |   None    |      3       |      1       |
+---------------------------------------+-----------+-------------------------+----------+-----------+--------------+--------------+

======================================================================
METRICS SUMMARY
======================================================================

droid_pnp_srl_gr00t_alphabet_soup_can:
  num_episodes                            3
  object_moved_rate                  0.0000
  success_rate                       0.0000

droid_pnp_srl_gr00t_billiard_hall:
  num_episodes                            3
  object_moved_rate                  0.3333
  success_rate                       0.0000

droid_pnp_srl_gr00t_blue_block:
  num_episodes                            3
  object_moved_rate                  0.0000
  success_rate                       0.0000

droid_pnp_srl_gr00t_lemon:
  num_episodes                            3
  object_moved_rate                  1.0000
  success_rate                       0.6667

...
======================================================================

These results show that zero-shot deployment of robotic foundation models remains challenging. Recent [robolab] results compare GR00T with other vision-language-action models.

View rollouts as an HTML report#

The runner builds an HTML report for the complete evaluation. Add --record_camera_video to record one video per camera and episode, then use --serve_evaluation_report to open the report through a local HTTP server:

python isaaclab_arena/evaluation/experiment_runner.py \
  --viz kit \
  --experiment_config isaaclab_arena_environments/experiment_configs/droid_pnp_srl_gr00t_experiment.yaml \
  --output_base_dir ./output \
  --record_camera_video \
  --serve_evaluation_report

You can rebuild and serve a report later by pointing the standalone tool at the output directory. It selects the most recent evaluation:

python isaaclab_arena/visualization/report.py --video_dir ./output

Next steps#

To go beyond the pre-trained GR00T N1.6 foundation model, such as fine-tuning on your own teleoperation data, see Imitation Learning for the complete imitation-learning workflows.