← 리포트 목록
2026-09-07 · scene_bench · online control

온라인 컨트롤 프로토콜 v2 — 측정 타당성 수정

파일럿2 상세 리포트 검토(7건) → strict 접지 · 도달 반경 pick · open/close 활성 · 프롬프트 역학만 · 5전략(rf-v3) → 재파일럿 3(80플랜)

TL;DR

35/439
파일럿2 navigate 중 다른-방 폴백
1.0 m
pick 도달 반경(v2)
280
pytest 통과
18/50
파일럿4 find SR (p2 13/50)

1배경 — 사용자 지적 7건과 확인 결과

#지적코드로 확인한 사실결정
1RESTORE 전용 문구는 치팅?읽기 트랙도 restore 전용 system 프롬프트(build_system_restore)가 있음. writer 전문(writer_preamble_v1)은 과제 무관.가족별 문구 허용하되 역학만(목표 재진술 "put it back where it belongs" 삭제)
2온라인/오프라인 메모리는 같은 것?두 층: ① 컨텍스트 메모리(시드) = 읽기 트랙 산출물 그대로, 매 턴 "Your notes so far"(텍스트) / "Frames you kept as memory"(이미지) 블록으로 들어감 ② 실행 노트 = VLM이 매 턴 한 줄 추가.분리 유지(전략 공통). 노트 규칙 4 추가(스쳐 본 물체 기록)
3"mug만 답하고 하네스가 알아서 간다"navigate는 room=null이면 재질의(방 필수). 누설은 ⓐ 틀린 방+같은 가구 종류 → 집 전체 폴백(*_other_room) ⓑ 바닥 답 방 없음 → 집 전체 바닥 검색 ⓒ pick은 현재 방 스코프.strict 접지 + 도달 반경 pick(§2)
4"harness automatically releases it"은 뭔가find: pick 성공 직후 하네스가 그리퍼를 열고 팔을 빼 물체를 그 자리에 둠(다중 find용).유지, 액션 의미로 서술(사용자: "find는 들고 내려야 다음 걸 진행")
5rf-v2? v3 아니었나논문 결정(260906) 이후 rf-v3만. 파일럿2 설계는 그 이전 문서.5전략 = blind·textlog·frames·rf-v3·vis-pure, tagmem 제외
6mug uid는 VLM이 뽑았나하네스가 배정(현재 방·최근접 인스턴스). VLM은 id를 본 적 없음.리포트 명시
7워크스루 요약 박스—추가 완료(파일럿2 리포트 같은 URL)
+플래너에 open/close 있어야하네스 open/close 스킬은 존재, 프롬프트에서 DISABLED.활성(--articulation 기본 on)
정정. 전 턴 답변에서 "VLM이 category만 내면 하네스가 현재 방 인스턴스로 바로 navigate한다"고 했는데, 그것은 기반 클래스(UnifiedPlanner)의 동작이고 온라인 플래너는 이미 방을 요구했다. 실제 누설은 위 ⓐⓑⓒ 세 곳이다.

2파일럿2 navigate 접지 모드 분포 (행 nav_modes)

런navigateanchorinstanceroominstance_other_roomanchor_other_room성공 플랜
find s0 (25플랜)10966296807 (전부 instance 도달 포함)
find s1 (25플랜)12483283466 (전부 instance 도달 포함)
restore10 (15플랜)7240156380
restore11 (15플랜)14012842061
합계445*3177617152014

* find 242(=233+9 room) + restore 197 + room 모드 합산 방식 차이로 본문 "439"는 room 제외 navigate 수. 모드 정의: anchor 가구 앞 / instance 맞는 방·가구 위 질의 카테고리 인스턴스 옆 / room 방 앵커(surface 없음) / *_other_room 말한 방에 그 가구가 없어 집 전체에서 같은 가구를 찾아 이동(v2에서 제거).

blind의 find 성공 3건(188__2 egg·2169__1 butter knife×2·2159__2 butter knife)은 모두 (방, 가구)를 맞게 추측한 instance 모드였고 폴백 성공은 0건 — 즉 blind 성공은 사전확률("칼은 부엌 조리대")이지 하네스 누설이 아니었다. 그래도 폴백은 "틀린 답을 고쳐주는" 구조라 제거한다.
데이터 사실: 바닥 답은 room=null(find 16행)이라 읽기 채점은 방을 보지 않는다. v2에서는 VLM이 방을 말해야 바닥을 검색하고, GT 진단 gt_ground_strict에는 hit=False(하네스·데이터 한계 열)로 잡힌다.

3프로토콜 v2 — 무엇이 바뀌었나 (커밋 dde93b7)

navigate 접지 (grounding.ground_selection(strict=True))

v3 (파일럿2)

room 필수 · 방에 가구 없으면 집 전체에서 같은 가구 → 그 위 물체로 이동 · 바닥 답은 방 없이 집 전체 바닥 검색

v4-strict (v2)

room 필수(null이면 "navigate requires a room name") · 방에 가구 없으면 재질의 "there is no X in Y" · 바닥 답도 방 필수 · 맞는 방·가구면 그 위 인스턴스 옆(instance) — 읽기 답 계약과 같은 정보량

pick / pick_and_place 대상 해석

v1

현재 방 summaries에서 이름 일치 최근접 → 방 반대편 물체도 대상(VLA만 실패)

v2

within_reach(room_summaries, robot_xy, REACH_RADIUS=1.0) − 이미 든 GT. 반경 밖·방 밖·미존재 모두 같은 문구 "there is no X within reach — navigate first"(방 수준 정보 비누설). 수용체(surface)는 현재 방 유지(대형 가구 중심은 바로 앞에서도 1 m 초과). 진단 out_of_reach.

open / close

프롬프트에 open(category) / close(category) 추가, 대상 = 현재 방의 관절 있는 물체(articulated_object_ids: 자유관절 제외·범위>0) 중 최근접, 프로브 없음(OpeningTask 자체 판정). restore 든 채 가드(1회 재질의)도 open/close에 적용. --no-articulation으로 끌 수 있음. VLA 프롬프트 템플릿은 default("open the X.") — 사용자 open/close VLA 도착 시 프로파일 확인 필요.

시스템 프롬프트 v2 (가족별 차이는 Holding 한 줄뿐)

- navigate(room, surface): go to the named surface in the named room and stop in front of it (next to the object you named if it is on that surface). surface may be null = just enter the room; use "floor" for objects lying on the floor. The room is REQUIRED and taken literally — if you name the wrong room you end up in the wrong room, nothing corrects it. ALWAYS also fill category with the object you are ultimately going for. Manipulation only works within reach, so navigate before acting on an object. - pick(category): grasp and lift an object within reach - pick_and_place(category, surface): one atomic unit — you cannot split pick and place into separate subgoals - open(category) / close(category): open or close an articulated object within reach (drawer, cabinet, fridge, door, ...) … [find] - Holding: after you have lifted an object, the robot sets it back down where it is before your next subgoal — that pick already counts, so pick each target once and move on to the next. [restore] - Holding: once you have lifted an object you keep holding it. navigate carries it with you and never places anything; put it down only with pick_and_place(category, surface) at the destination. While you hold an object you cannot pick another one. … 4. Also record where you see goal-relevant objects (room and surface), even ones you did not act on.

행 진단 필드(신규)

protocol=v2 · grounding=v4-strict · reach_radius · articulation/n_articulated · out_of_reach · n_open_close · gt_ground_strict(GT 답을 VLM이 정확히 말했다고 가정하고 strict 접지 → 모드·hit·room_unmapped·surface_unknown — hit=False는 메모리 실패가 아니라 하네스/데이터 한계).

4재파일럿 3 설계

파일럿2와 같은 컨텍스트·VLA(pi05_mlspaces_place@10000)·플래너(gemini-3.7-flash), 전략만 rf-v2→rf-v3. extra QOS, tmp/submit_pilot3_v1final.sh.

파일럿 4 (112200–112203) 추가: 사용자의 open/close·place 학습 VLA pi05_mlspaces_place_oc@20000으로 교체(본 런 확정 VLA). 하네스 프롬프트를 학습 형식에 맞춤: restore 내려놓기 Place the X on the Y., Open the X., Close the X.(커밋 11f3dc4). 파일럿3(옛 VLA)과 나란히 돌려 프로토콜 효과와 VLA 효과를 분리한다. 로그인 스모크(105 s): 관절 물체 탐지·OpeningTask 생성·판정 정상.
잡구성플랜
112186 / 112187 find s0/s1 (첫 제출 112171/112172는 njoints AttributeError로 사망, 40dd264 수정)e987b40f 10ctx × 5전략(blind·textlog·frames·rf-v3·vis-pure) × 1질의50
112188 restore10bcaf2815 5ctx × 3전략(blind·textlog·rf-v3), place_mode=vla15
112189 restore11609076c0 5ctx × 3전략, place_mode=vla15

비교 축: (a) blind SR 변화(폴백 제거 효과) (b) *_other_room = 0 확인 (c) out_of_reach 빈도 (d) open/close 선택 빈도(VLA 미학습 → 실패 예상, 액션 공간의 비용만 측정) (e) gt_ground_strict hit률(하네스 한계).

5파일럿4 결과 — 프로토콜 v2 + place_oc@20000 (80플랜, $7.7, 잡 112200–112203)

파일럿3(옛 VLA)은 사용자 결정으로 취소. 아래는 파일럿2(v1 프로토콜 + place@10000) 대비 파일럿4. 전략당 n=10(find)·5(restore)라 전략 간 차이는 해석 불가, 프로토콜·VLA 교체가 하네스 지표에 미친 효과만 읽는다.

18/50
find SR (파일럿2 13/50)
2/30
restore SR (파일럿2 1/30)
0
다른-방 폴백 navigate (파일럿2 35)
77→23
find pick 시도→lift (파일럿2 170→25)
1/55
open 실성공 (vacuous 3 제외)
가족전략파일럿2 SR파일럿4 SR도달≤0.6 mpick→liftoor 재질의open/close 선택턴$/플랜
findblind3/104/104/107→5476.30.046
findframes-uniform2/104/103/922→42139.60.159
findrollforward-v3 (p2: rf-v2)4/104/102/611→41905.90.057
findrollforward-vis-pure2/103/105/1014→6646.00.108
findtextlog2/103/104/923→41606.50.055
find합계13/50 (26%)18/50 (36%)18/4477→2366146.90.085
restore v1.0blind / rf-v3 / textlog0 / 0 / 00 / 0 / 2/51/3·0/3·1/45→1·21→2·43→35·1·52·16·49.90.074
restore v1.1blind / rf-v3 / textlog0 / 0 / 10 / 0 / 00/5·0/5·1/53→1·2→1·11→29·26·108·4·1016.30.148

oor = "there is no X within reach — navigate first" 재질의 수 · 도달≤0.6 m = GT 원위치까지 navigate 도착 최소거리 · pick→lift = pick/pnp 서브골 시도 수 → 판정된 lift 수.

프로토콜 진단

실패 사례 (원문 · 원인 · 교훈)

#플랜VLM 원문(발췌)원인교훈
1find 1847__1 rf-v3 / textlog
"Pick up the butter knife I moved earlier"
t=3 note: "Pick failed because butter knife was not within reach; re-navigating to the butter knife on the dining table in the living room" → 같은 식탁으로 20턴 재이동(oor 18/15)기억이 "거실 식탁"이라고 확신(GT 부엌 조리대, min_d 3.1–3.3 m). 반경 밖 문구를 "더 가까이 가라"로만 해석하고 위치 신념을 갱신하지 않음.v1이면 이 자리에서 VLA pick을 헛돌렸을 것. 측정으로는 올바른 실패. 프롬프트에 "그 표면에 없으면 다른 위치를 검토" 힌트를 넣는 건 정책 튜닝이라 하지 않음.
2find 1362__0 · 2224__0 rf-v3
"Pick up all the mugs/remote controls I moved earlier"
t=0: "No mugs were moved earlier based on context; goal is already satisfied" → done(1턴)rf-v3 요약 시드에 해당 이동이 빠져 있음(쓰기 단계 기억 손실).온라인 SR이 읽기 단계 메모리 품질을 그대로 상속 — 읽기 표의 rf-v3 낮은 recall과 일관.
3find 2102__1 frames / vis / blind
"Navigate to the key chain I moved earlier"
"Key chain was moved to the dining table in the kitchen" → 도착 후 done(min_d 4.2–5.6 m)틀린 표면(GT 거실 TV 스탠드)에 도착하고도 프레임에서 열쇠고리를 확인하지 않은 채 완료 선언.navigate_only 질의는 "도착=완료"로 오판되기 쉬움; 채점은 도달 거리라 실패로 정확히 잡힘.
4restore 2224__2 rf-v3
(keyring 원위치 복원)
open(chest of drawers) ×16, 전부 128스텝 타임아웃열쇠고리가 서랍 안이라고 기억 → open 반복; VLA open 실패.open 필요 행은 현재 VLA 상한(1/55) — 본 런 표에서 open 필요 행을 분리 표기.
5restore 2277__2 textlog
(remote control)
pick_and_place(remote control, dining table) ×20, 매번 steps 0 "succeeded"리모컨이 이미 있는 식탁을 목적지로 지정 → vacuous 판정 즉시 참, 물리 실행 없음. VLM은 결과를 못 보므로 같은 결정 반복.vacuous를 실행 통계에서 분리; 프롬프트 변경 없음(정책 튜닝 금지).

실물 증거: 파일럿4 파이프라인 상세(시드·관측·프롬프트 전문·VLM 원문·실행 영상, 워크스루 27플랜) · 턴 페이지 find s0 · find s1 · restore v1.0 · restore v1.1.

채점 규칙 v2 + 스텝 예산 (사용자 승인, 커밋 91942eb) — 파일럿4 재채점

blind가 맞추는 방식(4건 전수 추적): 사전지식으로 (방, 가구)를 찍는다 → 맞으면 하네스가 물체 옆에 세운다 → 프레임에 보이면 집는다. blind navigate 40회 = 헛걸음(anchor) 30 · 적중(instance) 10, pick 7회 전부 적중 직후. 188__2는 13개 표면 순회 중 달걀 옆(0.63 m)을 지나쳤는데(VLM: "not found") 옛 채점(어느 도착점이든 ≤0.85 m)이 성공으로 셈.
전략SR 옛 규칙SR 종료위치+doneSR@예산 (v2)첫 navigate 적중예산 초과성공 시 navigate 수
blind4/103/103/104/102/101.7
frames-uniform4/104/103/106/103/101.0
rollforward-v34/104/103/103/102/101.0
rollforward-vis-pure3/103/102/104/102/101.0
textlog3/103/103/107/102/101.0
find 합계18/5017/5014/5024/5011/50—

본 런 견적 (예산 적용 후 재산정)

가족플랜API(예산 적용 단가 $0.058 / $0.119)GPU·h(단가 138 s / 325 s)8샤드 wall$80/일 캡 기준
find 589 × 5전략2,945≈ $171≈ 113≈ 14 h≈ 2.2일
restore 518 × 5전략2,590≈ $308≈ 234≈ 29 h≈ 3.9일
Letsur 일일 캡이 병목(GPU가 아님). 전략을 3개로 줄이면 절반, 컨텍스트당 질의 수 제한(--queries-per-context)으로도 조절 가능. VLA open 상한(1/55)을 고려하면 open 필요 행(find open_pick 47 등)은 별도 표기.

6Takeaway · Next

의견

가족별 프롬프트가 있다는 것 자체는 읽기 트랙과 대칭이라 문제가 아니고, 내용이 목표 재진술이냐 로봇 역학이냐가 기준이다. 컨텍스트 메모리(시드)는 매 턴 그대로 들어가고 실행 노트가 그 아래에 쌓이는 두 층 구조는 전략 간 공정성을 해치지 않는다. v2 이후 온라인 축은 VLM이 {category, room, surface}를 내야만 이동이 성립하므로 읽기 트랙 답 계약과 정보량이 같다.