agentleFS
Seeed-ProjectsSeeed-Projects/Seeed-Jetson-DevelopTool/skills/codex/gr00t-n1-5-deploy-thor/AGENTS.md

Seeed-Jetson-DevelopTool / gr00t-n1-5-deploy-thor

AGENTS.md57 starsChanged 4 months agoMITView on GitHub

Fine-tune NVIDIA Isaac GR00T N1.5 for the LeRobot SO-101 arm and deploy on Jetson AGX Thor. Covers Thor flashing, dev environment setup, SO-ARM data collection, cloud training via NVIDIA Brev, and GR00T N1.5 inference on Thor. Requires Jetson AGX Thor and SO-101 arm hardware.

  • Installs packages

The file

We split this AGENTS.md into the rules it gives an agent

7 rules. About 0 are common, 5 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Run one phase at a time. After each phase:

    line 12
  2. Very specific:

    If output contains [STOP] → stop immediately, consult the failure decision tree below.

    line 14
  3. Very specific:

    If output ends with [OK] → tell the user "Phase N complete" and proceed to the next phase.

    line 15
  4. Distinctive:

    Create bootable USB with Balena Etcher (https://etcher.balena.io/):

    line 36
  5. Distinctive:

    Wait ~15 minutes for flashing, then wait for Update Progress to reach 100%.

    line 45
  6. Distinctive:

    Follow the complete SO-ARM tutorial at: https://wiki.seeedstudio.com/lerobot_so100m_new/

    line 88
  7. Distinctive:

    Add cameras (wrist + front)

    line 95

≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
AGENTS.md

Fine-tune GR00T N1.5 for LeRobot SO-101 Arm and Deploy on Jetson Thor


Execution model

Run one phase at a time. After each phase:

  • Relay all command output to the user.
  • If output contains [STOP] → stop immediately, consult the failure decision tree below.
  • If output ends with [OK] → tell the user "Phase N complete" and proceed to the next phase.

Prerequisites

RequirementDetails
HardwareNVIDIA Jetson AGX Thor Developer Kit
Robot armLeRobot SO-101 (leader + follower)
Cameras2× USB cameras (wrist + front)
FlashingUSB drive ≥16GB, monitor, DP/HDMI cable, 240W+ power, USB keyboard
Cloud trainingGPU with ≥25GB VRAM (Ampere or newer — V100 not supported)
System imageThor v38.2 (latest as of Sept 2025)

Phase 1 — Flash Thor system image (~20 min)

Download the ISO image from https://developer.nvidia.com/embedded/jetpack/downloads (select Thor 38.2).

Create bootable USB with Balena Etcher (https://etcher.balena.io/):

  1. Select the ISO image
  2. Select the USB drive as target
  3. Click Flash and wait for completion

Insert USB, keyboard, display cable, and power into Thor. Boot and select:

  • Boot Manager → select USB drive → Esc → Continue
  • Jetson Thor options → Flash Jetson AGX Thor Developer Kit on NVMe

Wait ~15 minutes for flashing, then wait for Update Progress to reach 100%.

[OK] when Ubuntu 24.04 initial setup screen appears. [STOP] if screen goes black — see FAQ in source.


Phase 2 — Install development dependencies (~10–20 min)

Install JetPack SDK:

sudo apt update
sudo apt install nvidia-jetpack

Install additional tools:

sudo apt install firefox python3 python3-pip
sudo pip3 install -U pip
sudo pip3 install jetson-stats

Install Miniconda:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
chmod +x Miniconda3-latest-Linux-aarch64.sh
./Miniconda3-latest-Linux-aarch64.sh
source ~/.bashrc
conda --version

For GPU PyTorch on Thor, download pre-compiled wheels (Python 3.10 + CUDA 13):

[OK] when conda --version and python3 -c "import torch; print(torch.cuda.is_available())" both succeed.


Phase 3 — Data collection with SO-ARM

Follow the complete SO-ARM tutorial at: https://wiki.seeedstudio.com/lerobot_so100m_new/

Key steps:

  1. Configure motors before assembly
  2. Assemble leader and follower arms
  3. Calibrate both arms (do NOT connect cameras during calibration)
  4. Add cameras (wrist + front)
  5. Record dataset episodes

On Thor, two USB cameras must be on different USB hub controllers. Use one USB-A port and one external USB-C hub.

[OK] when dataset is collected and saved locally.


Phase 4 — Train GR00T N1.5 on cloud (~varies)

Set up NVIDIA Brev (https://login.brev.nvidia.com/signin) or equivalent cloud GPU.

On the cloud server, install Conda and clone Isaac-GR00T:

mkdir -p ~/miniconda3 && cd ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
bash miniconda.sh -b -u -p ~/miniconda3
source ~/miniconda3/bin/activate
conda init --all
git clone https://github.com/NVIDIA/Isaac-GR00T
cd Isaac-GR00T
conda create -n gr00t python=3.10
conda activate gr00t
pip install --upgrade setuptools
pip install -e .[base]
pip install --no-build-isolation flash-attn==2.7.1.post4

Fine-tune:

python scripts/gr00t_finetune.py \
   --dataset-path ./demo_data/so101-table-cleanup/ \
   --num-gpus 1 \
   --output-dir ./so101-checkpoints \
   --max-steps 10000 \
   --data-config so100_dualcam \
   --video-backend torchvision_av

Default fine-tuning requires ~25GB VRAM. Add --no-tune_diffusion_model to reduce VRAM usage.

Download the trained checkpoint from the cloud server.

[OK] when checkpoint files are available locally on Thor.


Phase 5 — Run GR00T N1.5 inference on Thor

Pull the reference Docker image (or use your own environment):

docker pull johnnync/isaac-gr00t:r38.2.arm64-sbsa-cu130-24.04

Start the container:

sudo docker run --rm -it \
  --network=host \
  -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,video,graphics \
  --runtime nvidia \
  --privileged \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v /etc/X11:/etc/X11 \
  --device /dev/nvhost-vic \
  -v /dev:/dev \
  johnnync/isaac-gr00t:r38.2.arm64-sbsa-cu130-24.04

Inside the container, install GR00T:

git clone https://github.com/NVIDIA/Isaac-GR00T.git
cd Isaac-GR00T
pip install --upgrade setuptools
pip install -e .[thor]

Terminal 1 — Start inference server:

python scripts/inference_service.py --server \
    --model_path ./so101-checkpoints \
    --embodiment-tag new_embodiment \
    --data-config so100_dualcam \
    --denoising-steps 4

Terminal 2 — Start inference client (in same container via docker exec):

python examples/SO-100/eval_lerobot.py \
    --robot.type=so100_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_awesome_follower_arm \
    --robot.cameras="{ wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, front: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}" \
    --policy_host=0.0.0.0 \
    --lang_instruction="Grab pens and place into pen holder."

Replace index_or_path with your camera indices (find with ls /dev/video*).

[OK] when the robot arm executes the learned behavior.


Failure decision tree

SymptomAction
Thor screen goes black during flashEnable SoC Display Hand-Off in UEFI setup menu. Flashing continues in background.
No HDMI signal after flashSwitch to DisplayPort (DP) connector.
No keyboard input during flashUse a wired USB keyboard. Wireless keyboards may not work.
KVM no video outputConnect monitor directly to Thor, bypassing KVM.
Cloud fine-tuning "GPU not supported"Use Ampere or newer GPU (RTX A6000, RTX 4090). V100 is not supported.
/dev/ttyACM0 not found for armThor may lack CH34x drivers. Install from https://github.com/juliagoda/CH341SER
Type-C hub not recognizedUse the Type-C port closest to the QSFP28 connector.
OOM during fine-tuningAdd --no-tune_diffusion_model flag. Or use a GPU with more VRAM.
Two USB cameras can't stream simultaneouslyCameras must be on different USB hub controllers. Use USB-A + external USB-C hub.
ACT inference fails in GR00T Docker imageThe GR00T Docker image (Python 3.12) doesn't support LeRobot ACT inference. Use external environment.
User password incorrect after flash with capture cardKeyboard input bug with capture cards. Re-flash and verify password carefully.

Reference files

  • references/source.body.md — full original Seeed tutorial with Thor flashing screenshots, Docker image pip list, Brev platform walkthrough, and FAQ (reference only)

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.