Euler ZYX (Rz·Ry·Rx) 임을 brute-force 검증. np.allclose(atol=1e-3) 통과.visualization/viz_superset.py는 viser 기반 pointcloud 뷰어로, ext1/ext2 카메라 extrinsic을 episode별 egox_meta.json 값으로 사용하고 있었다.
egox_meta.json의 extrinsic은 per-episode 추정값. DROID superset JSON(cam2base_extrinsic_superset.json)에는 더 정제된 GT/Pred extrinsic이 serial별로 존재하는데 활용하지 않았음.두 가지 목적이 있었다:
JSON 한 entry는 serial별로 [tx, ty, tz, rx, ry, rz] 6-vec. 변환 규약을 한 episode에서 brute-force 매칭:
R = Rz(rz) @ Ry(ry) @ Rx(rx)) 일 때 기존 egox_meta 3×3 회전과 np.allclose(atol=1e-3) 완전 일치. 다른 후보 모두 mismatch.기존 default UUID 5개는 superset JSON에 없어 무용지물. 조건: superset JSON 실재 + metadata(train/val) 존재 + ext1/ext2 _source == "GT". Lab별 1개씩 선별:
--render_mp4)render.py의 render_splat()(z-buffer + radius splat)을 가져와서 프레임별 렌더링:
(W*3, H) 3-panel 캔버스 합성cv2.VideoWriter(mp4v)로 저장--render_mp4 모드일 때는 viser 서버를 띄우지 않고 종료하도록 분기 처리.
| 항목 | 값 | 비고 |
|---|---|---|
| Override 적용 확인 | ext1=GT ext2=GT | superset_status 로그 정상 |
| 렌더 프레임 수 | 262 frames | CPU 단독, 약 2분 소요 |
| 출력 해상도 | 3840×720 | W*3 (1280*3) × H(720) |
| mp4 크기 | 157 MB | mp4v codec, 10 fps |
| mid-frame RGB mean | 37.3 | 비제로, 정상 영상 확인 |
superset JSON의 6-vec extrinsic 규약(translation + Euler ZYX)을 확정했다. 이 규약은 앞으로 다른 스크립트에서도 안전하게 4×4 c2w로 변환해서 사용할 수 있다.
또한 ext1/ext2 calibration 품질을 wrist 시점에서 픽셀 단위로 직접 비교할 수 있는 뷰가 생겼다. render 결과와 GT 사이의 RGB 차이를 같은 좌표계에서 정량/정성 평가 가능해져, 캘리브레이션 오차가 있는 episode를 선별하거나 extrinsic 추정 품질을 데이터셋 단위로 스크리닝하는 기반이 마련됨.
현재 wrist 패널과 reproject 패널의 orientation은 raw metadata 그대로. DROID wrist mp4가 depth 좌표계와 다른 각도로 회전돼 있을 가능성이 남아 있음 (ZED 카메라 mount 방향 이슈). reproject가 GT와 180° 어긋난다면 wrist mp4 또는 depth를 flip하여 alignment 비교 필요.
현재 mp4v는 호환성 좋지만 압축률이 낮음 (262 frame → 157 MB). 필요 시 H264/avc1 fourcc로 교체 (codec 가용성 확인 필요).
5개 default UUID 모두에 대해 실행하여 ext1/ext2 GT calibration 품질이 영상별로 얼마나 일관되게 맞는지 훑어볼 것. outlier episode 존재 여부 파악.