Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
931802a
Added local envionment for Go2
clayton-littlejohn Jan 26, 2026
58bb6a4
Add generic local asset resolution system for offline training
clayton-littlejohn Jan 27, 2026
94f10b4
minor refactors for offline mode
clayton-littlejohn Jan 27, 2026
d335006
Added offline asset documentation
clayton-littlejohn Jan 27, 2026
14b7e50
offline mode to /play
clayton-littlejohn Jan 27, 2026
e98441f
offline to shared command-line arguments
clayton-littlejohn Jan 27, 2026
94d82d5
offline mode for all (sb3, SKRL, RL Games, Sim2Sim)
clayton-littlejohn Jan 27, 2026
a52df7c
better asset downloader feedback and resolver
clayton-littlejohn Jan 27, 2026
52a1dcd
documentation clarifications
clayton-littlejohn Jan 27, 2026
e45aae2
minor cleanup
clayton-littlejohn Jan 28, 2026
b792c50
gitignored
clayton-littlejohn Jan 28, 2026
3a27bcb
more useful comment
clayton-littlejohn Jan 28, 2026
325d991
formatting
clayton-littlejohn Jan 28, 2026
32059f9
more formatting
clayton-littlejohn Jan 28, 2026
7bf8d81
Merge branch 'isaac-sim:main' into offline_mode
clayton-littlejohn Jan 28, 2026
3f403e1
I have added my name to the CONTRIBUTORS.md
clayton-littlejohn Jan 28, 2026
9f7b50b
linting and formatting
clayton-littlejohn Jan 28, 2026
ed00a5c
import directly from asset_resolver
clayton-littlejohn Jan 28, 2026
1adaa33
Optional[str] for better compatibility
clayton-littlejohn Jan 28, 2026
e872600
forgot some Optional[str]
clayton-littlejohn Jan 28, 2026
09b5bb4
Keep the str | None syntax
clayton-littlejohn Jan 28, 2026
e067e30
Merge branch 'isaac-sim:main' into offline_mode
clayton-littlejohn Jan 28, 2026
f7253d3
Added global offline to AppLauncher, propogates to all
clayton-littlejohn Jan 28, 2026
aa252fc
Documentation updates
clayton-littlejohn Jan 28, 2026
d52286f
clarification
clayton-littlejohn Jan 28, 2026
6c05a80
nucleus mirror patches & offline strict/permissive flag
clayton-littlejohn Jan 29, 2026
f71d0d4
Merge branch 'isaac-sim:main' into offline_mode
clayton-littlejohn Feb 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,6 @@ tests/
# TacSL sensor
**/tactile_record/*
**/gelsight_r15_data/*

# Downloaded assets
offline_assets/*
1 change: 1 addition & 0 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ Guidelines for modifications:
* Cathy Y. Li
* Cheng-Rong Lai
* Chenyu Yang
* Clayton Littlejohn
* Connor Smith
* CY (Chien-Ying) Chen
* David Yang
Expand Down
145 changes: 145 additions & 0 deletions scripts/offline_setup/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# Isaac Lab Offline Training Setup
> Complete guide for training Isaac Lab environments offline using locally downloaded assets.

## 🎯 Overview
#### The offline training system enables you to train Isaac Lab environments without internet connectivity by using locally downloaded assets. This system:
- ✅ Works with any robot - No hardcoded paths needed
- ✅ Single flag - Add `--offline` to your training, tutorial, and demo commands
- ✅ Fallback flag - Add `--offline-permissive` to your commands to fallback to Nucleus for asset not found in `offline_assets`
- ✅ Maintains structure - Mirrors Nucleus directory organization locally

## 📦 Requirements
- Isaac Lab installed and working
- Isaac Sim 5.0 or later
- 2-60 GB free disk space (depending on assets downloaded)
- Internet connection for initial asset download

## 🚀 Quick Start
### 1. Download essential assets (one-time, `all` ~60 GB)
#### Assets download to the `~/IsaacLab/offline_assets` directory: `cd ~/IsaacLab`
```
./isaaclab.sh -p scripts/offline_setup/download_assets.py \
--categories all
```
#### _Alternative Note: Category fields can be specified separately_
```
./isaaclab.sh -p scripts/offline_setup/download_assets.py \
--categories Robots --subset Unitree
```

### Successful Downloads
```
======================================================================
📊 Downloaded Assets Summary
======================================================================
Location: ~/IsaacLab/offline_assets

✓ Environments 34,437 files 17.0 GB
✓ IsaacLab 4,197 files 9.3 GB
✓ Materials 1,918 files 537.0 MB
✓ People 3,085 files 9.4 GB
✓ Props 2,507 files 4.2 GB
✓ Robots 4,687 files 5.3 GB
✓ Samples 6,601 files 10.4 GB
✓ Sensors 772 files 256.7 MB
======================================================================
TOTAL 58,204 files 56.3 GB
======================================================================

✅ Complete! Use --offline flag with Isaac Lab commands.

Offline mirror: ~/IsaacLab/offline_assets
```

### 2. Train completely offline with any robot via the `--offline` flag (also works with `/play`)
#### Supported for: `rl_games`, `rsl_rl`, `sb3`, `skrl`, and `sim2transfer`
```
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py \
--task Isaac-Velocity-Rough-Unitree-Go2-v0 \
--num_envs 64 \
--max_iterations 10 \
--offline

./isaaclab.sh -p scripts/reinforcement_learning/skrl/train.py \
--task Isaac-Velocity-Flat-H1-v0 \
--num_envs 64 \
--max_iterations 10 \
--offline

./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/play.py \
--task Isaac-Velocity-Flat-Unitree-Go2-v0 \
--num_envs 128 \
--checkpoint logs/rsl_rl/<robot>_flat/<timestamp>/model_<num>.pt \
--video \
--video_length 1000 \
--offline
```
#### Run various demos and tutorials with `--offline` flag

```
./isaaclab.sh -p scripts/demos/quadrupeds.py --offline

./isaaclab.sh -p scripts/demos/arms.py --offline

./isaaclab.sh -p scripts/tutorials/01_assets/run_articulation.py --offline
```

#### Strict mode (default) - fails immediately if asset not found locally
```
./isaaclab.sh -p train.py --task Go2 --offline
```

#### Permissive mode - warns and falls back to Nucleus if asset not found
```
./isaaclab.sh -p train.py --task Go2 --offline-permissive
```

#### Environment variables work too
```
OFFLINE=1 ./isaaclab.sh -p train.py --task Go2
OFFLINE_PERMISSIVE=1 ./isaaclab.sh -p train.py --task Go2
```

### Missing Assets
```
======================================================================
[OfflineAssetResolver] ✗ ASSET NOT FOUND (offline mode)
======================================================================
Missing: IsaacLab/Robots/Unitree/Go2/go2.usd
Expected: ~/IsaacLab/offline_assets/IsaacLab/Robots/Unitree/Go2/go2.usd

To download this asset, run:
./isaaclab.sh -p scripts/offline_setup/download_assets.py --categories IsaacLab/Robots
```

#### _Note: For offline training, assets that cannot be found in `offline_assets` will attempted to be fetched from the [Nucleus Server](https://docs.omniverse.nvidia.com/nucleus/latest/index.html)_ when using the `--offline-permissive` flag.

## 📁 Asset Layout
#### Offline assets are organized to mirror Nucleus (`ISAAC_NUCLEUS_DIR` & `ISAACLAB_NUCLEUS_DIR`) under the `offline_assets` directory, meaning that no code changes are required for offline running! We flatten `Isaac/IsaacLab/` to just the category names (`Robots/`, `Controllers/`, etc.) for cleaner local structure. This happens in `asset_resolver.py`, where the resolver maintains a 1:1 mapping between Nucleus and local storage.

```
IsaacLab/
├── source/isaaclab/isaaclab/utils/
│ └── asset_resolver.py # Core resolver
├── scripts/setup/
│ └── download_assets.py # Asset downloader
└── offline_assets/ ← Mirror of Isaac/
├── IsaacLab/
│ ├── Robots/
│ │ ├── ANYbotics/
│ │ │ ├── ANYmal-B/
│ │ │ ├── ANYmal-C/
│ │ │ └── ANYmal-D/
│ │ ├── Unitree/
│ │ └── FrankaEmika/
│ ├── ActuatorNets/
│ ├── Controllers/
│ └── Policies/
├── Props/
│ └── UIElements/
├── Environments/
│ └── Grid/
├── Materials/
│ └── Textures/
└── Robots/ ← Isaac Sim robots (different from IsaacLab/Robots)
```
Loading
Loading