Index
2026-09-16 18:45 – 23:10 — Analysis

G001 whole-scene 카메라/지오메트리 근본원인 진단 — 24개 순차 실험

R2S | scene_error_isolation → wall_identity_audit, job 130279~130557

TL;DR

24
순차 실험(job)
959
누적 통과 테스트
0
채택된 지오메트리
4h25m
wall-clock (18:45~23:10)

1 배경 / 목적

오전에 완료한 whole-scene delivery 파이프라인(260916-full_scene_delivery_pipeline.html)에서 floor/wall planar_proxy 멀티뷰 확장이 시각 품질 실패로 DISABLED 처리됐다. row 102 기준 ext2 카메라의 no-rendered-geometry 비율이 26.98%(143,466/531,655px)에 달해, appearance projection만으로는 완전한 scene을 만들 수 없는 상태였다.

이 잔차가 (a) 로봇 arm pose 오차, (b) 카메라 캘리브레이션/타이밍 오차, (c) 지오메트리(벽/캐비닛) 누락 중 무엇에서 오는지 분리해야 다음에 무엇을 고칠지 정할 수 있다. G001(전체 목표: full-scene reconstruction) 하에서 fail-closed 원칙 — 근거 없는 지오메트리 채택 금지 — 을 지키면서 순차적으로 원인을 좁혀나갔다.

기존 한계: SDK(ZED) depth와 LAS2(학습 스테레오) depth 중 어느 쪽도 독립적인 물리 ground truth가 아니고, PointWorld 최적화 카메라 포즈도 같은 episode에서 fit된 것이라 독립 검증이 아니다. 이 제약 위에서 상호 일관성만으로 판단해야 했다.

2 작업 내용

전부 CPU-only own job (대부분 1~4 CPU, ≤16GiB, GPU 미사용). 각 단계는 이전 단계 산출물을 frozen input으로 소비하며, 매 실행마다 독립적인 code-reviewer + architect 리뷰 lane을 거쳤다 (전부 APPROVE/WATCH, 지오메트리 채택은 전 구간 BLOCK).

#Job파일무엇을 검증했나
1130279scene_error_isolationrecorded-arm 치환이 RGB 잔차를 줄이는가
2130290scene_depth_residual카메라별 depth 잔차 맵 (wall/cabinet/sink)
3130294/6scene_plane_constraintsSDK vs LAS 평면 fit 교차검증
4130306/7scene_plane_support동일 source-pixel support로 재비교, cabinet 문 분리
5130319cabinet_face_candidate유한 캐비닛면 프로토타입 렌더 (기각)
6130321/2/31/32scene_rgb_landmarks/intrinsicsdepth 없이 RGB 클릭 5개로 삼각측량, K 민감도
7130335/6scene_rgb_featuresAffine-SIFT 자동 매칭 제안 (대부분 오검출)
8130344scene_rgb_identity_review76개 매칭 육안 재검수
9130350/1/3/63/68scene_arm_camera/boundary/oriented_auditPanda arm CAD 실루엣으로 raw vs PointWorld 카메라 비교
10130373/77/81candidate_103959_correspondence별도 public episode(10:39:59)로 SDK-MP4 시간 매핑 검증
11130392candidate_motion_controls시간 오프셋 0을 temporal-change로 재확인
12130399candidate_arm_cameracandidate episode 자체 pose로 arm 렌더 비교
13130409candidate_fk_consistency3개 episode 전체(329 row) FK 컨벤션 재현성
14130415candidate_arm_boundaries육안 검증 포함 exterior housing 경계 재측정
15130422camera_stationarity두 episode 간 배경(wall/cabinet/sink) 정지 여부
16130430candidate_camera_transferprimary PointWorld 외부파라미터를 candidate에 전이 테스트
17130439/49/51room_surface_candidateSDK∩LAS 합의 영역만 텍스처 메시로 패치
18130454/5/71farfield_coverage3m→10m depth range 확장이 누락을 설명하는지
19130502right_wall_candidateext2 매트 벽 영역에 유한 평면 패치 생성
20130534wall_occlusion_audit새 patch를 가리는 정확한 occluder geometry ID 특정
21130557wall_identity_audit기존 wall vs 신규 patch 최종 same-support 비교

3 결과 (수치)

① Arm-state 배제

카메라두 렌더 간 diffactual vs simulated armactual vs recorded arm
Wrist3.3443.1842.38
Ext10.7156.8656.88
Ext20.9760.6060.52
결론: recorded-arm으로 바꿔도 잔차가 거의 그대로(0.8 이내 변화) → scene/camera 쪽을 우선 진단하기로 방향 전환.

② SDK vs LAS 평면 fit 불일치 (job 130294/6)

가설SDK: 각도/거리(mm)LAS: 각도/거리(mm)
wall_left74.06° / 152.53mm12.59° / 24.98mm
wall_under4.09° / 78.42mm4.19° / 0.37mm
cabinet_front36.31° / 115.59mm7.05° / 43.47mm

Same-support 재검증(130306/7)에서도 LAS가 cross-view 자기일관성은 더 좋았지만(cabinet 왼쪽 문 median 3.8~4.4mm), 이는 "같은 estimator를 자기 자신과 비교"한 결과라 systematic bias가 숨겨져 있을 수 있다는 한계가 명시됨.

③ RGB correspondence는 신뢰 불가

Raw pose 기반 5개 landmark ray-gap 34.5~52.6mm, PointWorld pose는 1.7~35.2mm로 개선되나 cabinet-right는 여전히 28mm+ 잔존. Affine-SIFT 자동 매칭(contrast threshold 0.005)은 44개 매칭을 찾았지만 31/32는 table-to-table 오검출이었고 wall-to-wall/cabinet-to-cabinet 지지 매칭은 0개. 76개 후보 육안 재검수 결과 3개는 명백한 오검출(금속 fitting ↔ 테이블), 나머지 73개도 "확실히 같은 물리점"으로 확정된 것이 없었다.

④ Candidate episode(10:39:59) 카메라 전이 테스트

Row/카메라Raw median abs pxFrozen PointWorld median abs px
ext1/709.023.98 (개선, 그러나 signed 부호 반전)
ext1/12213.186.59
ext2/303.210.28
ext2/701.421.27

Primary episode에서 fit한 PointWorld 카메라를 candidate episode에 그대로 전이(job 130430)하면 6개 중 대부분 개선되지만 ext1/70은 부호가 반전되며 절대치는 남는다 — 균일한 승자가 없음.

⑤ Right-wall 신규 patch — 커버리지는 개선, 정확도는 미확정

EstimatorValid/ROI pxPlane residual median/p95
SDK50,884/51,62616.93 / 47.03mm
LAS42,572/51,6266.78 / 16.50mm

두 평면은 4.99°, 46.6mm 차이. ext2 새 patch는 raw 카메라 기준 47,112px, PointWorld 기준 45,030px를 새로 커버(기존 대비 순수 신규, 대체 0px). 그러나 final wall_identity_audit(130557)에서 old-wall(geom108) vs new-patch를 같은 4574px common support로 비교하면:

후보SDK 기준 old/new median abs mmLAS 기준 old/new median abs mm
SDK/raw41.9 / 220.5181.2 / 83.1
LAS/raw37.9 / 148.5198.2 / 10.6
SDK는 기존 wall을 선호하고 LAS는 신규 patch를 선호 — estimator에 따라 정반대 결론. 어느 쪽도 원래 목표인 5/10mm 지오메트리 게이트를 통과하지 못했다.

⑥ 부가 진단: farfield coverage, occlusion 규명

Depth range를 3m→10m로 확장(job 130454/5/71)해도 ext2 누락의 대부분은 설명되지 않음 (ext2 far-range valid pixel 0건 — 즉 range 문제가 아니라 근접 표면 자체가 안 잡히는 문제). Wall occlusion audit(130534)은 신규 patch가 안 보이는 이유를 기존 geom108(wall_continuous_appearance_visual_only)가 정확히 2,683~6,673px를 가리고 있음을 특정 — 렌더링 미스터리는 해결됐으나, "그래서 어느 벽이 맞는지"는 estimator 불일치로 미해결.

4 Takeaway

의미

4시간 25분에 걸친 24단계 진단으로 whole-scene 잔차의 원인 후보를 "로봇 arm 오차"에서 "카메라/지오메트리 불확정성"으로 확정적으로 이동시켰다. 이는 향후 리소스를 arm controller 튜닝이 아니라 카메라 캘리브레이션·스테레오 depth 소스 검증에 집중해야 함을 의미한다.

동시에 이 체인은 "SDK(ZED)와 LAS2(학습 스테레오) 중 어느 depth 소스도 단독으로 믿을 수 없다"는 것을 정량적으로 입증했다 — 두 소스가 같은 물리적 벽에 대해 5°+ 각도 차이, 수십mm 거리 차이를 내고, 어느 쪽을 채택하느냐에 따라 최종 판정(old wall vs new patch)이 뒤바뀐다. FoundationStereo(제3의 depth 소스) 확보가 이 교착을 풀 유일한 명확한 경로로 재확인됐다 (260917-foundationstereo_pair_runner_blocked.html 참조).

5 Next Steps

미해결 한계

SDK/LAS 상호 불일치를 해소할 제3의 물리적 기준이 없다. RGB 기반 대응점 탐색(수동 클릭 + SIFT)도 신뢰할 수 있는 벽/캐비닛 대응점을 찾지 못했다 — 텍스처가 반복적이고(나무결) 저대비 영역이 많아 자동 매칭이 구조적으로 어렵다.

다음 실험

1) wall-refitting 브랜치는 중단 — 추가 평면 fit이나 임계값 조정 금지. 2) FoundationStereo(제3 depth 소스) 확보 시 SDK/LAS와 3-way 비교로 교착 해소 시도. 3) RGB 대신 로봇-free 두 카메라 view의 진짜 물리적 topology 대응(예: 캐비닛 모서리의 인식 가능한 형상 특징)을 명시적으로 확보하기 전까지는 지오메트리 후보를 보류 상태로 유지.