Minho Lee

Master's Student

Robotics Engineer

AI Researcher

Blogger

Blog Post

Isaac Lab Tutorial #1 - Introduction

Feb 08, 2025 Simulation
Isaac Lab Tutorial #1 - Introduction

๐Ÿ“Œ ์ตœ๊ทผ ๋กœ๋ด‡ ์—ฐ๊ตฌ์—์„œ ๋กœ๋ณดํ‹ฑ์Šค ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ๋ชจ๋ธ ์„ฑ๋Šฅ ๊ฒ€์ฆ, ํ•™์Šต ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์ถ•, ๋Œ€๊ทœ๋ชจ ํ•ฉ์„ฑ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ชฉ์ ์œผ๋กœ ํ™œ์šฉ๋˜๊ณ  ์žˆ๋‹ค. ๋กœ๋ด‡ ํ•™์Šต ๋ฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์ด ์กด์žฌํ•˜๋Š” ๊ฐ€์šด๋ฐ, NVIDIA์˜ Isaac Lab์€ GPU ๊ฐ€์†, CUDA, TensorRT ๋“ฑ์˜ ๋”ฅ๋Ÿฌ๋‹ SDK์™€ Omniverse Isaac Sim์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ ํ’ˆ์งˆ ๊ทธ๋ž˜ํ”ฝ๊ณผ ์‹ค์‹œ๊ฐ„ ๋ ˆ์ดํŠธ๋ ˆ์ด์‹ฑ์„ ์ง€์›ํ•˜๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง•๋“ค์€ Embodied AI๋ฅผ ์—ฐ๊ตฌํ•˜๋Š” ์—ฐ๊ตฌ์ž๋“ค์—๊ฒŒ ๊ฐ•๋ ฅํ•˜๊ณ  ํšจ๊ณผ์ ์ธ ์†”๋ฃจ์…˜์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

๋‚˜ ์—ญ์‹œ๋„ Isaac Lab์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์€ ํ–ฅํ›„ ์—ฐ๊ตฌ์— ๋งŽ์€ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ, Isaac Lab์˜ ๊ธฐ๋ณธ์ ์ธ ํŠœํ† ๋ฆฌ์–ผ๋ถ€ํ„ฐ ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฑฐ์ณ ์‹ค์ œ ์—ฐ๊ตฌ ์ ์šฉ๊นŒ์ง€์˜ ๊ณผ์ •์„ ์ •๋ฆฌํ•˜์—ฌ ํฌ์ŠคํŒ…ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

1. Before Getting Started

1.1. NGC(NVIDIA GPU Cloud) Container

NGC์—์„œ๋Š” AI, ๋จธ์‹  ๋Ÿฌ๋‹ ๋ฐ ๊ณ ์„ฑ๋Šฅ ์ปดํ“จํŒ…(HPC)์„ ์œ„ํ•œ ์ปจํ…Œ์ด๋„ˆ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์‚ฌ์ „ ํ•™์Šต๋œ AI ๋ชจ๋ธ๊ณผ ์‹œ๊ฐํ™” ๋„๊ตฌ๋ฅผ ํฌํ•จํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์Šคํƒ์„ ์ง€์›ํ•œ๋‹ค. AI ๋ชจ๋ธ ๊ตฌ์ถ•์€ ๋ณต์žกํ•˜๊ณ  ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š”๋ฐ NGC์˜ ํ†ตํ•ฉ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์€ ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๊ณ  AI ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์†ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค€๋‹ค.

๋˜ํ•œ, NGC๋Š” AI ๋ชจ๋ธ ๊ฐœ๋ฐœ์— ์ตœ์ ํ™”๋œ Docker ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ TensorFlow, PyTorch ๋“ฑ ์ฃผ์š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํญ๋„“๊ฒŒ ์ง€์›ํ•˜์—ฌ GPU ๊ด€๋ จ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ NVIDIA NGC Catalog์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์•ˆ์—์„œ NVIDIA Isaac Lab๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

2. Build the Isaac Lab container

Issac Lab ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด, Dockerfile๊ณผ docker-compose.yml, .env ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” Root GitHub Repository๋ฅผ ํด๋ก ํ•œ๋‹ค.

$ git clone https://github.com/isaac-sim/IsaacLab.git

ํด๋ก ํ•ด์˜จ IsaacLab ์ €์žฅ์†Œ์˜ ./docker ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” Docker ๋ฐ ROS2 ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํŒŒ์ผ๋“ค์ด ์œ„์น˜ํ•ด ์žˆ๋‹ค.

container.py์™€ container.sh์€ Isaac Lab์˜ Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ Python ๋ฐ Bash ์Šคํฌ๋ฆฝํŠธ์ด๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ด๋ณด์ž.

$ cd IsaacLab
$ python3 docker/container.py start

container.py๋Š” Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ CLI ๋ช…๋ น์–ด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ฃผ์š” ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • start: ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰
  • enter: ์‹คํ–‰ ์ค‘์ธ Isaac Lab ์ปจํ…Œ์ด๋„ˆ์— ์ƒˆ bash ํ”„๋กœ์„ธ์Šค๋กœ ์ง„์ž…
  • config: ์ œ๊ณต๋œ YAML ๋ฐ ํ™˜๊ฒฝ ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ docker-compose.yaml ์ƒ์„ฑ ๋˜๋Š” ์ถœ๋ ฅ
  • copy: ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ ๋ฐ ๋กœ๊ทธ ํŒŒ์ผ์„ ํ˜ธ์ŠคํŠธ๋กœ ๋ณต์‚ฌ
  • stop: ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ์‚ญ์ œ

์ด๋ฏธ์ง€ ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

$ python3 docker/container.py enter

์ด ํ™˜๊ฒฝ์—์„œ๋Š” Isaac Lab ์ €์žฅ์†Œ์˜ ์‚ฌ๋ณธ์„ ํฌํ•จํ•˜๋ฉฐ, Isaac Sim์˜ ๋””๋ ‰ํ† ๋ฆฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ, ์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” ํ˜ธ์ŠคํŠธ ์žฅ์น˜์˜ IsaacLab ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋งˆ์šดํŠธ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ŠคํŠธ์—์„œ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์˜ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋ฉด Docker ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•  ํ•„์š” ์—†์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ปจํ…Œ์ด๋„ˆ์— ์ฆ‰์‹œ ๋ฐ˜์˜๋œ๋‹ค.

3. Training with an RL Agent

์ด์ œ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ Isaac Lab ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ํฌํ•จ๋œ PPO ์—์ด์ „ํŠธ๋ฅผ Stable-Baseline3๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Cartpole balancing task๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ•ํ™”ํ•™์Šต ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๊ณ  ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

์ด ํŠœํ† ๋ฆฌ์–ผ๊ณผ ๊ด€๋ จ๋œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

$ ./isaaclab.sh -p scripts/reinforcement_learning/sb3/train.py --task Isaac-Cartpole-v0 --num_envs 64 --headless --video --max_iterations 2000

[INFO]: Time taken for scene creation : 1.056965 seconds
[INFO]: Scene manager:  <class InteractiveScene>
	Number of environments: 64
	Environment spacing   : 4.0
	Source prim name      : /World/envs/env_0
	Global prim paths     : []
	Replicate physics     : True
[INFO]: Starting the simulation. This may take a few seconds. Please wait...

์—์ด์ „ํŠธ๋ฅผ ํ›ˆ๋ จํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ , ํ”Œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. Headless execution: --headless ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜๋ฉด ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ํ›ˆ๋ จ ์ค‘์— ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š”๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌผ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋‹จ๊ณ„๋งŒ ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ›ˆ๋ จ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.
$ ./isaaclab.sh -p scripts/reinforcement_learning/sb3/train.py --task Isaac-Cartpole-v0 --num_envs 64 --headless
  1. Headless execution with off-screen render: ์œ„์˜ headless ์‹คํ–‰์€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ›ˆ๋ จ ์ค‘์— ์—์ด์ „ํŠธ์˜ ํ–‰๋™์„ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์—†๋‹ค. ์—์ด์ „ํŠธ์˜ ํ–‰๋™์„ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์˜คํ”„์Šคํฌ๋ฆฐ ๋ Œ๋”๋ง์„ ํ™œ์„ฑํ™”(--enable_cameras)ํ•˜๊ณ  ํ›ˆ๋ จ ์ค‘์— ์—์ด์ „ํŠธ์˜ ํ–‰๋™์„ ๋…นํ™”(--video)ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
$ ./isaaclab.sh -p scripts/reinforcement_learning/sb3/train.py --task Isaac-Cartpole-v0 --num_envs 64 --headless --video

์ €์žฅ๋œ ๋น„๋””์˜ค๋Š” logs/sb3/Isaac-Cartpole-v0/$run-dir/videos/train ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค.

  1. Interactive execution: ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—์ด์ „ํŠธ๊ฐ€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋ฉฐ ํ›ˆ๋ จ๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ํ™”๋ฉด์— ๋ Œ๋”๋ง๋˜๋ฏ€๋กœ ํ›ˆ๋ จ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ํ™”๋ฉด ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ์— ๋„ํ‚น๋œ ์ฐฝ์—์„œ ๋‹ค๋ฅธ ๋ Œ๋”๋ง ๋ชจ๋“œ ๊ฐ„์— ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
$ ./isaaclab.sh -p scripts/reinforcement_learning/sb3/train.py --task Isaac-Cartpole-v0 --num_envs 64

๋ณ„๋„์˜ ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ํ•™์Šต ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

$ ./isaaclab.sh -p -m tensorboard.main --logdir logs/sb3/Isaac-Cartpole-v0

ํ›ˆ๋ จ์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ํ›ˆ๋ จ๋œ ์—์ด์ „ํŠธ๋ฅผ Isaac Sim์—์„œ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

$ ./isaaclab.sh -p scripts/reinforcement_learning/sb3/play.py --task Isaac-Cartpole-v0 --num_envs 32 --use_last_checkpoint

4. Trained Agent Visualization

์—์ด์ „ํŠธ์˜ ํ›ˆ๋ จ์ด ์™„๋ฃŒ๋˜๋ฉด ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

------------------------------------------
| rollout/                |              |
|    ep_len_mean          | 293          |
|    ep_rew_mean          | 4.82         |
| time/                   |              |
|    fps                  | 6365         |
|    iterations           | 2000         |
|    time_elapsed         | 321          |
|    total_timesteps      | 2048000      |
| train/                  |              |
|    approx_kl            | 0.0043435125 |
|    clip_fraction        | 0.0512       |
|    clip_range           | 0.2          |
|    entropy_loss         | -0.0181      |
|    explained_variance   | 0.57         |
|    learning_rate        | 0.0003       |
|    loss                 | 0.0119       |
|    n_updates            | 39980        |
|    policy_gradient_loss | -0.00246     |
|    std                  | 0.247        |
|    value_loss           | 0.017        |
------------------------------------------
Saving model checkpoint to /workspace/isaaclab/logs/sb3/Isaac-Cartpole-v0/2025-02-07_07-05-22/model_2048000_steps.zip

์•„๋ž˜๋Š” ์˜คํ”„์Šคํฌ๋ฆฐ ๋ Œ๋”๋ง์„ ์‚ฌ์šฉํ•˜์—ฌ ์—์ด์ „ํŠธ์˜ ํ›ˆ๋ จ ์ค‘ ํ–‰๋™์„ ์Šคํ… 0, 2000, 30000์—์„œ ์ €์žฅ๋œ ์˜์ƒ๊ณผ, ์ตœ์ข… ํ›ˆ๋ จ๋œ ๋ชจ๋ธ์˜ ์ฒดํฌํฌ์ธํŠธ๋ฅผ ๋กœ๋“œํ•˜์—ฌ ํ™˜๊ฒฝ์—์„œ ์—์ด์ „ํŠธ๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐํ™”ํ•œ ์˜์ƒ์ด๋‹ค.

  • Step 0: Initial agent behavior at the beginning of training
  • Step 2000: Agentโ€™s progress after 2000 steps of training
  • Step 30000: Agentโ€™s behavior after 30000 steps, nearing the end of training
  • Final Model Execution: Agent performance after loading the final trained model checkpoint.

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ธฐ๋ณธ ํ™˜๊ฒฝ ์„ค์ •์„ ๋‹ค๋ฃฌ ํ›„ ๊ฐ•์ฒด(rigid object), ๊ด€์ ˆ(articulation), ๋ณ€ํ˜• ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด(deformable object)์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์— ๋Œ€ํ•œ ํŠœํ† ๋ฆฌ์–ผ์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค.


Comments