# Política do GR00T

GR00T é uma família de modelos de fundação da NVIDIA para raciocínio e habilidades generalizadas de robôs humanóides. Trata-se de uma política de interação com o ambiente que aceita entrada multimodal, incluindo linguagem, imagens e propriocepção, para executar tarefas de manipulação em diversos ambientes.

O LeRobot integra o GR00T N1.7 por meio do tipo de política `groot`.

> [!WARNING]
> **Mudança que quebra compatibilidade:** o suporte a GR00T N1.5 foi removido do LeRobot, e as versões atuais suportam apenas GR00T N1.7. Checkpoints e configs do N1.5 são rejeitados com uma nota de migração. Para continuar usando um checkpoint do N1.5, fixe a última versão que o suporta: `pip install 'lerobot==0.5.1'`. Para usar a versão atual, migre para GR00T N1.7 (modelo base [`nvidia/GR00T-N1.7-3B`](https://huggingface.co/nvidia/GR00T-N1.7-3B)).

## Visão geral do modelo

O GR00T N1.7 utiliza um backbone Cosmos-Reason2/Qwen3-VL e fornece checkpoints para SimplerEnv, DROID e LIBERO.

Desenvolvedores e pesquisadores podem realizar pós-treino do GR00T com seus próprios dados reais ou sintéticos para adaptá-lo a robôs humanoides ou tarefas específicas.

O GR00T usa codificadores pré-treinados de visão e linguagem com um transformer de ações de correspondência de fluxo para modelar um conjunto de ações condicionado à visão, à linguagem e à propriocepção.

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/lerobot-groot-paper1%20(1).png"
  alt="An overview of GR00T"
  width="80%"
/>

Seu forte desempenho se deve ao treinamento em um conjunto de dados humanoide extenso e diversificado, que inclui:

- Dados reais capturados de robôs.
- Dados sintéticos gerados usando o NVIDIA Isaac GR00T Blueprint.
- Dados de vídeo em escala de internet.

Essa abordagem permite que o modelo seja altamente adaptável por meio de pós-treino para incorporações, tarefas e ambientes específicos.

## Requisitos de instalação

GR00T é destinado a sistemas com aceleração por GPU da NVIDIA. Instale o LeRobot com o extra GR00T:

```bash
pip install "lerobot[groot]"
```

Para uma verificação de origem:

```bash
pip install -e ".[groot]"
```

## Uso

Para usar o GR00T N1.7:

```bash
--policy.type=groot
```

## Treinamento

### Exemplo de Comando de Treinamento

Aqui está um comando completo de treinamento para fazer o ajuste fino do modelo base GR00T no seu próprio conjunto de dados:

Este comando utiliza a flag `new_embodiment`, que é usada para o robô SO-101, [leia mais sobre como o GR00T lida com diferentes embodiments.](https://github.com/NVIDIA/Isaac-GR00T/blob/main/getting_started/policy.md#--embodiment-tag).

```bash
# install extra deps for training
pip install "lerobot[training]"

hf auth login
# Trackio needs no login for local runs; pass --trackio.space_id=<user>/<space> to sync runs to a Hugging Face Space.

export DATASET_NAME=your_data_set
export HF_USER=your_hf_username
export DATASET=$HF_USER/$DATASET_NAME
export REPO_ID="${DATASET}_GR00T17" #this is the model that will be uploaded to huggingface
export OUTPUT_DIR=outputs/train/$REPO_ID

lerobot-train \
  --dataset.repo_id=$DATASET \
  --dataset.image_transforms.enable=true \
  --policy.type=groot \
  --policy.device=cuda \
  --policy.base_model_path=nvidia/GR00T-N1.7-3B \
  --policy.embodiment_tag=new_embodiment \
  --policy.chunk_size=16 \
  --policy.n_action_steps=16 \
  --policy.use_relative_actions=true \
  --policy.relative_exclude_joints='["gripper"]' \
  --policy.use_bf16=true \
  --policy.push_to_hub=true \
  --policy.repo_id=$REPO_ID \
  --seed=42 \
  --batch_size=64 \
  --steps=20000 \
  --save_checkpoint=true \
  --save_freq=5000 \
  --use_policy_training_preset=true \
  --env_eval_freq=0 \
  --eval_steps=0 \
  --log_freq=10 \
  --output_dir=$OUTPUT_DIR \
  --job_name=$DATASET \
  --trackio.enable=true \
  --trackio.disable_artifact=true

```

## Resultados de Desempenho

### Resultados do Benchmark LIBERO

> [!NOTE]
> Siga as instruções de configuração do [LIBERO](./libero) antes de executar `lerobot-eval`.

O GR00T N1.7 demonstrou um desempenho robusto na suíte de benchmarks LIBERO. Para reproduzir os resultados do LeRobot, siga as instruções na seção [LIBERO](./libero).

### Treinar no LIBERO

Exemplo de comando de treinamento para uma suíte LIBERO (aqui `libero_spatial`):

```bash
IMAGE_TRANSFORMS='{
  "brightness": {"weight": 1.0, "type": "ColorJitter", "kwargs": {"brightness": [0.7, 1.3]}},
  "contrast":   {"weight": 1.0, "type": "ColorJitter", "kwargs": {"contrast":   [0.6, 1.4]}},
  "saturation": {"weight": 1.0, "type": "ColorJitter", "kwargs": {"saturation": [0.5, 1.5]}},
  "hue":        {"weight": 1.0, "type": "ColorJitter", "kwargs": {"hue":        [-0.08, 0.08]}}
}'

lerobot-train \
  --dataset.repo_id=IPEC-COMMUNITY/libero_spatial_no_noops_1.0.0_lerobot \
  --dataset.root=/datasets/libero_spatial \
  --dataset.revision=main \
  --dataset.video_backend=pyav \
  --dataset.image_transforms.enable=true \
  --dataset.image_transforms.max_num_transforms=4 \
  --dataset.image_transforms.tfs="$IMAGE_TRANSFORMS" \
  --policy.type=groot \
  --policy.base_model_path=nvidia/GR00T-N1.7-3B \
  --policy.embodiment_tag=libero_sim \
  --policy.push_to_hub=false \
  --policy.use_relative_actions=false \
  --policy.max_steps=20000 \
  --batch_size=320 \
  --steps=20000 \
  --save_freq=2000 \
  --env_eval_freq=0 \
  --eval_steps=0 \
  --log_freq=10 \
  --trackio.enable=true \
  --trackio.project=lerobot \
  --trackio.disable_artifact=true \
  --num_workers=4 \
  --prefetch_factor=2 \
  --persistent_workers=true \
  --output_dir=$OUTPUT_DIR \
  --job_name=$JOB_NAME
```

Isso seguirá a receita encontrada [aqui](https://github.com/NVIDIA/Isaac-GR00T/blob/main/examples/LIBERO/README.md).

### Resultados do GR00T N1.7 LIBERO

Resultados preliminares da integração do LeRobot (GR00T-LeRobot, `eval.n_episodes >= 50` por suíte):

| Suite            | Taxa de sucesso | Checkpoint                                                                                                    |
| ---------------- | -----------: | ------------------------------------------------------------------------------------------------------------- |
| LIBERO Spatial   |          95% | [nvidia/gr00t17-lerobot-libero_spatial-640](https://huggingface.co/nvidia/gr00t17-lerobot-libero_spatial-640) |
| Objeto LIBERO    |         100% | [nvidia/gr00t17-lerobot-libero_object-640](https://huggingface.co/nvidia/gr00t17-lerobot-libero_object-640)   |
| Objetivo do LIBERO      |          98% | [nvidia/gr00t17-lerobot-libero_goal-640](https://huggingface.co/nvidia/gr00t17-lerobot-libero_goal-640)       |
| LIBERO 10 (Long) |          93% | [nvidia/gr00t17-lerobot-libero_10-640](https://huggingface.co/nvidia/gr00t17-lerobot-libero_10-640)           |
| **Média**      |    **96.5%** |                                                                                                               |

```bash
export MODEL_ID=your_trained_model_on_huggingface

lerobot-eval \
  --policy.path=$MODEL_ID \
  --policy.embodiment_tag=libero_sim \
  --env.type=libero \
  --env.task=libero_spatial \
  --eval.n_episodes=50
```

Use `eval.n_episodes >= 50` por suite ao relatar as taxas de sucesso.

### Avalie em sua configuração de hardware

Depois de treinar seu modelo usando seus parâmetros, você pode executar inferência em sua tarefa de ponta final. Siga as instruções em [Policy Deployment (lerobot-rollout)](./inference). Por exemplo:

```bash
# install extra deps for roullout and real hardware
pip install "lerobot[feetech,viz]"

export MODEL_ID=your_trained_model_on_huggingface

# make sure that camera index matches your setup!
# find index using `uv run lerobot-find-cameras opencv`
WRIST_CAM='wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"}'
FRONT_CAM='front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}'
export ROBOT_CAMERAS="{ $WRIST_CAM, $FRONT_CAM }"
export ROBOT_ID=follower_robot
export ROBOT_PORT=/dev/ttyACM0

# Set --inference.rtc.enabled=False if RTC causes inference instability
uv run lerobot-rollout \
  --strategy.type=base \
  --policy.path=$MODEL_ID \
  --policy.base_model_path=nvidia/GR00T-N1.7-3B \
  --policy.n_action_steps=8 \
  --robot.type=so101_follower \
  --robot.port=$ROBOT_PORT \
  --robot.id=$ROBOT_ID \
  --robot.cameras="$ROBOT_CAMERAS" \
  --task="place the vial in the rack" \
  --duration=60 \
  --device=cuda \
  --display_data=true \
  --inference.type=rtc \
  --inference.rtc.enabled=True \
  --inference.rtc.execution_horizon=8 \
  --inference.queue_threshold=0
```

> [!NOTE]
> O valor de `inference.queue_threshold` não deve exceder 5 para garantir uma inferência estável.

## Licença

O GR00T N1.7 é lançado sob o [NVIDIA Open Model License Agreement](https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/).

