Index
2026-09-15 ~ 09-16 — Engineering

demo_icl: privileged 정답 입력 금지 → AprilTag+RGB-D 센서 전용 파이프라인 착수

FurnitureBench | scripts/demo_icl_sensor · results/demo_icl/20260915_sensor_contract, 20260915_sensor_probe

TL;DR

0/6
명목크기 PnP
6/6
depth-plane 복구
29
유닛테스트 통과
4
취소된 job

1 배경 / 목적

직전 카드의 demo_icl drawer v4(heldout 7/10=70%)는 시뮬레이터의 물체 정답 pose와 벤치마크 조립 목표를 정책이 직접 읽는 privileged 조건에서 얻은 결과다. 이 성공을 실물 로봇에 적용 가능한 형태로 확장하려던 v5(box/서랍 재파지 로직 개선)가 진행되던 중, 사용자가 "실제로 관측 가능한 입력만 사용해야 한다"는 요구를 명시했다.

즉시 중단: results/demo_icl/20260915_drawer_refine_v5/retired.json — reason: "User requires real-world-observable inputs; privileged simulator object poses and scorer-derived assembly targets are forbidden." 대기 중이던 job 4개(127891/127893/127894/127895)를 취소하고, 이미 완료된 4개(127863/127867/127868/127869)는 기록만 보존. v4의 동결 정책·70% 결과 자체는 변경하지 않음.

2 작업 내용

새 계약: 정책/인식 컴포넌트에 물체 transform, segmentation ID, mesh 기하, reset 사전분포, scorer 목표, 숨겨진 접촉력을 절대 전달하지 않는다(scripts/demo_icl_sensor/AGENTS.md에 명문화). RGB(-D) 카메라 관측과 로봇 센서(joint encoder, EE FK, gripper width)만 정책 입력으로 허용.

observations.py — FurnitureSim-v0 sensor_env_options()로 RGB-D+로봇 상태만 추출 (FurnitureSimFull-v0의 privileged parts_poses는 사용 금지) perception.py — AprilTag(tag36h11) 코너 검출 → planar PnP, 나쁜 재투영/불일치 깊이/작은 태그/모호 pose 거부 대체 estimator='depth_plane' — 측정 깊이로 평면 피팅 후 태그 코너 광선과 교차, 평면성·정사각형 형태 검증 (명목 태그 크기를 pose 추정에 사용하지 않음) calibration.py / export_calibration.py / CALIBRATION_KO.md — 오프라인 intrinsic/hand-eye 보정 도구 + 한국어 캘리브레이션 가이드 (실측 보정 파일은 아직 없음) capture_sim.py / capture_realsense.py — 시뮬레이터 RGB-D 캡처(1280x720) vs 실물 RealSense 1회 캡처(SDK/카메라 미연결로 이 서버에서 미실행) setup.py — calibration_domain 기본값 'physical', 시뮬레이션 보정은 반드시 'simulated_sensor'로 명시해야 함 (실측으로 위장 방지)

로그인 노드에서는 §1 디버깅 허용 범위 내 고정 10-step, GPU 1개, 300초 제한 foreground smoke만 수행(전체 정책 평가는 여전히 sbatch extra 전용). 중복 제출된 대기 job 128512는 실행 전 취소.

3 결과

진단estimator결과비고
debug_perceptionPnP + 명목 19.5mm 태그observed_poses=0측정 깊이와 명목 크기 불일치로 두 태그(id 52, 58) 전부 pose_or_depth_rejected
debug_perception_depthdepth_plane (실측 깊이 평면 피팅)observed_poses=63프레임 × 2태그 = 6/6 복구. 측정 변 길이 20.78mm(id58)/20.69mm(id52), 평면 RMS ~4e-8m
demo 영상 태그 검출 (10프레임)PnP전부 거부보정 파일 부재로 metric pose 없음 — 픽셀 코너 검출까지만 확인

손목 카메라(color_image1)는 전 구간에서 태그 미검출 — 전면 카메라(color_image2)만 관측 성공. 경계 테스트 29개 통과(python -m unittest discover -s scripts/demo_icl_sensor).

핵심 발견: 명목 태그 크기를 신뢰한 PnP는 렌더러의 깊이 스케일과 어긋나 전부 실패했지만, 깊이를 직접 측정해 평면을 피팅하는 대체 추정기는 같은 프레임에서 안정적으로 pose를 복구(태그 실측 크기가 명목 대비 약 6% 큼 — 20.7mm vs 19.5mm).
한계: 정지된 태그 2개, 총 6회 관측일 뿐 — 성공률/정답 pose 오차 검증이 아니다. 전체 장면 커버리지, 파지·삽입·조립 성공, 실물 전이는 전혀 검증되지 않음.

4 Takeaway

의미

직전 카드의 70% 성공은 이 프로젝트가 "privileged 정보를 받으면 코드 정책으로 assembly가 가능하다"는 것을 보여줬지만, 그 결과는 이 새 요구조건 아래에서는 유효하지 않다. 지금 확보한 것은 인식 파이프라인의 기하학적 정합성(태그 검출·평면 피팅)뿐이며, 조립 성공률로 이어지려면 관측 기반 파지/충돌 판단이라는 완전히 새로운 레이어가 필요하다 — v4의 70%를 재현하려면 사실상 처음부터 다시 쌓아야 한다.

5 Next Steps

미해결 한계

실측 카메라/hand-eye 보정 파일이 없음(이 서버에 RealSense 미연결) — 시뮬레이션 보정만으로는 실물 전이를 주장할 수 없음. 손목 카메라 태그 미검출 원인 미조사.

다음 실험

1) 서랍 등 누락 부품을 찾기 위한 추가 관측 각도 확보, 2) 관측 기반 파지 후보 생성 + 충돌 검사, 3) 단일 human demo의 작업 순서(박스→아래/위 서랍→부분삽입 후 밀기)와 연결해 첫 센서 전용 정책 시도. 전체 정책 평가는 반드시 extra sbatch로.