Index
2026-09-17 ~ 09-18 — Experiment (진행 중)

native_icl — 세션 native model이 직접 조종하는 온라인 폐루프, drawer housing 파지 시도

FurnitureBench | demo_icl 트랙, 단일 human demo 조건화, 외부 유료 API 미사용

TL;DR

7
stage / job
65→3.37
gripper 폭 mm
0/7
grasp_verified
rejected
stage 6 continuation

1 배경 / 목적

같은 날 하네스 재선정 카드에서 "매 스텝 실제 모델 호출 → 제한된 도구 1개 실행 → 새 RGB-D → 다음 호출"을 다음 순서로 정했다. 이전 demo_icl(v1-v4, 260916)은 세션이 코드를 통째로 생성해 반복 라운드로 개선하는 session-assisted code generation이었지, 스텝마다 실제 온라인 모델이 결정을 내리는 구조가 아니었다. 이번 작업은 그 구조를 처음으로 실제 실행한 것이다.

제약: 클러스터는 실행 중인 worker를 로그인 노드에서 원격 제어할 수 없다(§4 job 격리 규칙). 따라서 "온라인 폐루프"는 job 1개 = 관측 1회 + 액션 1개로 쪼개고, 물리 상태를 checkpoint로 다음 job에 넘기는 방식으로 구현했다 — 같은 episode 안에서 실시간 제어하는 구조는 아니다.

2 작업 내용

2-1. grasp_v1 → v3 (규칙기반 진단, native_harness)

grasp_v1(job 131903)은 CANCELLED, v2를 거쳐 v3(job 131911, seed 80103)를 실행 — policy_mode: native_authored_sensor_policy, online_llm_loop: false. 이 세션이 코드를 한 번 작성한 뒤 그 코드가 관측→규칙 판단→실행을 스스로 도는 방식으로, "온라인 모델이 매번 결정"하는 것은 아니다. 태그 들어올림 3.84cm 확인, 유닛테스트 43개 통과했지만 icl_evaluation_executed: false, icl_success_rate: null — state.json의 next_action에 "실제 데모 조건화 모델 결정과 전체 조립 평가를 세워라, 수동 규칙을 확장해 놓고 ICL이라 부르지 마라"라고 명시하고 이 트랙을 diagnostic-only로 종료했다.

2-2. native_icl 착수 — 세션이 직접 결정하는 폐루프

여기서부터 decision_source: native_conversation_model — 이 세션이 매 관측 이미지를 직접 보고 다음 도구 호출(move_ee 또는 gripper) 1개와 근거(reason)를 텍스트로 남긴 뒤, 그 호출만 실행하는 job을 제출한다. 참조 데모는 native_harness/demo/demo.json(기존 20260914_drawer_v2의 사람 원격조종 기록, 1,317 프레임)이며, 데모의 절대좌표를 그대로 재생하지 않고 "housing을 세운 채 위 테두리를 잡고 90도 돌려 놓은 뒤 서랍을 순서대로 삽입"이라는 절차만 문맥으로 사용한다(transfer_rule). job 사이 물리 상태 연속성은 신규 continuation_guard.py + environment_checkpoint.py가 checkpoint 저장/복원 후 카메라별 depth 변화량을 비교해 자동 검증한다.

Stage / Job결정근거(요약)control stepsgripper 폭
000 / 132049초기 관측액션 없음, 1차 프레임만 확보0—
001 / 132050move_ee, +4cm 상승gripper가 housing 시야를 가려 들어올려 확보965.0mm
002 / 132184move_ee, +4cm 접근·0.18rad 회전보이는 rim 위로 접근, panel-normal 방향 정렬1565.0mm
003 / 132242move_ee, z=0.16 정렬양쪽 카메라가 동일 rim 위치 합의(0.483, 0.0725, 0.1067)1865.0mm
004 / 132452move_ee, 4.3cm 하강손가락을 rim 위 z=0.1169까지 하강, 닫기 전 관계 확인965.0mm
005 / 133671gripper close양 카메라에서 손가락이 housing 상단 밴드 양쪽을 덮음 확인153.37mm
006 / 133680미실행 (continuation_rejected)2cm 소폭 lift로 파지 유지 확인 예정이었음——

3 결과 (수치)

gripper 폭이 65mm(완전 개방)에서 3.37mm까지 닫혀 housing 패널을 사이에 둔 것으로 보이지만, 매 액션 결과 레코드의 grasp_verified는 7개 전부 false다 — 닫힘 자체를 파지 성공으로 표시하지 않는 구조다(decision_005의 근거: "Closure alone will not verify a grasp; inspect and use a small lift afterward").

stage 6 실패 상세: job 133680은 09:23:54~09:24:11(17초)에 완료됐지만 status: continuation_rejected. 이전 job이 남긴 checkpoint를 복원한 뒤 관측 일관성을 검사한 결과 accepted: false — color_image1 카메라의 worst_local_depth_changed_fraction 0.2314(국소 영역 23.1%가 예상과 다른 depth)이 허용 기준을 넘었다. EE pose 오차(0.000127m)·관절 오차(0.00043rad)·gripper 폭 오차(0.000148m)는 모두 미세했으므로, 로봇 자체 위치가 아니라 장면(물체) 쪽 depth 불일치가 원인으로 보인다. terminal: false라 재시도 가능한 상태로 남아 있다.
인프라 확인: stage 0→5까지는 continuation_validated: true로 6회 연속 cross-job 물리 상태 이관이 성공했다 — 매 액션마다 새 SLURM worker에서 checkpoint를 복원해도 로봇 pose가 안정적으로 이어진다는 것을 확인한 것은 이 세션이 직접 조종하는 구조 자체의 타당성 증거다.

4 Takeaway

의미

demo_icl 트랙에서 처음으로 "규칙기반 스크립트가 아니라 이 세션이 매 스텝 관측을 보고 직접 결정"하는 루프가 실제로 6번 연속 동작했다 — grasp_v3가 명시적으로 요구했던 "수동 규칙이 아닌 실제 데모 조건화 모델 결정"을 만족하는 첫 사례다. 다만 아직 파지 성공 여부조차 판정되지 않았다: gripper가 닫힌 것과 물체를 붙잡은 것은 다르고, 그 구분을 검증할 stage 6이 물리 restore 게이트에서 막혔다. 이는 실패가 아니라 "검증되지 않은 것을 성공이라 부르지 않는" 설계가 의도대로 작동한 사례로 봐야 한다.

5 Next Steps

미해결 한계

stage 6의 continuation 거부 원인이 로봇 상태가 아니라 장면 depth 쪽으로 좁혀졌지만, 정확한 원인(물체가 파지력으로 미세 이동했는지, checkpoint 복원 자체의 렌더링 노이즈인지)은 아직 분리되지 않았다. 7 job 모두 online LLM/VLM 호출 없이 이 세션이 수동으로 관측 이미지를 검토하는 방식이라 external_model_calls: 0 — GPT-Policy 카드에서 언급한 "worker 내부에서 실제 모델을 호출하는 경로"는 아직 없다.

다음 실험

(1) stage 6 재시도 — depth 불일치가 파지에 의한 실제 물체 이동인지 checkpoint 노이즈인지 depth diff 영상으로 먼저 판별, (2) 통과 시 2cm lift로 grasp_verified 판정, (3) 성공하면 housing 90도 회전 → 배치 → 서랍 삽입까지 데모 절차를 이어서 실행, 실패하면 지각/도달/빈파지/미끄러짐 중 어느 단계인지 분류해 해당 액션만 수정.