Index
2026-09-17 — Research / Decision

demo_icl 하네스 재선정 — GPT-Policy / Harness VLA / ASPIRE / ENPIRE 코드 대조

FurnitureBench | privileged pose 금지 후속 — 센서 전용 정책을 어떤 구조로 만들 것인가

TL;DR

24
GPT-Policy 소스 파일
11
Harness 후보 소스 파일
36
신규 유닛테스트 통과
2→8
관측 태그 수(job 131145)

1 배경 / 목적

260916 카드(demo_icl_sensor_pivot)에서 privileged 시뮬레이터 정답 pose 입력을 금지하기로 결정하면서 AprilTag+RGB-D 센서 전용 인식 파이프라인에 착수했고, depth-plane 대체 추정기로 pose 복구(6/6)까지 확인했다. 그러나 그 카드는 "지각이 되는가"만 답했지, "지각 결과를 어떤 실행 구조(harness)에 태워 실제 조작 결정을 내리게 할 것인가"는 열려 있었다.

260911 카드(gap_harnessvla_enpire_coverage)에서 이미 Harness VLA/ENPIRE/GaP/Show-Harness/GPT-6 Astra를 검토한 바 있지만, 그때 질문은 "이 방법들의 성능이 우리 삽입 병목을 커버하는가"였다. 이번 조사는 "그 방법들의 코드 구조 중 무엇을 실제로 이식할 것인가"로 질문이 다르다. 마침 2026-09-16 GPT-Policy 논문·코드가 공개돼 "데모 한 개 + 학습 없는 VLM + 제한된 로봇 도구 + 실행 후 재관측"이라는 우리 목표와 정확히 같은 구조의 참고 구현이 새로 등장했다.

기존 한계: 센서 파이프라인은 완성됐지만 "매 스텝 무엇을 결정하고 실행할지"를 감쌀 하네스가 없었다. run_active_view.py처럼 고정된 4자세 순회만 가능한 상태.

2 작업 내용

2-1. GPT-Policy 소스 검토 (24개 파일, 커밋 고정)

공개 저장소(cheng-haha/GPT-Policy, commit 6291a7dec476ac6c76bdbd056bbf325c40a8215b)에서 24개 파일을 다운로드해 URL·SHA256을 sources.json에 고정하고 읽었다. upstream 실행·모델 호출·로봇 실험 재현은 하지 않았다.

1. harness/video_selector.py — CodexVideoSelector가 겹치는 구간별 핵심 프레임·단계·시각근거를 선택, review가 중복 제거. 최종 제한 min(24, 48 // 시점당 카메라 수) → 우리 2카메라 데모는 최대 24 view/48 image. 2. input/demonstration.py, input/action_sampling.py — action은 과거 예시이지 실행 대기 명령이 아님. 비디오 조건에서 state/action/alignment 제거, 구간 양끝·약 1초 간격·그리퍼 전환 양쪽만 보존, 누락은 0으로 채우지 않음. 3. runtime/runner.py:run_loop — 새 snapshot+로봇 상태 → agent.decide 호출 → 도구 실행 결과/IK 거절 사유를 다음 호출에 입력. tools/runtime.py 고정 dispatch: move_to / move_eef_chunk / check_path / set_gripper / locate_point. 모델의 종료 선언과 사람의 최종 성공 판정은 분리. 4. motion/planner.py — 측정 관절에서 시작해 TCP 경로 보간 + 샘플마다 IK, 궤적 시간 산정. check_path는 충돌 검증이 아니라 이름뿐 — collision-aware planner 아님. 5. vision/perception.py:PixelLocalizer — 보정된 RGB 픽셀 광선을 다른 시점 wrist 영상+로봇 상태로 삼각측량, 시차·수치조건·광선잔차 검사(실패 시 metric 위치로 표시 안 함). 시뮬레이터 GT pose 조회 없음.

2-2. Harness 후보 재검토 (Harness VLA / ASPIRE / ENPIRE / ESPIRE, 11개 소스 파일)

후보확인된 구조이번 판단
ASPIRElibero_reduced_skill_library.py(마스크/픽셀+깊이→3D점), trace_logger.py(동작 입출력+시각증거 기록), 코드 수정→검증 축적 루프채택 (기존 CaP-X와 가장 근접, 우선 참고)
Harness VLARGB-D 기반 위치 결정 + 고정 기하 동작과 frozen VLA 접촉 동작 조합. 절차는 기억, 좌표는 현재 관측에서 재계산 (부록 E: 숨겨진 물체 pose 접근 금지 명시)관측·이동·접촉 분리 + 재시도 구조 채택
ENPIRE환경준비·정책개선·실행·분석 모듈 분리. 단 CAP_DESIGN.md에 detect_object의 시뮬 oracle 분기가 명시됨oracle 경로는 배제, reset/평가/실패분류 구조만 참고
ESPIREVLM의 embodied spatial reasoning 진단 벤치마크 — 로봇 정책 하네스가 아님(이름 유사로 인한 혼동 확인)채택 대상 아님

2-3. 실제 적용·검증

결정 후 즉시 두 가지를 구현했다: (1) ObservedSurface — 보정된 RGB-D를 로봇 기준 표면점으로 변환하고 픽셀/마스크 조회에 관측 단계·출처를 연결(미관측 깊이·오래된 관측은 목표로 반환하지 않음), (2) 동작 직후 새 관측 packet을 자동으로 남기는 어댑터. 신규 테스트 36개 통과 후 새 탐색 seed 80102로 extra job 131145를 제출했다.

수치: job 131145 결과 — 초기 관측 태그 {52,58} 2개 → 4자세(lift/wrist_center/wrist_left/wrist_right, 총 139 step) 순회 후 {0,1,2,3,52,54,58,59} 등 8개 태그 관측. multiscale depth-plane 재분석으로 마지막 손목 프레임에서 태그 54 pose 추정 1건 통과(단발 관측, 안정 추적 의미 아님).

3 결과 (수치)

GPT-Policy 논문 Table 1(조건당 반복 3회, 실물 로봇)을 구조 참고 근거로 함께 확인했다 — 이는 우리 실험 결과가 아니라 채택 판단의 근거 자료다.

Task데모 없음Human VideoRobot Video+Action
수건/노트 pickup0/32/3—
병뚜껑 열기0/32/33/3
플러그 재삽입0/30/32/3
나머지 6개 태스크각 조건 3/3 (100%)3/3
해석 주의: n=3의 소표본이며, 접촉 조립(FurnitureBench와 같은 다단계 삽입) 성능이나 우리 태스크에서의 재현 결과가 아니다. "robot video+action이 접촉 민감 태스크에 도움될 수 있다"는 정성적 근거로만 사용.
바로 가져다 쓸 수 없는 이유: 공개 README는 ARX 배포만 완료, YAM/RoboDojo(시뮬)는 TODO. simulated.json이 존재하지만 backend는 여전히 arx이고 CAN interface 포함 — FurnitureBench 어댑터는 공개 트리에 없음. LICENSE도 검토·평가용 공개(재배포/상용 라이선스 미정)라 업스트림 코드를 그대로 복사하지 않고 구조만 참고.

4 Takeaway

의미

demo_icl 트랙이 "센서로 볼 수 있는가"(260916) 단계를 지나 "무슨 구조로 결정을 내리게 할 것인가"를 확정하는 단계로 넘어갔다. ASPIRE 코드 수정 루프 + Harness VLA 재시도 구조라는 구체적 선택지가 생겼고, ENPIRE의 oracle 경로를 명시적으로 배제한 것은 260916에서 정한 "privileged pose 금지" 원칙을 하네스 선택에도 일관되게 적용했다는 의미다.

다만 이 카드 자체는 아직 온라인 모델 연결이나 조립 성공을 만들지 않았다 — 결정과 준비 단계다. 실제 online 모델 결정 루프의 첫 실행 결과는 같은 날 진행된 native_icl 트랙에서 별도로 확인한다.

5 Next Steps

미해결 한계

GPT-Policy 방식의 온라인 VLM 연결(외부 유료 API 없이 클러스터 폐쇄형 batch 안에서 실행)을 아직 구현하지 않음 — 현재는 이 세션(native conversation model)이 직접 결정을 내리는 대체 경로만 있다. GPT-Policy의 PixelLocalizer 삼각측량이 "같은 정지점을 지정했다"는 가정을 수치 검사만으로 증명하지 못한다는 한계도 그대로 이식됨.

다음 실험

(1) 데모 문맥을 데모 없음/로봇 영상만/영상+action 3조건으로 고정해 비교, (2) 고정 4자세 순회 대신 매 스텝 실제 모델 호출 → 도구 실행 → 재관측 → 다음 호출을 연결(진행 중, native_icl 카드 참조), (3) 파지·짧은 들어올리기·놓기부터 평가하고 조립으로 확장, scorer는 정책 밖에서 판정.