Isaac Sim tutorial - Core API - Hello World

gwangmin·2024년 6월 17일
0

IsaacSim group study

목록 보기
2/3

아래 내용은 제가 공식 튜토리얼 자료를 보고 정리한 내용으로 잘못된 내용이 있을 수 있습니다.

API

  • omni.isaac.examples.base_sample.BaseSample
    • boiler plate of a robotics extension application.
    • setup_scene()
      • 빈 stage에서 LOAD 버튼이 클릭되었을 때(핫리로드 시 x) 호출되는 콜백함수.
    • async setup_post_load()
      • setup_scene이 리턴된 후, one physics time step 후 호출되는 콜백함수.
      • 핫리로드/Reset 시에도 호출됨.
    • get_world()
      • omni.isaac.core.World 인스턴스를 얻을 수 있음.
      • __init__에서는 접근 불가.
  • omni.isaac.core.World
    • 싱글톤. World.instance()로 인스턴스를 얻을 수 있음.
    • scene
      • add_default_ground_plane()
        • groundPlane 추가.
      • add(prim)
        • scene에 prim을 추가/관리하고 추가된 prim을 리턴.
      • get_object(name)
        • name으로 scene에 존재하는 prim 리턴.
    • add_physics_callback(name, func)
      • 매 physics step 전에 호출되는 콜백을 unique한 name으로 등록.
      • func 형태: func(step_size)
    • reset()
      • 물리 시뮬레이션을 시작하기 전 모든 assets 초기화.
    • step(render)
      • 물리 시뮬레이션을 한 step 진행한다.
      • render: 렌더링 여부.
  • omni.isaac.core.objects.DynamicCuboid
    • Cube Prim을 나타내는 클래스.
    • __init__(prim_path, name, position, scale, color)
      • prim_path: prim path string.
      • name: name string. unique.
      • position: 위치. ndarray.
      • scale: 크기. ndarray.
      • color: [0,1] 범위를 갖는 RGB의 세기. ndarray.
    • get_world_pos()
      • (position, orientation) 튜플을 ndarray 형태로 리턴.
    • get_linear_velocity()
      • 속도를 ndarray로 리턴.
  • isaacsim.SimulationApp
    • __init__(config_dict)
      • IsaacSim 실행.
      • config_dict - key
        • ‘headless’: headless 여부
        • ‘livesync_usd’: GUI로 보면서 편집할 usd 파일 경로
    • close()
      • 앱 종료.

Hello World 예제를 이용한 예제 추가

  1. 이동/복사

    cd exts/omni.isaac.examples/omni/isaac/examples
    cp hello_world/hello_world* user_examples/
  2. exts/omni.isaac.examples/omni/isaac/examples/user_examples/__init__.py에 다음 줄을 추가

    from omni.isaac.examples.user_examples.hello_world import HelloWorld
    from omni.isaac.examples.user_examples.hello_world_extension import HelloWorldExtension
  3. exts/omni.isaac.examples/omni/isaac/examples/user_examples/hello_world_extension.py를 다음과 같이 수정

    import os
    from omni.isaac.examples.base_sample import BaseSampleExtension
    from omni.isaac.examples.user_examples import HelloWorld
    
    class HelloWorldExtension(BaseSampleExtension):
        def on_startup(self, ext_id: str):
            super().on_startup(ext_id)
            super().start_extension(
                menu_name="",
                submenu_name="",
                name="Awesome Example",
                title="My Awesome Example",
                doc_link="https://docs.omniverse.nvidia.com/app_isaacsim/app_isaacsim/tutorial_core_hello_world.html",
                overview="This Example introduces the user on how to do cool stuff with Isaac Sim through scripting in asynchronous mode.",
                file_path=os.path.abspath(__file__),
                sample=HelloWorld(),
            )
            return
  4. exts/omni.isaac.examples/omni/isaac/examples/user_examples/hello_world.py를 다음과 같이 수정

    from omni.isaac.examples.base_sample import BaseSample
    import numpy as np
    from omni.isaac.core.objects import DynamicCuboid
    
    class HelloWorld(BaseSample):
        def __init__(self) -> None:
            super().__init__()
            return
    
        def setup_scene(self):
            world = self.get_world()
            world.scene.add_default_ground_plane()
            fancy_cube = world.scene.add(
                DynamicCuboid(
                    prim_path="/World/random_cube",
                    name="fancy_cube",
                    position=np.array([0, 0, 1.0]),
                    scale=np.array([0.5015, 0.5015, 0.5015]),
                    color=np.array([0, 0, 1.0]),
                ))
            return
    
        async def setup_post_load(self):
            self._world = self.get_world()
            self._cube = self._world.scene.get_object("fancy_cube")
            self._world.add_physics_callback("sim_step", callback_fn=self.print_cube_info) #callback names have to be unique
            return
    
        # here we define the physics callback to be called before each physics step, all physics callbacks must take
        # step_size as an argument
        def print_cube_info(self, step_size):
            position, orientation = self._cube.get_world_pose()
            linear_velocity = self._cube.get_linear_velocity()
            # will be shown on terminal
            print("Cube position is : " + str(position))
            print("Cube's orientation is : " + str(orientation))
            print("Cube's linear velocity is : " + str(linear_velocity))

0개의 댓글