Omniverse Camera View 생성 예제 - SmartX-Team/Omniverse GitHub Wiki
카메라뷰 생성
Omniverse 에서 기본적으로 Perspective View 로 제공된다. 사용자들은 자유롭게 이동하면서 작업할 수 있다.
사용자들은 필요시 새로운 카메라 View 를 생성할 수 있다.
카메라 View 들은 특정 지점으로 빠르게 이동하거나 고정된 상태로 특정 장면만 볼 수 있다.
EX) 고정된 카메라 뷰를 사용하는 예제이다. 실제 현실의 Husky Robot 에 달려있는 Camera 를 가상 세계내에 표현하기 위해 Camera 를 생성하고 고정하였다. Camera View 을 적용한 상태에서는 Perspective 와 같이 사용자가 자유롭게 이동하는 것이 불가능하다.
[Omniverse 세계내에서 Camera View 로 관찰하는 예제]
Camera View 도 Object 취급되며 parent direcotry 가 움직이면 카메라 view도 같이 움직여 실제 로봇의 카메라 뷰를 재현할 수 있었다.
Camera View 생성 예제
from pxr import Usd, UsdGeom, Sdf
from omni.usd import get_context
def create_realsense_camera(stage, prim_path):
camera_path = Sdf.Path(prim_path)
usd_camera = UsdGeom.Camera.Define(stage, camera_path)
usd_camera.CreateProjectionAttr().Set(UsdGeom.Tokens.perspective)
# 대략적인 FOV에 맞춘 초점 거리 설정
focal_length = 35.0 # 기본 값 (필요 시 조정)
usd_camera.CreateFocalLengthAttr().Set(focal_length)
# 시야각 설정 (sensor size 계산 기반)
horizontal_aperture = 36.0 # 센서 가로 크기 (기본 값)
vertical_aperture = horizontal_aperture * (42.5 / 69.4) # 센서 세로 크기
usd_camera.CreateHorizontalApertureAttr().Set(horizontal_aperture)
usd_camera.CreateVerticalApertureAttr().Set(vertical_aperture)
usd_camera.CreateClippingRangeAttr().Set((0.1, 100000)) # 클리핑 범위 설정
return usd_camera
# USD 스테이지 가져오기
stage = get_context().get_stage()
# 카메라 생성
camera_prim_path = "/World/Camera"
create_perspective_camera(stage, camera_prim_path)
#!! 카메라뷰 활성화
from omni.kit.viewport.utility import get_active_viewport_window
# 카메라 경로 설정
camera_path = "/World/Camera"
# 활성 뷰포트 윈도우 가져오기
viewport_window = get_active_viewport_window()
if viewport_window:
# 카메라 뷰 활성화
viewport_window.viewport_api.camera_path = camera_path
print(f"Active camera set to {camera_path}")
else:
raise RuntimeError("No active viewport window found")