Index
2026-09-18 — Experiment

온라인 place 사슬 첫 성공 — 1칸 샘플로 결함 6건 잡기

scene_bench | 본 런(1,572칸) 제출 전 세팅 검증

TL;DR

14턴
첫 성공까지
0.3mm
carry slip (성공런)
8회
반복 런
$0.085
성공 런 비용

1 배경 / 목적

본 런 스크립트(tmp/submit_plan_main.sh, place_set 1,572칸) 제출 전에 사용자가 "online control 한 개 샘플 돌려보고 쭉 보여줘"라고 요청했다. 전날(260917) PLACE_MODE=vla·턴 판정 통일·preplace hand-off를 넣었지만(관련 카드) 온라인에서 그 사슬이 실제로 도는지는 한 번도 확인한 적이 없었다.

접근 방식: 셀 하나를 본 런과 완전히 같은 설정으로 반복 실행하며, 드러나는 문제를 하나씩 잡는 방식으로 진행("이건 full-eval을 돌리기 위한 이전 세팅 작업이니 이렇게 해서 잘되면 그걸로 돌리면 된다" — 사용자).

2 작업 내용

셀 A = v1_train_1362__0 mug→countertop, 셀 B = v1_train_2277__2 salt shaker→countertop (둘 다 textlog). 런 8회를 거치며 결함을 순서대로 잡았다.

런결과드러난 문제 → 수정
A v1 (131964)4턴 fail머그를 조리대까지 들고 갔지만 내려놓지 않고 done. 실측 머그 중심 z=0.777 vs 상판 0.937(관통). drive.py snap_to가 carry 시 팔을 안 접음
A v2 (132055)30턴 취소관절공간 홈으로 접었더니 컵을 두고 팔만 이동. 취소 시 episode.json 기록 없음 → flush_record 턴별 원자적 기록 추가
A v3 (132333)4턴 failmove_eef_to(IK+가드+정착)로 preplace/carry 통일, carry 동반검증(slip 2.7mm) — 관통은 사라졌지만 또 done
A v4 (132439)취소navigate 직후 관측 4장 중 after=현재 뷰가 892/892 픽셀 동일(전수 실측) → [before, 주행중간, wrist]로 교체
A v5 (132644)4턴 failwrist 추가해도 또 done — 이 셀 고유의 VLM 오판으로 판단, 셀 변경
B v1 (133509)7턴 fail드디어 pick_and_place→preplace=true인데 VLA가 바닥에 놓음. 레이캐스트 실측: preplace 점이 U자 조리대 AABB의 빈 속(허공)
B v2 (133665)28턴 취소preplace_surface_points(레이캐스트 검증)+surface_approach_candidates(실제 상판 rim 기준) 적용, 사전검증 6/6 도달. 런 중 낙하(slip 0.50m) → lifted_gt 가드가 재집기 거부
B v3 (133705)14턴 success낙하 시 lifted_gt 제거 + nav 루프 가드(6) 적용 → 성공
수정 목록 (tmp/plan_main/src_w1 스냅샷, 전체 테스트 1,019 passed) 1. orchestrator.carry_to_neutral / place.move_eef_to — EEF 중립 carry + slip_m 동반 검증 2. orchestrator.flush_record — 턴마다 episode.json 원자적 교체 3. orchestrator.navigate_prev_frames — [before, 주행 중간, wrist] (중복 제거) 4. place.preplace_surface_points / solve_eef_ik — 레이캐스트 검증 표면 점 + IK 5. nav0.surface_approach_candidates — 실제 상판 rim 기준 접근 (표면 히트 없으면 AABB 폴백) 6. online_planner.report — dropped 시 lifted_gt 제거(재집기 허용) 7. orchestrator --nav-loop-limit(기본 6) — 조작 시도 없이 navigate만 N연속이면 종료 임계 근거(파일럿 101편): 성공 7편의 성공 전 최장 navigate 연속 = 0·1·1·1·1·2·4 → 6은 성공 0편 절단 턴 41% 절약(≈$7.27/$15.71), 49/101편이 끝까지 조작 시도 없음

3 결과 (수치)

지표수정 전수정 후
테이블 관통 (머그 윗면 vs 상판)0.859 < 0.937 (관통)관통 0
carry 동반검증 slipA v3 2.7mm · A v5 1.5mmB v3 성공런 0.3mm
navigate 직후 관측 중복after≡현재뷰 892/892 (MAD 0.00)3-프레임 세트로 교체
표면 접근 도달률 (B 씬)AABB 규칙 0/10 (최근접 0.78m)rim 규칙 6/6 (0.36m)
온라인 VLA place 성공0/52 (누적)B v3 첫 성공 (47스텝)
온라인 restore 파일럿(51편) 대조: 집은 적 없음 46편, 집은 5편은 전부 pick_and_place, 거짓 done 0 — A셀의 거짓 done(3/3)은 그 셀에 고유한 VLM 오판이었다.
남은 병목 순서: pick(파일럿 턴 성공률 2.5%, 편차 큼) ≫ place(hand-off 정상이어도 VLA가 1/3) > 에이전트 오판(셀 고유)

4 Takeaway

의미

사용자 지적 4건(관통·팔만 이동·EEF 중립·바닥 앞)이 전부 맞았고, 그때마다 내 첫 진단("VLA 품질", "기억 없음")은 틀렸다. 영상을 먼저 보고 수치로 확인하는 규칙이 매번 오판을 잡았다.

파일럿(하네스 프리미티브 place)에서는 안 보이던 결함들 — AABB=표면 가정, carry 관통, 재집기 가드 — 이 PLACE_MODE=vla로 바꾸자 전부 드러났다. 프리미티브가 물리를 건너뛰어 이 결함들을 가려 왔던 것이다.

restore 채점은 종료 시점 is_placed_on(done 불필요)이라, B v3처럼 놓고도 에이전트가 모르면 nav 가드가 끊어도 성공으로 채점된다.

5 Next Steps

미해결 한계

hand-off 지점이 조리대 모서리(가장자리 8cm)였다 — 접근 후보에서 앞쪽 표면 폭이 넓은 자리를 우선할지는 미결. 다른 세션이 nav0.py에 자리 게이트(nav_gate.py, 벽·가시성 검사)를 병행 작업 중 — 본 런 스냅샷에 포함할지 사용자 결정 대기.

다음 작업

본 런(1,572칸, tmp/submit_plan_main.sh) 미제출 — 위 수정 전부 반영된 스냅샷은 준비 완료, 제출은 사용자 지시 대기. 관련 리포트 폴더: 260917-online_one_sample_compare/(A v1~v3), 260917-online_salt_place_chain/(B v1), 260918-online_salt_place_success/(B v3).