Pollux Logo

Isaac Lab - Empty 시뮬레이션 Scene 만들기

Isaac Lab은 NVIDIA의 Isaac Sim 기반 강화학습 프레임워크로, 커스터마이징된 로봇 시뮬레이션 환경을 쉽게 구성할 수 있도록 지원합니다. 이번 글에서는 Isaac Lab에서 가장 기초적인 시뮬레이션 예제인 empty 시뮬레이션 scene을 만드는 방법을 다룹니다.

단순해 보일 수 있지만, 이 예제는 CLI 실행 환경 설정, SimulationConfig 구성, SimulationContext 초기화, 그리고 렌더링과 시뮬레이션 루프 실행이라는 핵심 개념들을 모두 포함하고 있어, 이후 복잡한 환경 구성에도 꼭 필요한 기초입니다.

공식 튜토리얼 링크:

https://isaac-sim.github.io/IsaacLab/main/source/tutorials/00_sim/create_empty.html

Isaac Sim 환경에서 CLI 사용

Isaac Lab은 GUI 환경이 아닌 CLI 기반으로 실행하여 시뮬레이션 성능을 최적화합니다.

Image

이를 위해 Omniverse AppLauncher의 명령줄 인터페이스(※ CLI)를 사용하는 것이 기본 방식입니다.

Image

예를 들어, 다음과 같은 명령줄 인자들이 자주 사용됩니다:

  • -headless: GUI 없이 실행 (백그라운드 실행)
  • -device cuda: CUDA 기반 GPU에서 실행
  • -enable_cameras: 카메라 센서 활성화
  • -livestream: 실시간 스트리밍 옵션
  • -verbose, -info: 디버깅 및 로그 활성화
  • -experience: 특정 환경 파일(.json 등) 로딩

argparse로 CLI 인자 처리

Image

Python의 argparse 라이브러리를 통해 CLI 인자를 파싱할 수 있습니다.

Image

위 코드는 AppLauncher에서 기본 실행 인자들을 받아들일 수 있도록 구성하며, 이후 AppLauncher(args_cli)를 통해 시뮬레이터를 실행합니다.

Image

이제 Omniverse의 simulation_app 객체를 통해 환경을 제어할 수 있는 기반이 마련됩니다.

SimulationCfg와 SimulationContext

ImageImage

시뮬레이션을 구성하려면 다음 두 가지가 필수입니다:

1. SimulationCfg

Isaac Lab에서 제공하는 시뮬레이션 설정 클래스입니다. 주요 설정:

  • device: 실행 장치 (CPU / CUDA)
  • dt: 물리 연산 타임스텝 (예: 0.01 → 1초에 100번 계산)
  • physics_scene: 물리 엔진 환경 설정 (중력, 충돌 등)
Image

2. SimulationContext

시뮬레이션 실행을 위한 컨텍스트 객체입니다.

SimulationContext(sim_cfg)를 통해 sim_cfg에서 설정한 값들이 적용된 시뮬레이션이 생성됩니다.

Image
  • sim.play(), sim.pause() 등 제어 가능
  • 중력, 충돌, 광원, 강체 등 물리 요소를 쉽게 설정 가능

카메라 뷰 설정

Image

시뮬레이션 씬을 시각화하기 위해 카메라 뷰를 설정할 수 있습니다.

Image
  • 첫 번째 인자: 카메라 위치 (x, y, z)
  • 두 번째 인자: 카메라가 바라보는 타겟 포인트

이 설정을 통해 초기 시점에서 장면이 어떻게 보일지를 조정할 수 있습니다.

시뮬레이션 초기화: sim.reset()

Image

sim.reset()

이 함수는 시뮬레이션 타임라인을 초기화합니다.

※ 이 과정을 생략하면 물리 핸들이 제대로 초기화되지 않아 오류가 발생할 수 있으므로 반드시 한 번 호출해야 합니다.

메인 루프 실행: while simulation_app.is_running()

Isaac Lab은 simulation_app이 실행되는 동안 루프를 유지하면서 각 프레임을 처리합니다.

while simulation_app.is_running():

sim.step()

print("Step completed")

  • sim.step()을 호출하면 물리 엔진이 한 스텝(프레임)을 계산합니다.
  • print()를 통해 각 스텝마다 로그를 남길 수 있으며, headless 모드에서 디버깅에 유용합니다.

마무리

이번 글에서는 Isaac Lab에서 빈 시뮬레이션 씬(empty scene)을 생성하는 과정을 단계별로 설명했습니다.

이 튜토리얼은 매우 기본적인 형태이지만, 향후 로봇 추가, 센서 구성, 강화학습 환경 구축 등 다양한 확장 작업의 기초가 됩니다.

정리하면, 아래와 같은 개념들을 학습할 수 있었습니다:

  • Isaac Sim 기반의 CLI 실행 구조
  • AppLauncher와 argparse를 통한 실행 인자 처리
  • SimulationCfg와 SimulationContext의 역할
  • 카메라 뷰 설정과 물리 연산 루프 구성
  • Headless 환경에서의 실행 및 로그 출력

Isaac Lab의 강력한 시뮬레이션 환경을 제대로 활용하기 위해서는 이와 같은 기반 구성에 대한 이해가 반드시 필요합니다.

이 글 공유하기:

Copyright 2025. POLLUX All rights reserved.