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 Lab은 GUI 환경이 아닌 CLI 기반으로 실행하여 시뮬레이션 성능을 최적화합니다.
이를 위해 Omniverse AppLauncher의 명령줄 인터페이스(※ CLI)를 사용하는 것이 기본 방식입니다.
예를 들어, 다음과 같은 명령줄 인자들이 자주 사용됩니다:
-headless
: GUI 없이 실행 (백그라운드 실행)-device cuda
: CUDA 기반 GPU에서 실행-enable_cameras
: 카메라 센서 활성화-livestream
: 실시간 스트리밍 옵션-verbose
, -info
: 디버깅 및 로그 활성화-experience
: 특정 환경 파일(.json 등) 로딩Python의 argparse 라이브러리를 통해 CLI 인자를 파싱할 수 있습니다.
위 코드는 AppLauncher에서 기본 실행 인자들을 받아들일 수 있도록 구성하며, 이후 AppLauncher(args_cli)
를 통해 시뮬레이터를 실행합니다.
이제 Omniverse의 simulation_app 객체를 통해 환경을 제어할 수 있는 기반이 마련됩니다.
시뮬레이션을 구성하려면 다음 두 가지가 필수입니다:
1. SimulationCfg
Isaac Lab에서 제공하는 시뮬레이션 설정 클래스입니다. 주요 설정:
device
: 실행 장치 (CPU / CUDA)dt
: 물리 연산 타임스텝 (예: 0.01 → 1초에 100번 계산)physics_scene
: 물리 엔진 환경 설정 (중력, 충돌 등)2. SimulationContext
시뮬레이션 실행을 위한 컨텍스트 객체입니다.
SimulationContext(sim_cfg)
를 통해 sim_cfg
에서 설정한 값들이 적용된 시뮬레이션이 생성됩니다.
sim.play()
, sim.pause()
등 제어 가능시뮬레이션 씬을 시각화하기 위해 카메라 뷰를 설정할 수 있습니다.
이 설정을 통해 초기 시점에서 장면이 어떻게 보일지를 조정할 수 있습니다.
sim.reset()
이 함수는 시뮬레이션 타임라인을 초기화합니다.
※ 이 과정을 생략하면 물리 핸들이 제대로 초기화되지 않아 오류가 발생할 수 있으므로 반드시 한 번 호출해야 합니다.
Isaac Lab은 simulation_app이 실행되는 동안 루프를 유지하면서 각 프레임을 처리합니다.
while simulation_app.is_running():
sim.step()
print("Step completed")
sim.step()
을 호출하면 물리 엔진이 한 스텝(프레임)을 계산합니다.print()
를 통해 각 스텝마다 로그를 남길 수 있으며, headless 모드에서 디버깅에 유용합니다.이번 글에서는 Isaac Lab에서 빈 시뮬레이션 씬(empty scene)을 생성하는 과정을 단계별로 설명했습니다.
이 튜토리얼은 매우 기본적인 형태이지만, 향후 로봇 추가, 센서 구성, 강화학습 환경 구축 등 다양한 확장 작업의 기초가 됩니다.
정리하면, 아래와 같은 개념들을 학습할 수 있었습니다:
Isaac Lab의 강력한 시뮬레이션 환경을 제대로 활용하기 위해서는 이와 같은 기반 구성에 대한 이해가 반드시 필요합니다.
이 글 공유하기: