C:\\users\\(사용자)\\appdata\\local\\ov\\pkg\\isaac_sim-2022.1.1\\exts\\omni.isaac.demos\\omni\\isaac\\demos
에 파일 작성
ex) ****“sk_building.py”
C:\\users\\사용자\\appdata\\local\\ov\\pkg\\isaac_sim-2022.1.1\\exts\\omni.isaac.demos\\config\\
extension.toml 에 아래 내용 추가
[[python.module]]
name = "omni.isaac.demos.sk_building"
⇒ api위치.파일 이름
sk_building.py
from pxr import Gf
import carb
import omni.usd
import omni.ext
import omni.ui as ui
import omni.physx as _physx
from omni.kit.menu.utils import add_menu_items, remove_menu_items, MenuItemDescription
from pxr import UsdGeom
import math
EXTENSION_NAME = "Robot Simulation in SK”
class Extension(omni.ext.IExt):
def on_startup(self, ext_id: str):
"""Initialize extension and UI elements"""
self._ext_id = ext_id
self._timeline = omni.timeline.get_timeline_interface()
self._viewport = omni.kit.viewport_legacy.get_default_viewport_window()
self._usd_context = omni.usd.get_context()
self._stage = self._usd_context.get_stage()
self._window = None
# self._window = ui.Window(EXTENSION_NAME, width=500, height=175, visible=False)
# self._window.set_visibility_changed_fn(self._on_window)
menu_items = [
MenuItemDescription(name=EXTENSION_NAME, onclick_fn=lambda a=weakref.proxy(self): a._menu_callback())
]
self._menu_items = [MenuItemDescription(name="Custom", sub_menu=menu_items)]
add_menu_items(self._menu_items, "Isaac Examples")
self._dc = _dynamic_control.acquire_dynamic_control_interface()
self._build_ui()
self._setup_done = False
self._rc = None
⇒ 다음과 같이 코드를 작성하여 Isaac Examples - Custom - Robot Simulation in SK에서 열 수 있게 됨
event
def _menu_callback(self):
self._window.visible = not self._window.visible
def _on_window(self, visible):
if self._window.visible:
self._sub_stage_event = self._usd_context.get_stage_event_stream().create_subscription_to_pop(
self._on_stage_event
)
else:
self._sub_stage_event = None
async def _play(self, task):
done, pending = await asyncio.wait({task})
if task in done:
self._timeline.play()
await asyncio.sleep(1)
async def _on_setup_fn(self, task):
done, pending = await asyncio.wait({task})
if task in done:
self._stage = self._usd_context.get_stage()
# setup robot controller
self._rc = RobotController(
self._stage,
# self._timeline,
self._dc,
self._robot_prim_path,
self._robot_chassis,
self._robot_wheels,
self._robot_wheels_speed,
[0.2, 0.5],
self._wheelbase_Length,
self._wheel_radius,
)
self._rc.control_setup()
# start stepping
self._editor_event_subscription = _physx.get_physx_interface().subscribe_physics_step_events(
self._rc.update
)
self._debug_draw_subs = (
omni.kit.app.get_app().get_update_event_stream().create_subscription_to_pop(self._rc.draw_path)
)
def _on_environment_setup(self):
# wait for new stage before creating robot
task = asyncio.ensure_future(omni.usd.get_context().new_stage_async())
task1 = asyncio.ensure_future(self._create_robot(task))
# set editor to play before setting up robot controller
task2 = asyncio.ensure_future(self._play(task1))
asyncio.ensure_future(self._on_setup_fn(task2))
# self._load_btn.enabled=False
self._move_btn.enabled = True
self._rotate_btn_1.enabled = True
self._rotate_btn_2.enabled = True
self._navigate_btn.enabled = True
self._stop_btn.enabled = True
self._follow_target_btn.enabled = True
self._setup_done = True
def on_shutdown(self):
self._rc = None
self._timeline.stop()
self._editor_event_subscription = None
remove_menu_items(self._menu_items, "Isaac Examples")
self._window = None
gc.collect()
Extension ui