오전에 완료한 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 원칙 — 근거 없는 지오메트리 채택 금지 — 을 지키면서 순차적으로 원인을 좁혀나갔다.
전부 CPU-only own job (대부분 1~4 CPU, ≤16GiB, GPU 미사용). 각 단계는 이전 단계 산출물을 frozen input으로 소비하며, 매 실행마다 독립적인 code-reviewer + architect 리뷰 lane을 거쳤다 (전부 APPROVE/WATCH, 지오메트리 채택은 전 구간 BLOCK).
| # | Job | 파일 | 무엇을 검증했나 |
|---|---|---|---|
| 1 | 130279 | scene_error_isolation | recorded-arm 치환이 RGB 잔차를 줄이는가 |
| 2 | 130290 | scene_depth_residual | 카메라별 depth 잔차 맵 (wall/cabinet/sink) |
| 3 | 130294/6 | scene_plane_constraints | SDK vs LAS 평면 fit 교차검증 |
| 4 | 130306/7 | scene_plane_support | 동일 source-pixel support로 재비교, cabinet 문 분리 |
| 5 | 130319 | cabinet_face_candidate | 유한 캐비닛면 프로토타입 렌더 (기각) |
| 6 | 130321/2/31/32 | scene_rgb_landmarks/intrinsics | depth 없이 RGB 클릭 5개로 삼각측량, K 민감도 |
| 7 | 130335/6 | scene_rgb_features | Affine-SIFT 자동 매칭 제안 (대부분 오검출) |
| 8 | 130344 | scene_rgb_identity_review | 76개 매칭 육안 재검수 |
| 9 | 130350/1/3/63/68 | scene_arm_camera/boundary/oriented_audit | Panda arm CAD 실루엣으로 raw vs PointWorld 카메라 비교 |
| 10 | 130373/77/81 | candidate_103959_correspondence | 별도 public episode(10:39:59)로 SDK-MP4 시간 매핑 검증 |
| 11 | 130392 | candidate_motion_controls | 시간 오프셋 0을 temporal-change로 재확인 |
| 12 | 130399 | candidate_arm_camera | candidate episode 자체 pose로 arm 렌더 비교 |
| 13 | 130409 | candidate_fk_consistency | 3개 episode 전체(329 row) FK 컨벤션 재현성 |
| 14 | 130415 | candidate_arm_boundaries | 육안 검증 포함 exterior housing 경계 재측정 |
| 15 | 130422 | camera_stationarity | 두 episode 간 배경(wall/cabinet/sink) 정지 여부 |
| 16 | 130430 | candidate_camera_transfer | primary PointWorld 외부파라미터를 candidate에 전이 테스트 |
| 17 | 130439/49/51 | room_surface_candidate | SDK∩LAS 합의 영역만 텍스처 메시로 패치 |
| 18 | 130454/5/71 | farfield_coverage | 3m→10m depth range 확장이 누락을 설명하는지 |
| 19 | 130502 | right_wall_candidate | ext2 매트 벽 영역에 유한 평면 패치 생성 |
| 20 | 130534 | wall_occlusion_audit | 새 patch를 가리는 정확한 occluder geometry ID 특정 |
| 21 | 130557 | wall_identity_audit | 기존 wall vs 신규 patch 최종 same-support 비교 |
| 카메라 | 두 렌더 간 diff | actual vs simulated arm | actual vs recorded arm |
|---|---|---|---|
| Wrist | 3.34 | 43.18 | 42.38 |
| Ext1 | 0.71 | 56.86 | 56.88 |
| Ext2 | 0.97 | 60.60 | 60.52 |
| 가설 | SDK: 각도/거리(mm) | LAS: 각도/거리(mm) |
|---|---|---|
| wall_left | 74.06° / 152.53mm | 12.59° / 24.98mm |
| wall_under | 4.09° / 78.42mm | 4.19° / 0.37mm |
| cabinet_front | 36.31° / 115.59mm | 7.05° / 43.47mm |
Same-support 재검증(130306/7)에서도 LAS가 cross-view 자기일관성은 더 좋았지만(cabinet 왼쪽 문 median 3.8~4.4mm), 이는 "같은 estimator를 자기 자신과 비교"한 결과라 systematic bias가 숨겨져 있을 수 있다는 한계가 명시됨.
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개도 "확실히 같은 물리점"으로 확정된 것이 없었다.
| Row/카메라 | Raw median abs px | Frozen PointWorld median abs px |
|---|---|---|
| ext1/70 | 9.02 | 3.98 (개선, 그러나 signed 부호 반전) |
| ext1/122 | 13.18 | 6.59 |
| ext2/30 | 3.21 | 0.28 |
| ext2/70 | 1.42 | 1.27 |
Primary episode에서 fit한 PointWorld 카메라를 candidate episode에 그대로 전이(job 130430)하면 6개 중 대부분 개선되지만 ext1/70은 부호가 반전되며 절대치는 남는다 — 균일한 승자가 없음.
| Estimator | Valid/ROI px | Plane residual median/p95 |
|---|---|---|
| SDK | 50,884/51,626 | 16.93 / 47.03mm |
| LAS | 42,572/51,626 | 6.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 mm | LAS 기준 old/new median abs mm |
|---|---|---|
| SDK/raw | 41.9 / 220.5 | 181.2 / 83.1 |
| LAS/raw | 37.9 / 148.5 | 198.2 / 10.6 |
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시간 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 참조).
SDK/LAS 상호 불일치를 해소할 제3의 물리적 기준이 없다. RGB 기반 대응점 탐색(수동 클릭 + SIFT)도 신뢰할 수 있는 벽/캐비닛 대응점을 찾지 못했다 — 텍스처가 반복적이고(나무결) 저대비 영역이 많아 자동 매칭이 구조적으로 어렵다.
1) wall-refitting 브랜치는 중단 — 추가 평면 fit이나 임계값 조정 금지. 2) FoundationStereo(제3 depth 소스) 확보 시 SDK/LAS와 3-way 비교로 교착 해소 시도. 3) RGB 대신 로봇-free 두 카메라 view의 진짜 물리적 topology 대응(예: 캐비닛 모서리의 인식 가능한 형상 특징)을 명시적으로 확보하기 전까지는 지오메트리 후보를 보류 상태로 유지.