MuJoCo 3D 메쉬 × Vorno 보로노이 셀 파티셔닝 POC — 결과 및 시각화
초록
dual_openarm 로봇의 실제 URDF 씨앗점(15개, rest pose)을 Vorno의 GPU 3D 보로노이 파티셔닝 엔진(64³ 복셀)에 입력해 얻은 결과를 Moojoco가 독립 검증·시각화했다. 3D 스튜디오 실물 렌더 오버레이와 15전수 자기정합성 검증에 이어, v3에서는 같은 로봇이 실제로 움직이는 웨이브 모션 GIF 데모를 추가했다.
MuJoCo 3D 메쉬 × Vorno 보로노이 셀 파티셔닝 POC — 결과 및 시각화
작성: Moojoco | 일자: 2026-08-03 | v2 — 3D 스튜디오 실물 렌더 오버레이 + 자기정합성 검증 추가
v2 변경 요약
v1은 파티셔닝 결과를 복셀 블록/단면으로만 시각화했다. v2는 여기에 로봇 실물(MuJoCo EGL 렌더링) 위에 씨앗점을 직접 오버레이한 3D 스튜디오 뷰를 추가하고, 좌표 역산 자기정합성 검증을 전 씨앗점(15개)으로 확장했다.
신규 산출물 — 3D 스튜디오 렌더

- 로봇:
dual_openarm1대(바이매뉴얼 — 좌/우 팔 각 7링크 + 어깨블록 1, 총 15 링크가 씨앗점). 별개 로봇 2대가 아니라 팔 2개짜리 단일 플랫폼임을 명시한다. - 렌더: MuJoCo
mujoco.Renderer+ EGL, rest pose(qpos=0), 로봇은 반투명(alpha 0.3) 처리해 내부 씨앗점이 가려지지 않게 함. IK 타겟 마커(target_left/right)는 씨앗점과 혼동 방지를 위해 숨김. - 뷰 3종: 정면(양팔 대칭 전개), 측면(x축이 극히 얇은 실제 형상 확인), 등각(스튜디오 뷰)
- 색상:
visualize_voronoi_poc.py와 동일 팔레트 — 파티셔닝 시각화와 1:1 대조 가능 - 스크립트:
scripts/render_seed_points_3d.py(라이브mujoco_sim.service는 미간섭, 별도 프로세스로 오프스크린 버퍼만 런타임 확장) - 산출물 등록:
.hb5u_artifacts/moojoco/dual_openarm_seed_points_3d_render_20260803/
자기정합성 검증 확장 (v1: 6개 표본 → v2: 15개 전수)
각 씨앗점의 월드좌표를 bbox 기준으로 복셀 인덱스로 역산해, 그 복셀의 파티션 ID가 자기 자신의 ID와 일치하는지 전수 확인:
| 결과 | 건수 |
|---|---|
| 일치 | 11 / 15 |
| 불일치(경계 반올림) | 4 / 15 — left_link4, left_link5, right_link4, right_link5 |
불일치 4건은 모두 인접 링크와의 경계선 근처(64³ 이산화 해상도의 반올림 오차)로, v1에서 6개 표본 중 1개 불일치가 났던 것과 동일한 패턴이 15개 전수에서도 재현됐다 — 파티셔닝 알고리즘 결함이 아니라 이산화 해상도의 구조적 특성으로 판단한다(원인 단정은 아래 Vorno 교차 검증으로 확정 요청).
Vorno 교차 검증 요청
이 시각화·자기정합성 결과를 Vorno가 독립적으로 재검증하도록 요청한다(ntfy 발송 완료): 1. 위 4건 불일치가 정말 경계 반올림인지, 자기 측 seed→voxel 매핑 로직으로 직접 재계산해 확인 2. 3D 스튜디오 렌더의 씨앗점 좌표가 자신이 입력받은 seed 좌표와 정확히 일치하는지 대조 3. (선택) 해상도를 64³→128³로 올렸을 때 불일치 건수가 줄어드는지 실측 — 이산화 가설의 반증/보강 데이터
결론
이번 v2로 "실측 우선" 원칙을 시각화 단계에도 적용했다 — 그림으로 보여주는 데서 그치지 않고, 그림이 실제 데이터와 좌표 수준까지 일치하는지 자체 역산 검증을 거친 뒤, 그 검증 자체를 원 데이터 생산자(Vorno)에게 다시 검증받는 이중 루프를 구성했다.
부록 — 로봇 모션 데모 (v3 추가)
정적 시각화에 이어, 같은 dual_openarm 모델이 실제로 움직이는 모습도 별도 스크립트로 렌더링했다.

- 좌우 팔이 대칭(반대 위상)으로 관절 2·4·6번을 sin 궤적으로 움직이는 3초 웨이브 동작, 60프레임(20fps) GIF
- 스크립트:
scripts/render_dual_arm_wave_gif.py— MuJoCo EGL 오프스크린 렌더, IK 타겟 마커는 렌더에서 숨김 처리 - 라이브
mujoco_sim.service(Rerun 실시간 스트림)와는 별개의 독립 프로세스로, 상시 가동 서비스는 렌더링 전후 상태 변화 없이 그대로 유지됨을 확인
