07. Isaac Lab (RL 학습 프레임워크)
Isaac Lab은 NVIDIA가 Isaac Gym의 후속으로 발표한 GPU 가속 RL 학습 프레임워크다. 한 GPU에서 수천 환경을 병렬 굴려 PPO/SAC를 학습한다.
이 기능의 강점
- 한 GPU에서 4,096+ 환경 병렬 강화학습 (Cartpole/Manipulation/Locomotion)
- RL Games · rsl_rl · skrl 같은 RL 라이브러리 어댑터
- Domain randomization · curriculum · adversarial test 표준 컴포넌트
- 학습된 정책을 그대로 실로봇 onnx 추론으로 보낼 수 있는 sim-to-real 가이드
구현 방법
본 컨테이너에 git clone + pip install -e source/{isaaclab,isaaclab_assets,isaaclab_tasks,isaaclab_rl,isaaclab_contrib,isaaclab_mimic}로 설치. SimulationApp을 띄운 후 import isaaclab_tasks로 환경 등록 트리거.
최소 데모
검증 결과
설치 후 172개의 Isaac-* Gym 환경이 등록됨 (Cartpole-Direct-v0, Velocity-Flat-H1, Manipulation-Cube-Franka-IK-Abs-v0 등). 본 프로젝트 컨테이너에서 직접 검증.
핵심 코드 발췌
# /tmp/IsaacLab에 git clone, 컨테이너에 pip install
cd /tmp/IsaacLab
/isaac-sim/python.sh -m pip install -e isaaclab
/isaac-sim/python.sh -m pip install -e isaaclab_assets
/isaac-sim/python.sh -m pip install -e isaaclab_tasks
/isaac-sim/python.sh -m pip install -e isaaclab_rl
/isaac-sim/python.sh -m pip install -e isaaclab_contrib
# 실행 시 import
from isaacsim import SimulationApp
sim = SimulationApp({"headless": True})
import isaaclab, isaaclab_tasks
import gymnasium as gym
env_names = [e for e in gym.registry.keys() if e.startswith("Isaac-")]
print(len(env_names)) # 172
코드 다운로드 (zip)
실무 예제 — CartpoleEnv 4환경 병렬 인스턴스화 + RTX 렌더
Isaac Lab Direct RL Env 인터페이스로 CartpoleEnv 4개 환경을 GPU에서 병렬 인스턴스화. 각 환경은 카트 + 폴 + 그리드 바닥으로 구성되며, 같은 SimulationApp에서 외부 카메라로 4환경을 한 컷에 캡처.
본 컨테이너에서 검증 — 172개 Isaac-* 환경 자동 등록 + CartpoleEnv(cfg=CartpoleEnvCfg(scene.num_envs=4)) 정상 인스턴스화 + RTX 렌더로 카메라 1대에 4환경 모두 캡처. ISAACLAB_NUCLEUS_DIR은 get_assets_root_path()로 자동 설정.
실무 데모 코드
import carb.settings
from isaacsim.storage.native import get_assets_root_path
# Isaac Lab이 cartpole.usd를 받아올 클라우드 루트 지정
carb.settings.get_settings().set(
"/persistent/isaac/asset_root/cloud", get_assets_root_path())
from isaaclab_tasks.direct.cartpole.cartpole_env import CartpoleEnv, CartpoleEnvCfg
import torch
cfg = CartpoleEnvCfg()
cfg.scene.num_envs = 4
cfg.sim.device = "cuda:0"
env = CartpoleEnv(cfg=cfg, render_mode=None)
obs, info = env.reset()
for _ in range(20):
a = torch.randn(4, env.cfg.action_space, device="cuda:0")
env.step(a)
실무 데모 코드 zip