Isaac Lab Tutorial - Deep-dive into AppLauncher

권호떡의 데싸정복·2024년 10월 7일
0

AppLauncher에 대해서 자세하게 알아보자

$ python source/standalone/tutorials/00_sim/launch_app.py
# 필수 모듈 불러오기
import argparse
from omni.isaac.lab.app import AppLauncher

# argparse.ArgumentParser() : description을 통해 script에 대한 간단한 설명을 추가
parser = argparse.ArgumentParser(description="Tutorial on running IsaacSim via the AppLauncher.")

''' 
add_argument() : 인자를 추가한다.
--size 는 직육면체 한 변의 길이를 나타낸다. 기본값은 1.0으로 되어있어 별도로 입력하지 않으면 기본값이사용된다.
--width 는 시뮬레이션 창 너비를 의미한다. 기본값은 1280픽셀
--height 는 시뮬레이션 창의 높이를 의미한다. 기본값은 720픽셀

ex) python launch_app.py --size 2.0 --width 190 --heigght 1080   으로 실행하면 큐보이느 크기는 2.0이고 창 크기는 1920 * 1080으로 설정된다.
'''
parser.add_argument("--size", type=float, default=1.0, help="Side-length of cuboid")
parser.add_argument(
    "--width", type=int, default=1280, help="Width of the viewport and generated images. Defaults to 1280"
)
parser.add_argument(
    "--height", type=int, default=720, help="Height of the viewport and generated images. Defaults to 720"
)

# argparse에 추가적인 명령줄 인자들을 정의함 ex) --size 등
AppLauncher.add_app_launcher_args(parser)

# 전달된 인자들을 파싱하여 args_cli에 저장
args_cli = parser.parse_args()

# 명령줄 인자를 이용해서 어플리케이션 실행
app_launcher = AppLauncher(args_cli)
simulation_app = app_launcher.app

import omni.isaac.lab.sim as sim_utils

def design_scene():
    
    # 지면 만들기
    cfg_ground = sim_utils.GroundPlaneCfg()
    cfg_ground.func("/World/defaultGroundPlane", cfg_ground)

    # 광원 만들기
    cfg_light_distant = sim_utils.DistantLightCfg(
        intensity=3000.0,
        color=(0.75, 0.75, 0.75),
    )
    cfg_light_distant.func("/World/lightDistant", cfg_light_distant, translation=(1, 0, 10))


    '''
    직육면체 만들기
    CuboidCfg() : 직육면체를 만드는 클래스임
    size=[args_cli.size] * 3 : args_cli.size는 명령줄 인자로 입력된 크기를 나타내며(입력 안하면 1.0) 이 값이 * 3에 의해 [args_cli.size, args_cli.size, args_cli.size]로 확장되어 x, y, z가 모두 동일한 정육면체가 생성됨
    '''
    cfg_cuboid = sim_utils.CuboidCfg(
        size=[args_cli.size] * 3,
        visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(1.0, 1.0, 1.0)),
    )

    # 큐보이드를 z축 기준을 기준으로 args_cli.size / 2 만큼 위로 이동시켜 배치한다. 이를 통해 큐보이드가 지면위에 적절하게 놓이도록 하는것이다.
    cfg_cuboid.func("/World/Object", cfg_cuboid, translation=(0.0, 0.0, args_cli.size / 2))
    
    
def main():
    
    # SimulationCfg() : 시뮬레이션 구성을 정의한다. dt = 0.01 은 0.01 한번에 시뮬레이션이 진행되는것이며 device는 GPU 사용하기 위함이다.
    sim_cfg = sim_utils.SimulationCfg(dt=0.01, device=args_cli.device)
    
    # SimulationContext() : 설정된 sim_cfg를 기반으로 시뮬레이션 컨텍스트 생성. sim은 실제로 시뮬레이션을 실행하고 제어하는 객체가 됨.
    sim = sim_utils.SimulationContext(sim_cfg)

    # Set main camera
    sim.set_camera_view([2.0, 0.0, 2.5], [-0.5, 0.0, 0.5])

    # Design scene by adding assets to it
    design_scene()

    # 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이 보인다.
물리 효과를 적용하지 않았기 때문에 움직이면 둥둥 떠다닌다.

profile
데이터사이언스정복

0개의 댓글