고도를 기다리며

[Tutorial #1] Creating an empty scene 본문

공부한것/Isaac Lab

[Tutorial #1] Creating an empty scene

MING.G 2024. 11. 11. 16:10
본 글은 Isaac Lab 공식 document를 수행한 내용을 적은 글입니다.
공식 document의 내용으로 이해가 가지 않는 부분들은 ChatGPT를 이용하여 보완하였습니다.
(글의 인용 표시가 되어있는 부분은 ChatGPT를 활용한 내용입니다.)

자세한 사항은 Isaac Lab 공식 document를 참고하세요.
https://isaac-sim.github.io/IsaacLab/main/index.html
 

Overview — Isaac Lab Documentation

 

isaac-sim.github.io

 

 

이 튜토리얼은 Python 스크립트로 Isaac Sim 시뮬레이터를 시작하고 제어하는 방법을 다룬다.

이를 위해 Isaac Lab에서 빈 장면을 설정하고 프레임워크에서 사용되는 두 가지 중요한 클래스인 app.AppLaucher와 sim.SimulationContext를 살펴본다.

 

#######################################################################################
########################### Simulation App 실행 #######################################
#######################################################################################
import argparse
from omni.isaac.lab.app import AppLauncher

## argparser
parser = argparse.ArgumentParser()

## append AppLauncher cli arg
AppLauncher.add_app_launcher_args(parser)

## parse the arguments
arg_cli = parser.parse_args()

## launch omniverse app
app_launcher = AppLauncher(arg_cli)
simulation_app = app_launcher.app

#######################################################################################
########################### Simulation 설정 및 구동 ####################################
#######################################################################################

from omni.isaac.lab.sim import SimulationCfg, SimulationContext

def main():
    
    ## Initialize the simulation context
    sim_cfg = SimulationCfg(dt=0.01)
    sim = SimulationContext(sim_cfg)
    
    ## Set main camera
    sim.set_camera_view([2.5, 2.5, 2.5], [0.0, 0.0, 0.0])
    
    ## Play the simulator
    sim.reset()
    print("[INFO]: Setup complete...")

    ## Simulate physics
    while simulation_app.is_running():
        ## Perform step
        sim.step()
        
if __name__ == "__main__":
    # run the main function
    main()
    # close sim app
    simulation_app.close()

 

Launching the simulator

Isaac Lab을 사용하기 위해서 가장 처음으로 해야 할 일은 시뮬레이션 어플리케이션을 실행하는것이다. 

시뮬레이션 어플리케이션이 실행이 된 후에만 Isaac Sim의 다양한 모듈을 사용할 수 있으므로 가장 처음에 수행되어야 한다.

from omni.isaac.lab.app import AppLauncher
AppLauncher는 Omniverse Isaac Lab의 어플리케이션을 초기화하고 실행하는 데 필요한 클래스로, Isaac Lab에서 시뮬레이션을 시작하는 데 필요한 설정과 실행 환경을 제공한다. (GPT4)

 

AppLauncher.add_app_launcher_args(parser)
AppLauncher는 자체적으로 필요한 여러 인수들을 가지고 있다.
여기에서는 add_app_launcher_args 메서드를 호출해, parser에 AppLauncher가 필요로 하는 인수들을 추가한다. 이를 통해 사용자는 Isaac Lab 실행 시 다양한 설정 옵션을 제공할 수 있다. (GPT4)

 

app_launcher = AppLauncher(args_cli)
simulation_app = app_launcher.app
AppLauncher 클래스의 인스턴스를 args_cli 인수를 넣어 생성한다.
이때, args_cli는 사용자가 전달한 설정값을 포함하고 있어, 이를 기반으로 Isaac Lab 어플리케이션을 초기화한다.
app_launcher.app은 실행 가능한 시뮬레이션 앱의 인스턴스로, 이후 단계에서 이를 사용해 Isaac Lab 시뮬레이션을 제어할 수 있다. (GPT4)

 

Importing python modules

시뮬레이션 어플리케이션이 실행되면 Isaac Sim 및 기타 라이브러리에서 다양한 Python 모듈을 임포트 할 수 있다.

 

from omni.isaac.lab.sim import SimulationCfg, SimulationContext
SimulationCfg는 Isaac Lab 시뮬레이션 환경의 구성(설정)을 정의하는 클래스다. 시뮬레이션을 실행할 때 다양한 설정을 지정할 수 있으며, 이 클래스는 이러한 설정 값을 모아놓은 구성 객체를 생성한다. 이를 통해 사용자는 시뮬레이션의 다양한 속성, 예를 들어 시뮬레이션의 속도, 물리 엔진 설정, 렌더링 옵션 등을 제어할 수 있다. 

SimulationContext는 시뮬레이션의 전체 환경과 상태를 관리하는 클래스다. 이 클래스는 시뮬레이션의 주요 컨트롤 역할을 수행하며, 시뮬레이션을 초기화하고, 실행하고, 정지하고, 재설정하는 등의 기능을 제공한다. SimulationContext를 통해 사용자는 시뮬레이션의 상태를 모니터링하고 조작할 수 있다. 

SimulationCfg는 시뮬레이션의 설정을 정의하는 역할을 하고, SimulationContext는 이 설정을 바탕으로 시뮬레이션을 실행하고 제어하는 역할을 한다. (GPT4)

 

Configuring the simulation context

    # Initialize the simulation context
    sim_cfg = SimulationCfg(dt=0.01)
    sim = SimulationContext(sim_cfg)
    # Set main camera
    sim.set_camera_view([2.5, 2.5, 2.5], [0.0, 0.0, 0.0])

 

Simulation context를 생성한 후에는 아래 2 단계를 거쳐 시뮬레이션을 실행할 수 있다.

1) 시뮬레이션 장면 디자인 (센서, 로봇, 기타 시뮬레이션 객체 추가)

2) 시뮬레이션 루프 실행 (시뮬레이션 단계별 실행 및 시뮬레이터에서 데이터 설정 및 가져오기)

dt는 시뮬레이션 시간 간격(timestep)을 나타낸다. dt를 0.01로 설정했다면 시뮬레이션은 초당 100번의 업데이트를 수행한다. dt값이 낮아지면 더 정확한 물리 시뮬레이션을 제공하지만 더 높은 계산 비용이 소요된다.

set_camera_view는 메인 카메라 뷰를 설정한다. 
위 코드에서 [2.5, 2.5, 2.5]는 카메라 위치로, 카메라가 3차원 공간에서 (2.5, 2.5, 2.5) 지점에 위치하도록 한다.
다음으로 [0.0, 0.0, 0.0]은 카메라 타겟의 값으로, 카메라가 원점을 바라보도록 하는 것이다. (GPT4)

 

Running the simulation

    # Play the simulator
    sim.reset()
    # Now we are ready!
    print("[INFO]: Setup complete...")

    # Simulate physics
    while simulation_app.is_running():
        # perform step
        sim.step()

 

시뮬레이션 Scene을 설정한 후 가장 먼저 해야할 일은 sim.reset() 메서드를 호출하는 것이다.

이 메서드는 타임라인을 제생하고 시뮬레이터의 물리 handle을 초기화한다. 

이 메서드는 항상 시뮬레이션 step() 이전에 호출해야하며, 그렇지 않다면 시뮬레이션 handle이 초기화되지 않는다.

sim.reset() 메서드는 시뮬레이터를 초기 상태로 재설정한다.
이 초기화 단계에서는 시뮬레이션 환경에 있는 객체들의 위치, 속도, 기타 물리적 속성을 초기값으로 리셋한다.
시뮬레이션을 처음 시작하거나 다시 시작하기 전에 환경을 초기화하는 중요한 단계다.

sim.step() 메서드는 시뮬레이션의 물리 엔진을 한 단계 진행시킨다.
이전에 설정한 dt 시간만큼 시뮬레이션이 한 스텝(타임스텝)을 진행하며, 모든 객체의 물리적 상호작용, 충돌, 중력 등의 효과가 계산된다. 이 step() 메서드는 매 프레임마다 호출되어, 시뮬레이션이 지속적으로 업데이트되도록 한다. (GPT4)

 

Exiting the simulation

    # close sim app
    simulation_app.close()

 

시뮬레이션 어플리케이션이 중지되면, simulation_app.close()를 이용해 창이 닫히게 된다.

 

 

'공부한것 > Isaac Lab' 카테고리의 다른 글

[Tutorial #2] Spawning prims into the scene  (0) 2024.11.11