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