Pollux Logo

OV RTX Lidar 가이드 문서 (sim 5.0.0)

Omniverse RTX Lidar 가이드


1단계: RTX Lidar란 무엇인가요?

  • Lidar(라이다)는 레이저를 쏘아 주변 물체까지의 거리를 측정하는 센서입니다.
  • RTX Lidar는 NVIDIA의 RTX(레이 트레이싱) 기술을 이용해, 가상 3D 환경에서 실제 라이다처럼 동작하는 센서를 시뮬레이션합니다.
  • 로봇, 자율주행차, 드론 등에서 환경 인식, 장애물 감지, 맵핑 등에 사용됩니다.

[로봇]---(레이저)---[벽]
| ↑
|<---거리 측정----|

RTX Lidar는 '물자체(Ding an sich)'를 인식할 수 없습니다. 대신, 인식 가능한 형식(현상)으로 가공된 데이터를 제공합니다. 즉, RTX Lidar는 현실을 있는 그대로 보는 것이 아니라 우리가 만든 틀(파라미터, Annotator, Writer) 안에서 세계를 '이해 가능한 형태'로 재구성하는 도구입니다.


2단계: RTX Lidar의 4가지 핵심 구조

RTX Lidar 시스템은 4가지 핵심 파일 타입으로 구성됩니다

[1. Asset USD 파일] ←--→ [2. USDA 파라미터 파일]
↓ ↓
[3. 등록된 Config] ←--→ [4. JSON 템플릿]
↓ ↓
[LidarRtx 검증] ←--→ [런타임 변환]
↓ ↓
[USD 속성 통합]

[RTX 엔진 시뮬레이션]

전체 데이터 흐름 개요

  1. Asset USD: 3D 모델 + variant 정의
  2. USDA 파라미터: 각 variant별 정확한 센서 스펙
  3. 등록된 Config: 지원 모델 목록
  4. JSON 템플릿: 사용자 친화적 설정 + 외부 도구 호환성

LidarRtx가 이들을 통합하여 RTX 엔진에서 실시간 시뮬레이션


3단계: 4가지 핵심 파일 상세 분석

3.1 Asset USD 파일 (3D 모델 + Variant 정의)

역할: 라이다 센서의 시각적 표현 + 여러 설정 옵션을 하나의 파일에 통합

파일 위치 예시: https://omniverse-content-staging.s3-us-west-2.amazonaws.com/Assets/Isaac/5.0/Isaac/Sensors/Ouster/OS0/OS0.usd

OS0 AssetS2E AssetXT32 SD10 AssetmicroScan3 Asset

구조:

OS0.usd
├── [3D Mesh] 라이다 센서 시각적 모델
├── [Material] 텍스처, 재질 정보
└── [Variant Set] 여러 설정 옵션
├── "OS0_REV6_128ch10hz512res" # 512 해상도
├── "OS0_REV6_128ch10hz1024res" # 1024 해상도
├── "OS0_REV6_128ch10hz2048res" # 2048 해상도
└── ... (더 많은 variant)

핵심 특징:

  • 하나의 파일에 여러 센서 설정 (variant로 구분)
  • 제조사 정확한 3D 모델 포함
  • Nucleus server에서 클라우드 배포
  • 버전 관리 (REV6, REV7 등)

3.2 USDA 파라미터 파일 (정밀한 센서 스펙)

역할: 각 variant별 정확한 물리적 센서 파라미터를 USD 형식으로 정의

파일 위치 예시: https://omniverse-content-staging.s3-us-west-2.amazonaws.com/Assets/Isaac/5.0/Isaac/Sensors/Ouster/OS0/OS0_REV6_128_10hz_512_resolution.usda

#usda 1.0
(
defaultPrim = "OS0_REV6_128_10hz_512_resolution"
doc = "Generated from OS0_REV6_128ch10hz512res.json"
)

def OmniLidar "OS0_REV6_128_10hz_512_resolution" (
prepend apiSchemas = ["OmniSensorGenericLidarCoreAPI"]
)
{
# 기본 센서 속성
float omni:sensor:Core:avgPowerW = 0.002
float omni:sensor:Core:nearRangeM = 0.3
float omni:sensor:Core:farRangeM = 50
uint omni:sensor:Core:numberOfChannels = 128
uint omni:sensor:Core:scanRateBaseHz = 10

# 빔 각도 정의 (128개 채널)
float[] omni:sensor:Core:emitterState:s001:azimuthDeg = [
4.23, 1.41, -1.4, -4.21, 4.22, 1.42, -1.41, -4.22,
4.23, 1.41, -1.42, -4.21, 4.23, 1.42, -1.4, -4.2,
# ... 총 128개 값
]
float[] omni:sensor:Core:emitterState:s001:elevationDeg = [
44.5, 43.8, 43.1, 42.4, 41.7, 41, 40.3, 39.59,
38.89, 38.19, 37.49, 36.79, 36.09, 35.39, 34.69,
# ... 총 128개 값
]

# 타이밍 정보
uint[] omni:sensor:Core:emitterState:s001:fireTimeNs = [
762, 2287, 3812, 5337, 6862, 8387, 9912, 11437,
# ... 총 128개 값
]

# 채널 ID 매핑
uint[] omni:sensor:Core:emitterState:s001:channelId = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
# ... 총 128개 값
]

# 오차 모델
float omni:sensor:Core:azimuthErrorMean = 0
float omni:sensor:Core:azimuthErrorStd = 0.01
float omni:sensor:Core:elevationErrorMean = 0
float omni:sensor:Core:elevationErrorStd = 0.01

# 기타 속성들...
float omni:sensor:Core:rangeAccuracyM = 0.03
float omni:sensor:Core:rangeResolutionM = 0.001
token omni:sensor:Core:rayType = "IDEALIZED"
uint omni:sensor:Core:reportRateBaseHz = 5120
token omni:sensor:Core:rotationDirection = "CW"
token omni:sensor:Core:scanType = "ROTARY"
string omni:sensor:modelName = "OS0_REV6_128_10hz_512_resolution"
float omni:sensor:tickRate = 10
}

파라미터 분류:

파라미터 그룹예시설명
기본 센서 속성avgPowerW, nearRangeM, farRangeM센서의 물리적 특성
스캔 설정scanRateBaseHz, numberOfChannels스캔 속도, 채널 수
빔 배치azimuthDeg[], elevationDeg[]각 빔의 정확한 각도
타이밍fireTimeNs[]각 빔의 발사 타이밍
채널 매핑channelId[]빔과 채널의 매핑
오차 모델azimuthErrorStd, elevationErrorStd각도 측정 오차

핵심 특징:

  • 제조사 데이터시트 기반 정확한 값
  • RTX 엔진과 직접 호환
  • variant별 최적화된 파라미터
  • 128개 빔의 개별 각도 등 세밀한 정의

3.3 등록된 라이다 Config 파일 (지원 모델 목록)

역할: RTX Lidar에서 공식 지원하는 모든 모델과 variant 목록을 정의

파일 위치: source/extensions/isaacsim.sensors.rtx/python/impl/supported_lidar_configs.py

핵심 특징:

  • 공식 지원 모델 목록: NVIDIA가 테스트하고 검증한 모델들
  • variant 검증: 등록된 모델의 경우 지원되는 설정만 허용
  • 제조사별 구분: Ouster, SICK, NVIDIA, SLAMTEC 등
  • 커스텀 추가 가능: 이 목록에 없어도 USD Asset이나 JSON으로 커스텀 라이다 생성 가능

공식 지원 Lidar 모델 및 Variant 예시

제조사별 지원 모델:

제조사모델지원 Variant 수주요 특징
HESAIXT32_SD10-고해상도 멀티빔
NVIDIADebug_Rotary-개발/디버깅용
NVIDIAExample_Rotary-회전식 라이다 예시
NVIDIAExample_Solid_State-고체 라이다 예시
OusterOS010가지단거리 고해상도
OusterOS115가지중거리 범용
OusterOS210가지장거리 고성능
SICKmicroScan35가지산업용 소형
SICKpicoScan15010가지초소형 모델
SlamtecRPLIDAR_S2E-경제형 SLAM용
ZVISIONML30S, MLXS-차량용 솔리드 스테이트

주요 제조사별 특징:

제조사특징variant 예시
Ouster고해상도 3D 라이다OS0_REV6_128ch10hz1024res
SICK산업용 라이다Normal_1, Normal_2
NVIDIA교육/프로토타이핑용variant 없음 (단일 설정)
SLAMTEC2D 라이다variant 없음

Variant 명명 규칙:

  • Ouster: {모델}_{리비전}_{채널수}ch{주파수}hz{해상도}res
  • SICK: Normal_{번호} 또는 Extended_{번호}
  • NVIDIA: 기능별 명명 (Example, Debug, Simple 등)

전체 configs 코드:

# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

"""Configuration definitions for supported Lidar sensors in Isaac Sim.

This module defines the supported Lidar sensor configurations and their variants
that can be used with the RTX sensor system. It includes configurations for various
manufacturers.
"""

# Expected name of Lidar prim variant sets
SUPPORTED_LIDAR_VARIANT_SET_NAME = "sensor"

# Map supported Lidar asset paths to their variants
SUPPORTED_LIDAR_CONFIGS = {
"/Isaac/Sensors/HESAI/XT32_SD10/HESAI_XT32_SD10.usd": set(),
"/Isaac/Sensors/NVIDIA/Debug_Rotary.usda": set(),
"/Isaac/Sensors/NVIDIA/Example_Rotary_2D.usda": set(),
"/Isaac/Sensors/NVIDIA/Example_Rotary.usda": set(),
"/Isaac/Sensors/NVIDIA/Example_Solid_State.usda": set(),
"/Isaac/Sensors/NVIDIA/Simple_Example_Solid_State.usda": set(),
"/Isaac/Sensors/Ouster/OS0/OS0.usd": {
"OS0_REV6_128ch10hz1024res",
"OS0_REV6_128ch10hz2048res",
"OS0_REV6_128ch10hz512res",
"OS0_REV6_128ch20hz1024res",
"OS0_REV6_128ch20hz512res",
"OS0_REV7_128ch10hz1024res",
"OS0_REV7_128ch10hz2048res",
"OS0_REV7_128ch10hz512res",
"OS0_REV7_128ch20hz1024res",
"OS0_REV7_128ch20hz512res",
},
"/Isaac/Sensors/Ouster/OS1/OS1.usd": {
"OS1_REV6_128ch10hz1024res",
"OS1_REV6_128ch10hz2048res",
"OS1_REV6_128ch10hz512res",
"OS1_REV6_128ch20hz1024res",
"OS1_REV6_128ch20hz512res",
"OS1_REV6_32ch10hz1024res",
"OS1_REV6_32ch10hz2048res",
"OS1_REV6_32ch10hz512res",
"OS1_REV6_32ch20hz1024res",
"OS1_REV6_32ch20hz512res",
"OS1_REV7_128ch10hz1024res",
"OS1_REV7_128ch10hz2048res",
"OS1_REV7_128ch10hz512res",
"OS1_REV7_128ch20hz1024res",
"OS1_REV7_128ch20hz512res",
},
"/Isaac/Sensors/Ouster/OS2/OS2.usd": {
"OS2_REV6_128ch10hz1024res",
"OS2_REV6_128ch10hz2048res",
"OS2_REV6_128ch10hz512res",
"OS2_REV6_128ch20hz1024res",
"OS2_REV6_128ch20hz512res",
"OS2_REV7_128ch10hz1024res",
"OS2_REV7_128ch10hz2048res",
"OS2_REV7_128ch10hz512res",
"OS2_REV7_128ch20hz1024res",
"OS2_REV7_128ch20hz512res",
},
"/Isaac/Sensors/Ouster/VLS_128/Ouster_VLS_128.usd": set(),
"/Isaac/Sensors/SICK/microScan3/SICK_microScan3.usd": {
"Normal_1",
"Normal_2",
"Normal_4",
"Normal_5",
"Normal_6",
},
"/Isaac/Sensors/SICK/multiScan136/SICK_multiScan136.usd": set(),
"/Isaac/Sensors/SICK/multiScan165/SICK_multiScan165.usd": set(),
"/Isaac/Sensors/SICK/nanoScan3/SICK_nanoScan3.usd": {
"CAAZ30AN1",
},
"/Isaac/Sensors/SICK/picoScan150/SICK_picoScan150.usd": {
"Normal_1",
"Normal_2",
"Normal_3",
"Normal_4",
"Normal_6",
"Normal_7",
"Normal_8",
"Normal_9",
"Normal_10",
"Normal_11",
},
"/Isaac/Sensors/SICK/TIM781/SICK_TIM781.usd": set(),
"/Isaac/Sensors/Slamtec/RPLIDAR_S2E/Slamtec_RPLIDAR_S2E.usd": set(),
"/Isaac/Sensors/ZVISION/ZVISION_ML30S.usda": set(),
"/Isaac/Sensors/ZVISION/ZVISION_MLXS.usda": set(),
}


3.4 JSON 템플릿 (사용자 친화적 설정)

파일 위치: source/extensions/isaacsim.sensors.rtx/data/lidar_configs/NVIDIA/Simple_Example_Solid_State.json

역할: 사용자 친화적 형태 + 외부 도구 호환성을 위한 설정 파일

전체 JSON 템플릿 코드:

{
"class": "sensor",
"type": "lidar",
"name": "Simple Solid State",
"driveWorksId": "GENERIC",
"profile":
{
"scanType": "solidState",
"intensityProcessing": "normalization",
"rotationDirection": "CW",
"rayType": "IDEALIZED",
"nearRangeM": 1.0,
"farRangeM": 200.0,
"effectiveApertureSize": 0.0145,
"focusDistM": 0.16,
"rangeResolutionM": 0.004,
"rangeAccuracyM": 0.025,
"avgPowerW": 0.002,
"minReflectance": 0.1,
"minReflectanceRange": 270.0,
"wavelengthNm": 1550.0,
"pulseTimeNs": 6,
"maxReturns": 2,
"scanRateBaseHz": 30.0,
"reportRateBaseHz": 30,
"numberOfEmitters": 12,
"numberOfChannels": 12,
"rangeCount": 1,
"ranges": [
{"min": 0.5, "max": 300}
],
"azimuthErrorMean": 0.0,
"azimuthErrorStd": 0.025,
"elevationErrorMean": 0.0,
"elevationErrorStd": 0.025,
"stateResolutionStep": 1,
"numLines": 3,
"numRaysPerLine": [4, 4, 4],
"emitterStateCount": 1,
"emitterStates": [
{
"azimuthDeg": [
-2, -1, 1, 2,
-1.5, -0.5, 0.5, 1.5,
-2.4, -1.4, 1.4, 2.4
], "_commentOnAzimuth": "Flat Scan is expecting equal angles between each emitter in the line it uses",
"elevationDeg": [
-8, -8, -8, -8,
0, 0, 0, 0,
8, 8, 8, 8
], "_commentOnElevation": "Flat Scan use the line with elevation nearest 0 as it's first line entry",
"fireTimeNs": [
0,3300000,6600000,9900000,
13300000,16600000,19900000,23300000,
26600000,29900000,31500000,33300000],
"channelId": [
0,1,2,3,
4,5,6,7,
8,9,10,11],
"rangeId": [
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0
],
"bank": [
11, 10, 9, 8,
7, 6, 5, 4,
3, 2, 1, 0
]
}
],
"intensityMappingType": "LINEAR"
}
}

파라미터 상세 설명

파라미터 이름의미(영문)한글 설명
classSensor class센서 종류(항상 sensor)
typeSensor type센서 타입(여기선 lidar)
nameSensor name센서 이름
driveWorksIdDriveWorks IDDriveWorks용 센서 ID
scanTypeScan type스캔 방식(예: solidState)
intensityProcessingIntensity processing강도 데이터 처리 방식
rotationDirectionRotation direction회전 방향(CW/CCW)
rayTypeRay type레이 타입(IDEALIZED 등)
nearRangeMNear range (meters)최소 측정 거리
farRangeMFar range (meters)최대 측정 거리
effectiveApertureSizeEffective aperture size (meters)유효 조리개 크기
focusDistMFocus distance (meters)초점 거리
rangeResolutionMRange resolution (meters)거리 해상도
rangeAccuracyMRange accuracy (meters)거리 측정 정확도
avgPowerWAverage power (watts)평균 출력(레이저 파워)
minReflectanceMinimum reflectance최소 반사율
minReflectanceRangeMinimum reflectance range (deg)최소 반사율 적용 각도
wavelengthNmWavelength (nm)레이저 파장
pulseTimeNsPulse time (ns)펄스 지속 시간
maxReturnsMaximum returns최대 리턴 수
scanRateBaseHzScan rate (Hz)라이다 스캔 속도(Hz)
reportRateBaseHzReport rate (Hz)데이터 리포트 속도(Hz)
numberOfEmittersNumber of emitters레이저 발사기(채널) 개수
numberOfChannelsNumber of channels채널 개수
rangeCountRange countrange(거리) 구간 개수
rangesRanges각 range 구간의 min/max
azimuthErrorMeanAzimuth error mean방위각 오차 평균
azimuthErrorStdAzimuth error std방위각 오차 표준편차
elevationErrorMeanElevation error mean고도각 오차 평균
elevationErrorStdElevation error std고도각 오차 표준편차
stateResolutionStepState resolution step상태 해상도 스텝
numLinesNumber of lines라인(스캔 라인) 개수
numRaysPerLineNumber of rays per line각 라인별 레이 개수
emitterStateCountEmitter state count발사기 상태 개수
emitterStatesEmitter states발사기 상태(각종 각도, 타이밍 등 배열)
azimuthDegAzimuth degrees각 발사기의 방위각 배열
elevationDegElevation degrees각 발사기의 고도각 배열
fireTimeNsFire time (ns)각 발사기별 발사 타이밍(ns)
channelIdChannel ID각 발사기별 채널 ID
rangeIdRange ID각 발사기별 range ID
bankBank각 발사기별 뱅크(그룹)
intensityMappingTypeIntensity mapping type강도 매핑 방식
_commentOnAzimuthComment on azimuth방위각 배열에 대한 주석(설명)
_commentOnElevationComment on elevation고도각 배열에 대한 주석(설명)

파라미터 그룹별 분류:

파라미터 그룹주요 파라미터설명
기본 정보class, type, name, driveWorksId센서 식별 및 외부 연동 정보
물리적 특성nearRangeM, farRangeM, avgPowerW, wavelengthNm하드웨어 물리적 속성
스캔 설정scanType, scanRateBaseHz, numberOfEmitters, numberOfChannels스캔 방식, 속도, 채널 구성
정확도/해상도rangeResolutionM, rangeAccuracyM, effectiveApertureSize측정 정밀도 관련
오차 모델azimuthErrorStd, elevationErrorStd, azimuthErrorMean센서 오차 시뮬레이션
빔 기하학azimuthDeg[], elevationDeg[], numLines, numRaysPerLine[]각 빔의 공간적 배치
타이밍fireTimeNs[], pulseTimeNs, reportRateBaseHz시간 관련 설정
데이터 처리intensityProcessing, intensityMappingType, maxReturns출력 데이터 처리 방식

4단계: 4가지 파일의 상호 관계 및 데이터 흐름

4.1 파일 간 관계도

[1. Asset USD] ←--→ [2. USDA 파라미터]
↓ ↓
[3. 등록된 Config] ←--→ [4. JSON 템플릿]
↓ ↓
[LidarRtx 검증] ←--→ [런타임 변환]
↓ ↓
[USD 속성 통합]

[RTX 엔진 시뮬레이션]

4.2 실제 데이터 흐름

시나리오 1: USD Asset 사용

1. 사용자: LidarRtx(config="/Isaac/Sensors/Ouster/OS0/OS0.usd", variant="OS0_REV6_128ch10hz512res")
2. 검증: supported_lidar_configs.py에서 지원 여부 확인
3. 로드: Asset USD에서 해당 variant의 USDA 파라미터 직접 로드
4. 적용: USD 속성이 RTX 엔진에 바로 적용
5. 시뮬레이션: RTX 레이 트레이싱 수행

시나리오 2: JSON 템플릿 사용

1. 사용자: LidarRtx(config="Simple_Example_Solid_State")
2. 검색: data/lidar_configs/ 디렉토리에서 JSON 파일 탐색
3. 변환: JSON → USD 속성 변환 (SensorNodeUtils.cpp)
4. 적용: 변환된 USD 속성이 RTX 엔진에 적용
5. 시뮬레이션: RTX 레이 트레이싱 수행

4.3 우선순위 및 선택 기준

처리 우선순위:

  1. USD Asset + Variant (최우선)
  2. JSON 템플릿 (변환 후 적용)
  3. 기본값 (모든 것이 실패할 경우)

사용 시나리오별 권장:

목적권장 파일 타입이유
실제 하드웨어 시뮬레이션USD Asset + Variant제조사 정확 데이터
빠른 프로토타이핑JSON 템플릿수정 용이
교육/학습JSON 템플릿가독성 높음
ROS/DriveWorks 연동JSON 템플릿외부 호환성
고정밀 연구USD Asset + Variant최고 정확도

정리

RTX Lidar는 4가지 핵심 구조가 유기적으로 연결된 시스템입니다:

  1. Asset USD: 3D 모델 + variant 구조
  2. USDA 파라미터: 정밀한 센서 스펙 (제조사 데이터)
  3. Lidar Config: 지원 모델 검증 목록
  4. JSON 템플릿: 사용자 친화적 설정

LidarRtx 클래스가 이들을 통합하여 RTX 엔진에서 실시간 레이 트레이싱 기반 라이다 시뮬레이션을 제공합니다. 사용자는 목적에 따라 정확한 하드웨어 시뮬레이션(USD)부터 빠른 프로토타이핑(JSON)까지 유연하게 선택할 수 있습니다.


5단계: 코드 단계에서 분석하기

5.1 Prim (OmniLidar Prim)

  • Prim은 Omniverse의 USD(Universal Scene Description)에서 센서의 실체가 되는 객체입니다.
  • LidarRtx를 생성하면 내부적으로 OmniLidar Prim이 생성됩니다.

실제 코드 예시 (Prim 생성)

# LidarRtx 생성 시 prim_path로 지정
# 위치: exts/isaacsim.sensors.rtx/isaacsim/sensors/rtx/impl/lidar_rtx.py
lidar = LidarRtx(prim_path="/World/lidar", ...)

  • 내부적으로는 다음과 같이 prim을 생성/검증합니다:

# 위치: exts/isaacsim.sensors.rtx/isaacsim/sensors/rtx/impl/lidar_rtx.py
if is_prim_path_valid(prim_path):
...
else:
_, sensor = omni.kit.commands.execute(
"IsaacSensorCreateRtxLidar",
translation=Gf.Vec3d(...),
orientation=Gf.Quatd(...),
path=prim_path,
...)


5.2 LidarRtx 클래스

  • RTX Lidar의 모든 동작을 제어하는 핵심 Python 클래스입니다.
  • 센서 생성, 초기화, 파라미터 설정, Annotator/Writer 연결, 데이터 수집 등 담당

실제 코드 예시 (클래스 선언 및 주요 메서드)

# 위치: exts/isaacsim.sensors.rtx/isaacsim/sensors/rtx/impl/lidar_rtx.py
class LidarRtx(BaseSensor):
...
def __init__(self, prim_path: str, name: str = "lidar_rtx", ...):
...
def initialize(self, ...):
...
def attach_annotator(self, annotator_name: str):
...
def attach_writer(self, writer_name: str):
...
def get_current_frame(self) -> dict:
...

  • 사용 예시:

# 위치: exts/isaacsim.sensors.rtx/docs/rtx_lidar.md (사용 예시)
lidar = LidarRtx(prim_path="/World/lidar", position=[0,0,1], name="lidar")
lidar.initialize()


5.3 Annotator (데이터 생성기)

  • Annotator는 LidarRtx에 부착되어, 센서 데이터(포인트 클라우드, Flat Scan 등)를 생성합니다.
  • 여러 Annotator를 동시에 부착해 다양한 데이터를 한 번에 생성할 수 있습니다.

실제 코드 예시 (Annotator 부착)

# 위치: exts/isaacsim.sensors.rtx/isaacsim/sensors/rtx/impl/lidar_rtx.py
lidar.attach_annotator("GenericModelOutputLidarPointAccumulator") # 3D 포인트 클라우드
lidar.attach_annotator("IsaacComputeRTXLidarFlatScan") # 2D Flat Scan (2D 라이다 전용)

  • Annotator 내부적으로는 RTX 엔진에서 데이터를 받아와 가공합니다.
  • Annotator 관련 구현은:
    • exts/isaacsim.sensors.rtx/isaacsim/sensors/rtx/impl/lidar_rtx.py (attach_annotator)
    • Annotator 이름별 실제 구현은 Omniverse 내부 C++/USD 노드 또는 Replicator annotator에서 처리됨

5.4 Writer (시각화/저장기)

  • Writer는 Annotator가 생성한 데이터를 시각화하거나 파일로 저장합니다.

실제 코드 예시 (Writer 부착)

# 위치: exts/isaacsim.sensors.rtx/isaacsim/sensors/rtx/impl/lidar_rtx.py
lidar.attach_writer("RtxLidarDebugDrawPointCloud") # 포인트 클라우드 시각화

  • Writer는 데이터를 화면에 그리거나, 파일로 내보내는 역할을 합니다.
  • Writer 관련 구현은:
    • exts/isaacsim.sensors.rtx/isaacsim/sensors/rtx/impl/lidar_rtx.py (attach_writer)
    • Writer 이름별 실제 구현은 Omniverse 내부 C++/USD 노드 또는 Replicator writer에서 처리됨

5.5 전체 데이터 흐름 예시

# 위치: exts/isaacsim.sensors.rtx/docs/rtx_lidar.md (사용 예시)
from isaacsim.sensors.rtx import LidarRtx
lidar = LidarRtx(prim_path="/World/lidar", position=[0,0,1], name="lidar")
lidar.initialize()
lidar.attach_annotator("GenericModelOutputLidarPointAccumulator")
lidar.attach_writer("RtxLidarDebugDrawPointCloud")

frame = lidar.get_current_frame()
print(frame["pointCloud"]) # Annotator가 생성한 3D 점 데이터

  • 데이터 흐름의 핵심 구현은 모두 exts/isaacsim.sensors.rtx/isaacsim/sensors/rtx/impl/lidar_rtx.py에 위치합니다.

이 글 공유하기:

Copyright 2025. POLLUX All rights reserved.