Index
2026-10-13 · Experiment

삽입 과제 테스트베드 세팅

RoboTTA | In-context self-improvement for large WAMs | FurnitureBench one_leg, AssembleBench, Long-WAM

TL;DR

2/2
안착 판정 검증 (scripted v2)
344
변환 에피소드
~350 / ~660
안착 / 조립 step
0.30
pi0.5 안착률 (n=100)
4/4
AssembleBench expert (B200)

1 배경 / 목적

목표는 대형 WAM이 자기 실패 시도 영상만 보고 다음 시도의 성공 확률을 올리게 하는 것이다. 첫 관문은 과제 선정이다. 처음 제안한 RoboTwin은 Long-WAM 공개 체크포인트가 바로 돈다는 장점뿐이었고, SAPIEN 접촉이 약해 인공적인 과제를 새로 만들어야 했다. 실제 조립 벤치마크(AssembleBench, FurnitureBench one_leg)로 방향을 바꿨다.

확인할 질문: (1) one_leg에서 나사를 빼면 너무 쉬운가. (2) 실패가 인스턴스에 고정된 원인인가, 매번 다른 실행 노이즈인가. 노이즈라면 재시도는 운이고 기억이 배울 게 없다. (3) AssembleBench가 B200 워커에서 도는가.

2 작업 내용

Long-WAM 코드 확인

항목확인 내용근거
히스토리 입력관측 프레임만. 과거 action 없음, proprio는 현재 것만base_lerobot_dataset.py:87, long_wam.yaml, runtime/policy.py infer
컨텍스트 길이P control step을 4 step마다 서브샘플. p0~p768, 최근 P+1 프레임 슬라이딩configs/context/, build_observation_window
파인튜닝resume=<weights.pt> 또는 init_checkpoint. stage-1 초기화 자산은 비공개(URL TBD)docs/TRAINING.md
추론 노이즈seed가 호출마다 고정이라 같은 관측이면 같은 actionruntime/policy.py "seed": int(settings.seed)

FurnitureBench "삽입만" 평가

파일: RoboTTA/scripts/furniture/eval_insert.py, eval_insert_pi05.sh 안착 판정: 기울기 < 25°, 나사 끝 수평 오차 < 7 mm, 깊이 < -6 mm, 원점 높이 +2~24 mm, 10 step 연속 (스크립트 v2 정책 leg_v2.py의 놓기 판정과 같은 기준) seed 고정 반복: 인스턴스 seed마다 reset 직전 재시드, R회 롤아웃 → 인스턴스 간 안착률 분산 vs iid 기대 분산 p(1-p)/R 정책 모드: openpi 서버(pi0.5) / --longwam / --scripted / --fake-policy

Long-WAM on FurnitureBench

데이터: convert_fb_to_longwam.py → data/longwam/furniture_sim/one_leg_low observation.images.{image,wrist_image}, observation.state 8-D(ee_pos3+quat4+gripper1), action 7-D config: configs/longwam/{data,task}/furniture_one_leg.yaml (LIBERO 레시피: P48, chunk 32, global batch 128, 10 epoch, LR 1e-4) 초기화: 공개 LIBERO-IDM 정책(같은 Franka delta-EE 7-D 인터페이스) 학습: scripts/furniture/train_longwam_b200.sh (자동 resume, STEPS=5 스모크) 서빙: scripts/furniture/serve_longwam.py (openpi websocket 포맷, 매 step 프레임 스트리밍)

AssembleBench

레포: ~/repos/Robotics/assemble-bench (hud-evals/assemble-bench, MIT) 구성: Isaac Sim 6 + Isaac Lab Arena, Franka + Robotiq(DROID), 14 과제(peg 8, 기어 3, 너트 3), 15 Hz 실행: --container=nvcr.io/nvidia/isaac-sim:6.0.0-dev2 (익명 pull 가능 확인) + NAS user-site 설치 스모크: scripts/assemblebench/smoke.sh (probe → 설치 → zero-action → 스크립트 expert 4 env)

3 결과

확인결과비고
안착 판정 (scripted v2, seed 1)안착 336 step → 조립 606 stepsettle 로그 tilt 4.9°, depth -16.8 mm와 일치
안착 판정 (scripted v2, seed 2)안착 363 step → 조립 717 stepsettle 로그 tilt 18.1°, depth -8.9 mm와 일치
seed 고정같은 seed 초기 배치 일치seed 0: (0.2459, -0.0148), seed 1: (0.2364, -0.0068)
데이터 변환344 ep / 175,145 framePNG 재인코딩 없음
AssembleBench 스모크PENDING (190847)AssocGrpGRES
pi0.5 삽입 평가 10x10PENDING (190876)AssocGrpGRES
기존 기록의 근거: pi0.5 one_leg 30k는 성공 0.24(n=50)이고 실패 38개 중 26개가 "다리가 베이스 12 cm 이내"에서 멈췄다. 학습된 정책은 나사 전에 삽입에서 이미 막힌다.
아직 수치 없음: pi0.5의 안착률, 조립|안착, 인스턴스 간 분산은 190876이 돌아야 나온다. Long-WAM 정책은 학습 전이다.

4 Takeaway

의미

Long-WAM이 과거 action을 보지 않으므로 "지난번에 내가 뭘 했는지"도 영상에서 읽혀야 한다. 10 Hz FurnitureSim에서 P48은 4.8 s뿐이라 시도 간 기억에는 p384 이상이 필요하다. 나사를 빼면 시도가 약 520 step에서 230 step으로 줄고, 다리를 쥔 채 시작하면 삽입 93 step만 남는다.

one_leg의 실패 유형(넘어짐, 낙하 안착, 뽑힘)은 실행 노이즈 쪽으로 보여 숨은 변수를 직접 넣어야 할 가능성이 크다.

5 Next Steps

미해결

삽입 실패가 인스턴스 고정 원인인지 미확인. Long-WAM FurnitureBench 정책 없음. AssembleBench의 B200 렌더 미확인. own GPU 8장이 다른 job으로 차 있어 extra로만 제출 가능.

다음 작업

190876 결과로 안착률과 분산 확인(0.3~0.6이면 게이트 과제로 적합, 0.9 이상이면 숨은 변수 필요). LIBERO-IDM 다운로드 후 Long-WAM 학습 스모크와 본 학습(4 GPU), 같은 삽입 평가. AssembleBench expert 롤아웃과 pi0.5 체크포인트 평가.

6 업데이트: pi0.5 결과, AssembleBench 기동, Long-WAM 학습

pi0.5 삽입 평가 (b128 40k, seed 0~9 x 10 반복)

항목값
안착30 / 100
조립25 / 100
조립 | 안착25 / 30
seed별 안착 (각 10회)1, 2, 0, 4, 4, 6, 3, 3, 4, 3
seed 간 분산 vs iid 이항0.029 vs 0.021
동질성 카이제곱12.4 (df 9, p 약 0.19)
실패 중 구멍 입구(축 10 mm, 깊이 ±5 mm)까지 간 것42 / 70
실패가 초기 배치에 묶여 있다는 증거가 없다. 같은 배치에서 성공과 실패가 섞인다. 지금 과제 그대로는 히스토리로 기억할 인스턴스 고유 정보가 거의 없다.
p = 0.30이면 운 baseline은 k=2에서 0.51, k=3에서 0.66. 게이트는 2~3번째 시도의 조건부 성공 0.45 이상. 실패 유형이 "입구에서 걸림"으로 모여 있어 숨은 변수를 삽입 오프셋 쪽으로 잡기 좋다.

AssembleBench on B200

NGC isaac-sim:6.0.0-dev2는 기본 사용자가 uid 1234이고 entrypoint가 고정이라 워커 컨테이너로 쓰면 pod가 바로 죽었다(원인은 추정). 로그인 DinD에서 docker cp로 /isaac-sim(18 GB)을 NAS로 복사하고, 워커는 isaac-lab:2.2.0 컨테이너로 띄웠다. 설치는 공식 Dockerfile 순서대로 Kit site-packages에 했다(user-site는 내장 websockets 12에 가려짐).

job 191249, peg_round_8mm expert, step 300의 front / wrist 카메라. 4 env 모두 335 step에 안착.

README는 A100/H100에서 렌더가 안 된다고 적었지만 B200에서는 tiled camera가 정상으로 나왔다. 14개 과제 expert sweep(191255, 16 env x 2 wave)을 제출했다.

Long-WAM

학습 스모크에서 LIBERO 가중치 1649개 전부 로드(missing 0), loss 1.17 → 0.71(5 step). 본 학습 190961은 0.18 step/s, ETA 약 20시간. step 1000 체크포인트로 삽입 평가 10 seed x 3 반복(191256)을 먼저 넣었다.

7 업데이트: AssembleBench expert sweep, Long-WAM 초기 체크포인트

AssembleBench expert 안착률 (B200, 16 env x 2 wave, 카메라 끔)

과제군과제안착 / 32
원형 peg4 mm31
8 mm26
12 mm24
16 mm30
사각 peg4 mm2
8 mm0
12 mm1
16 mm1
기어small32
medium28
large23
너트M85
M1231
M1632

job 191255(9개 과제 후 선점)와 191332(나머지 5개). 사각 peg는 카메라를 켠 기본 조건(191354, 8 env x 2 wave)에서도 8 mm 0/16, 16 mm 0/16이라 카메라 설정 탓이 아니다. env들이 align/insert 단계에서 peg가 z 약 24 mm에 걸린 채 멈춘다.

사각 peg와 nut_M8은 이 환경에서 expert가 거의 못 넣는다. 원인은 미확인이다. peg.py 주석상 사각 peg는 여유 약 0.1 mm, yaw 약 1.5° 넘으면 걸리고 구멍 yaw가 에피소드마다 흔들린다.
원형 peg, 기어, nut_M12, nut_M16은 expert를 데이터 엔진으로 바로 쓸 수 있다. 사각 peg는 yaw가 자연스러운 숨은 변수라 과제 후보로는 좋지만 expert부터 고쳐야 한다.

Long-WAM one_leg 삽입 평가 (10 seed x 3 반복)

체크포인트안착구멍 축 100 mm 이내 도달최소 거리
step 1000 (191256)0 / 3010 / 302 mm
step 2000 (191329)0 / 307 / 3022 mm
step 4000 (191457)5 / 30 (조립 3 / 30)26 / 301 mm 미만
step 6000 (191640)3 / 30 (조립 3 / 30)29 / 30-
step 8000 (191703)5 / 30 (조립 4 / 30)24 / 30-

오픈루프 검증(step 3000, 학습 에피소드 0을 서버와 같은 reset/observe/infer 호출로 재생): 평균 |pred - gt|가 위치 0.009 / 0.005 / 0.006, 회전 0.094 / 0.091 / 0.152, 그리퍼 0.351. 데이터의 평균 |action|은 위치 0.011 / 0.008 / 0.009, 회전 0.039 / 0.086 / 0.304, 그리퍼 1.0. 예측은 gt의 부호와 크기를 따라가고, anchor 120에서 그리퍼 전환 시점이 어긋난다.

서빙 경로는 정상으로 보인다. 남은 후보는 학습 부족, 그리퍼 전환 시점, 폐루프 누적 오차다. 시뮬 쪽 action 변환은 Long-WAM 경로로 따로 검증하지 않았다.
step 4000에서 첫 안착. 구멍 축 20 mm 이내 도달이 24 / 30이고 안착 step은 212~241로 pi0.5(중앙값 237.5)와 비슷하다. step 1000, 2000의 0 / 30은 학습 부족이었다. seed별 안착(각 3회)은 1, 1, 0, 0, 1, 0, 0, 0, 2, 0.
step 6000은 3 / 30으로 step 4000(5 / 30)과 n=30에서 구분되지 않는다. 접근은 축 20 mm 이내 23~24 / 30으로 포화했고 병목은 입구에서의 삽입이다.
step 8000도 5 / 30. step 4000~8000 합산 안착 13 / 90 (0.14)로 정체 상태이고 pi0.5(0.30)보다 낮다. 학습은 19:40 UTC 기준 8650 / 13690 step.

녹화 2개(191458)는 둘 다 실패. seed 0은 축 9.3 mm까지 갔다가 못 넣은 뒤 팔이 학습 분포 밖 자세로 떠돌았다. 학습 190961은 13:22 UTC 기준 4670 / 13690 step. pi0.5(40k)는 같은 평가에서 0.30이다.