Isaac Sim 한글 가이드

NVIDIA Isaac Sim 5.1/6.0 핵심 장점과 헤드리스로 직접 검증한 데모

08. 도메인 랜덤화

Synthetic Data · 검증 환경: Isaac Sim 6.0.0-dev2 / RTX PRO 6000 Blackwell

도메인 랜덤화(Domain Randomization)는 학습 데이터의 시각·물리 속성을 매 샘플마다 흔들어 정책이 "평균적인 sim 외형"이 아닌 "분포 전체"에 강건해지도록 만드는 기법이다. Replicator는 이를 그래프 형태로 추상화한다.

이 기능의 강점

구현 방법

with rep.new_layer():rep.trigger.on_frame(num_frames=N) 컨텍스트 → with rep.get.prim_at_path(...): rep.modify.pose(...) / rep.randomizer.color(...). Writer는 평소처럼 attach.

최소 데모

동일 큐브를 색·조명·카메라 무작위로 6장 캡처 (2×3 그리드).
동일 큐브를 색·조명·카메라 무작위로 6장 캡처 (2×3 그리드).

검증 결과

6장 그리드에 색·회전·카메라가 매번 다르게 적용됨이 명확히 보임.

핵심 코드 발췌

with rep.new_layer():
    cam = rep.functional.create.camera(...)
    rp = rep.create.render_product(cam, (640, 480))
    cube = rep.get.prim_at_path("/World/Cube")

    with rep.trigger.on_frame(num_frames=6):
        with cube:
            rep.randomizer.color(colors=rep.distribution.uniform((0,0,0),(1,1,1)))
            rep.modify.pose(rotation=rep.distribution.uniform((-30,-30,-30),(30,30,30)))
코드 다운로드 (zip)

실무 예제 — Warehouse 환경 + YCB 박스 + 3축 랜덤화

Simple_Warehouse 배경에 YCB cracker_box를 무작위 (위치·회전·색·돔라이트 강도·카메라 위치)로 9장 캡처. 매 프레임 그래프가 분포 샘플링.

9장(3×3) 그리드 — 동일 박스가 매번 다른 색/위치/카메라 각도로 창고에 나타남.
9장(3×3) 그리드 — 동일 박스가 매번 다른 색/위치/카메라 각도로 창고에 나타남.

한 번의 trigger.on_frame(num_frames=9) 정의만으로 9장 데이터가 자동 생성. 색·회전·조명·카메라가 매번 다른 분포 샘플로 적용됨이 시각 확인됨.

실무 데모 코드

with rep.new_layer():
    cam = rep.functional.create.camera(position=(1.5,-1.5,1.0), look_at=(0,0,0.5))
    rp = rep.create.render_product(cam, (640, 480))
    tgt = rep.get.prim_at_path("/World/Target")
    dom = rep.get.prim_at_path("/World/Dome")
    cam_n = rep.get.prim_at_path("/World/DRCam")

    with rep.trigger.on_frame(num_frames=9):
        with tgt:
            rep.modify.pose(
                position=rep.distribution.uniform((-0.4,-0.4,0.4),(0.4,0.4,0.6)),
                rotation=rep.distribution.uniform((-180,-180,-180),(180,180,180)))
            rep.randomizer.color(colors=rep.distribution.uniform((0,0,0),(1,1,1)))
        with dom:
            rep.modify.attribute("inputs:intensity",
                                  rep.distribution.uniform(400, 2500))
실무 데모 코드 zip