Index
2026-10-16 — Experiment

T2-Z push-box(마찰) 재시도 테스트베드: 환경 구축과 smoke

RoboTTA | TTT4dynamics LIBERO env, 녹색 목표 표시

TL;DR

7x
μ 10배 → 이동 거리 차
1/4
smoke 성공
~8px
224px에서 상자 크기

1 배경

one_leg의 ε_bias는 정책 믿음 오차라 환경 숨은 변수가 아니었다. 인스턴스에 고정되고 영상으로 드러나는 숨은 변수를 갖춘 T2-Z 마찰 과제를 재시도 정책 실험의 보조 테스트베드로 쓴다.

2 구축

sources : T2-z-sim/{TTT4dynamics@e7c6963, LIBERO@8f1084e, FastWAM-TTT@8c7371d} venv : T2-z-sim/TTT4dynamics/.venv (py3.10.20, mujoco 2.3.7, robosuite 1.4.0) fixes : cmake 선설치(egl-probe) / sys.path에 LIBERO / robosuite macros_private(FILE_LOGGING_LEVEL=None) / conda-forge libegl+libglvnd+libgl+libopengl -> egl_prefix / MUJOCO_EGL_DEVICE_ID = 물리 GPU 번호 run env : LD_LIBRARY_PATH=T2-z-sim/egl_prefix/lib MUJOCO_GL=egl PYOPENGL_PLATFORM=egl script : scripts/t2z/smoke_push.py

3 결과

μpush이동목표까지성공
0.010.120.185 m0.010 mO
0.010.200.555 m0.379 mX 지나침
0.100.120.026 m0.150 mX 모자람
0.100.200.079 m0.097 mX 모자람
행: (μ0.01, 0.12) 성공 / (μ0.1, 0.12) 모자람 / (μ0.01, 0.20) 지나침. 열: 첫 프레임, 90번째, 마지막.

4 Takeaway

환경 숨은 변수, 목표 표시, 영상으로 드러나는 실패 방향이 모두 갖춰져 재시도 정책 실험의 전제가 성립한다. 다만 정면 224px에서 상자가 작아서 입력 해상도나 크롭을 검토해야 한다.

5 Next

μ(0.002~0.2, 로그 균등) × push × 목표 거리 보정 sweep (저해상도, sbatch).
재시도 오라클: 관측 이동 거리로 μ 믿음을 갱신해 다음 push 결정 → 실패→수정→성공 에피소드 → AD 변환.
같은 μ·같은 시작 위치로 재시도 리셋 구현, 손목 카메라 저장 확인.

6 업데이트: 보정 sweep과 기억의 최대 이득

μ 25단계 × 밀기 21단계 = 525회(job 196025, 4분 53초). 표만으로 K=5 재시도를 4000 인스턴스에서 계산했다. memory는 μ를 모르는 교사로, 관측 이동 거리와 맞는 μ만 남긴다.

μ 0.016~0.064k=1k=2 (1회 실패 후)누적 k=5
oracle_known (μ 앎)1.00-1.00
memory (교사)0.291.001.00
memoryless_random (운)0.240.240.71
memoryless_fixed (반복)0.290.000.29
전체 μ: 이동 거리 vs 밀기(왼쪽, 녹색 = 목표 범위), 조건부 성공률(오른쪽). 저마찰은 테이블 밖으로 떨어지고 고마찰은 목표에 못 미친다.
도달 가능 구간 μ 0.016~0.064.
판정: 기억 이득이 매우 크다(1회 실패 후 1.00 vs 0.24). Long-WAM 단계로 넘어갈 근거.
주의: 결정론적 시뮬이라 한 번 관측으로 μ가 확정된다. 실제 난이도는 영상에서 이동 거리를 읽는 정확도(상자 약 8px, 반경 2.5cm)에 달려 있다. 실행 노이즈로 난이도 조절 가능.

7 업데이트: 카메라 / 교사 관측 노이즈

Long-WAM LIBERO-IDM은 agentview + wrist(512 렌더 → 224, 가로 연결 224×448, 180° 뒤집기)를 쓴다. push 환경은 같은 LIBERO agentview 자세라 기본 카메라 유지. 상자는 정면에서 약 12px(약 3px/cm), wrist는 밀기 후 상자를 잃으므로 히스토리에 정면 마지막 프레임이 필수.

LIBERO 학습 데이터 vs push 환경 (같은 카메라)

결정론 + 정확한 관측이면 1회 실패 후 바로 성공해서 히스토리가 1개뿐이다. 교사가 이동 거리를 N(0,σ) 노이즈로 본다고 두고 표 시뮬(3000 인스턴스, K=6):

반경σ조건부 SR k=1..43회 이상평균 시도
2.5cm2cm0.29 0.91 0.76 0.856%1.79
1.5cm2cm0.18 0.73 0.57 0.5122%2.15
1.0cm2cm0.11 0.54 0.40 0.3542%2.52
1.5cm 기억 없음-0.16 0.15 0.16 0.14-2.83 (실패 40%)
반경 1.5cm, σ별 조건부 성공률과 성공 시점 분포
사용자 승인: 반경 1.5cm, 교사 관측 σ 2cm. 실행 노이즈(2번)는 이후 강건성 실험.

8 업데이트: 재시도 에피소드 생성기

문제원인수정검증
같은 action이 단계마다 다른 움직임env가 밀기 때만 OSC 출력 배율 1→4배율 4 고정, action = a·s(t)/4원래 env와 이동 소수 4자리 동일, max|a| 0.45
같은 밀기인데 결과가 다름(0.131 vs 0.123)LIBERO sampler가 reset마다 상자를 ±2.5cm 이동reset 후 상자를 (init_x, 0)에 고정seed 무관 이동 0.1349 반복
옛 보정 표 예측 0.171 vs 실제 0.135옛 표는 시작 x −0.146재보정 1230회(job 196384, 11분)정지 step ≤119 → 시도 144 step, μ 0.0166~0.0577
교사가 같은 밀기 반복(24개 중 3개)argmax가 성공 구간 가장자리를 고름 + 이동이 밀기에 대해 계단형목표 중앙 쪽 동점 처리, 원판 앞/뒤 방향을 정확히 관측, 실패 밀기 금지반복 0건
24/24
파일럿 성공
50%
3회 이상 필요
2.6
평균 시도
~8s
시도당 생성 시간
파일럿 ep0(5회 만에 성공): 행 = 시도, 열 = 시작 / 밀기 직전 / 밀기 직후 / 마지막(정면) / wrist 밀기 / wrist 마지막. 덜 감 → 덜 감 → … → 원판 위
생성: scripts/t2z/gen_push_retry.py (+ .sh, 재개 가능), 환경/교사: scripts/t2z/push_retry_env.py 변환: scripts/t2z/convert_push_retry_to_longwam.py (시도 이어 붙임, 20Hz, state 8D, 시도 0 + 개선된 시도만 loss) 학습: TASK=t2z_push_retry (configs/longwam/{data,task}/t2z_push_retry.yaml, p768, libero-idm 초기화) 대량 생성: job 196398, 2000 에피소드 → outputs/t2z/retry_r015_s020
교사가 쓰는 정보(원판 앞/뒤 + 대략의 거리)와 Long-WAM이 영상에서 읽어야 하는 정보가 일치한다. 실제 시뮬은 계단형 오차 때문에 표 시뮬보다 시도가 많다(2.6 vs 2.15).

Next: 변환 → Long-WAM smoke → p768 AD 학습 → 평가(조건부 SR, 기억 없는 기준선, 히스토리 셔플/전이).

9 업데이트: 대량 생성 · 변환 · 학습 제출

2000/2000
교사 성공
2.08
평균 시도
597K
프레임 (anchor 98%)
~9.2K
학습 update
성공 시도12345
에피소드 수3691157428451
조건부 성공률0.180.710.900.981.00
생성 job 196398 (43분) → outputs/t2z/retry_r015_s020 (1.7GB) 변환 job 196432 (7.5분) → data/longwam/t2z_push/retry_r015_s020 (29GB) smoke: 5 step loss 0.90 → 0.38 (login 1 GPU, batch 2) 학습 job 196441: 4 GPU, libero-idm 초기화, p768, global batch 128, 2 epoch 평가: scripts/t2z/eval_push_longwam.sh <run> <weights> 101000-101099 on|off (history off = 같은 모델의 기억 없는 기준선)
파일럿(3회 이상 50%)보다 실제 분포는 쉬웠다(24%). 표 시뮬 예측(22%)과 일치.

10 업데이트: 첫 평가 — history on 0.84 vs off 0.21

0.84
s3000 on, 6회 내 성공
0.21
off (고정 노이즈 반복)
0.56
조건부 성공률 k=2 (교사 0.71)
3.9→1.3cm
시도1→2 거리 오차 중앙값

학습 196441은 /dev/shm Bus error(p768 × batch 8)로 죽음 → 197098 재제출. 설정은 batch 2 / 글로벌 64 / 3000 step, sbmr로 선점 후 자동 재개. 평가 동작 확인 중 회전 액션 버그 발견: 학습 데이터에서 범위가 0인 차원은 정규화기가 모델 출력을 그대로 통과시켜 팔이 꺾임 → 평가 때 회전 0, 그리퍼 +1로 고정.

run누적@1@2@3@6cond k=2cond k=3방향 맞는 재시도
교사 (학습 데이터)0.180.760.981.000.710.90–
s1000 on0.140.320.420.420.210.150.44
s2000 on0.250.550.700.770.400.330.63
s3000 on0.210.650.750.840.560.290.70
s3000 off (고정 노이즈)0.210.210.210.210.000.000.00
왼쪽: k회 안에 성공한 비율. 오른쪽: 아직 못 푼 인스턴스의 시도별 |이동−목표| 중앙값. 100개 인스턴스, 학습에 안 쓴 seed.
off 주의: Long-WAM sampler는 infer마다 같은 seed를 써서, 기억이 없으면 매번 똑같은 밀기를 반복한다(인스턴스 내 표준편차 0). 그래서 지금 off는 운 기준이 아니라 결정적 반복 기준이다. 서버 reset에 seed를 넘기도록 수정했고, 시도마다 seed를 바꾼 off 평가는 job 199907로 진행 중.
실패 16건: (1) 2번째 교정 후 정체 9건, 같은 밀기를 반복(3회 이상 시도한 학습 데이터가 24%뿐). (2) 6번째 시도가 768-step 창을 넘으면 밀기가 무너짐(~0.06m). (3) 낮은 μ에서 첫 시도 과잉 밀기(0.26~0.40m).

보지 못한 인스턴스에서도 Long-WAM이 자기 이전 시도 영상을 보고 방향을 맞게 교정한다. 시도 1은 on/off가 100/100 동일하므로 개선은 전부 history에서 온다. 3번째 시도부터 계속 다듬는 능력은 교사보다 많이 약하다. 다음: 운 기준(199907), history shuffle, 3회 이상 에피소드 가중 / 추가 학습, 768 창 처리.

11 업데이트: 운 기준 — history on 0.84 vs 운 0.35

0.84
history on, 6회 내 성공
0.35
운 기준 (off, 시도마다 seed 변경)
7x
조건부 k=2: 0.56 vs 0.08
0.70 vs 0.56
방향 맞는 재시도 (우연 0.5)
run누적@1@2@3@6cond k=2cond k=3오차 중앙값 시도 1/2/3
s3000 on0.210.650.750.840.560.293.9 / 1.3 / 2.1 cm
s3000 off, seed 변경 (운)0.210.270.290.350.080.033.9 / 4.7 / 5.0 cm
s3000 off, 고정 노이즈0.210.210.210.210.000.003.9 / 5.0 / 5.0 cm
운 기준 곡선 추가. 기억 없이 미는 거리의 인스턴스 내 표준편차는 중앙값 1.1cm로, 성공 반경(1.5cm)과 비슷하다.
설명 영상(51초). 왼쪽은 이전 시도를 기억하는 모델, 오른쪽은 기억 없이 다시 미는 같은 모델(운). 예시 A(seed 101002, 뻑뻑한 바닥)와 예시 B(101027, 미끄러운 바닥).

자기 이전 시도 영상을 보고 하는 재시도 개선은 운을 크게 넘어선다(조건부 k=2 7배, 오차 3.9→1.3cm vs 3.9→4.7cm). 남은 간격은 교사(k=3까지 0.98)와의 3번째 시도 이후 차이. 다음: history shuffle(영상 내용에서 μ를 읽는지), 3회 이상 에피소드 가중, 768 창 처리, 실행 노이즈 강건성.

12 영상: rollout과 모델이 예측한 미래

모든 영상은 학습한 Long-WAM(step 3000)이 직접 민 rollout입니다. 교사(expert) 영상은 없습니다. 평가 seed는 101000~101099로 학습 seed(1000~2999)와 겹치지 않습니다. 2배속.

12.1 기억 있음 vs 운 기준 (같은 가중치, 같은 상황)

seed 101002 · 뻑뻑한 바닥(μ 0.044), 목표 11.2cm. 기억 있음: 8.0cm 모자람 → 10.0cm 성공. 운 기준: 7.2~8.6cm를 반복하다 6번 모두 실패.
seed 101027 · 미끄러운 바닥(μ 0.018), 목표 20.0cm. 기억 있음: 46.3cm 지나침 → 19.6cm 성공. 운 기준: 40~44cm로 계속 지나쳐서 6번 모두 실패.

12.2 기억 있음, 오래 걸린 경우와 실패한 경우

seed 101076 · μ 0.017, 목표 21.4cm. 48.6 → 24.0 → 23.2 → 21.0cm, 4번째 시도에서 성공(조금씩 다듬기 성공).
seed 101012 · μ 0.047, 목표 14.1cm. 11.1 → 12.1 → 11.4 → 11.4 → 10.2 → 6.4cm. 2번째에 방향은 맞게 고쳤지만 그다음 정체했고, 768 step 창을 넘는 6번째 시도에서 무너짐 = 대표 실패 유형.

12.3 실제 vs 모델이 상상한 미래

Long-WAM(IDM 구조)은 action을 내기 전에 앞으로 32 step(1.6초)의 영상 latent를 먼저 그리고, 그걸 보고 action을 정한다. 실제 추론에서는 이 예측을 sigma 0.9(노이즈 90%)까지만 디노이즈해서 바로 넘긴다. 아래 오른쪽 화면은 보기용으로 같은 입력에서 sigma 0까지 디노이즈(10 step, 별도 노이즈)한 뒤 VAE로 디코딩한 것이다. 시각화를 켜도 action이 바뀌지 않음을 확인했다(세 인스턴스 모두 이동 거리가 원래 평가와 동일). 오른쪽은 그 순간까지 가장 최근 예측(최대 0.5초 전, replan 10 step)에서 해당 시점의 프레임이다.
seed 101002 (성공 2회). 왼쪽 실제, 오른쪽 예측.
seed 101027 (미끄러움, 성공 2회).
seed 101012 (실패 6회).

생성: scripts/t2z/make_rollout_clip.py, scripts/t2z/make_imagine_clip.py, 예측 덤프 serve_longwam.py --dump-imagine (DUMP_IMAGINE=dir).

13 상상한 미래는 실제로 맞나? (빠른 갱신 효과와 분리)

질문: 12.3 영상에서 상상한 미래가 짧게 가는지 길게 가는지까지 맞히는 것처럼 보이는데, 진짜 예측인가, 0.5초마다 갱신돼서 그렇게 보이는 것인가?

방법: 상자가 맞기 전(시도 내 step 60, 밀기 시작 약 70)에 한 예측만 골라, 32 step 뒤(t=92, 최종 이동의 약 95% 지점) 상자 위치를 같은 시점 실제 프레임과 비교했다. 맞은 직후(step 70 → t=102)도 같이 표시. 상자 위치는 정면 영상의 파란 픽셀 중심을 cm로 환산(0.461 cm/행, 최대 오차 0.6cm).

인스턴스 · 시도맞기 전 예측 t=92 (예측 / 실제)맞은 직후 예측 t=102 (예측 / 실제)목표
101002 · 18.2 / 7.712.3 / 7.711.2
101002 · 210.9 / 9.511.1 / 9.811.2
101027 · 119.7 / 25.935.8 / 42.120.0
101027 · 213.4 / 12.919.4 / 18.920.0
101012 · 113.2 / 11.013.5 / 10.814.1
101012 · 2~512.2~12.8 / 10.1~12.012.3~13.2 / 10.1~12.114.1
101012 · 6 (768 창 초과)12.0 / 6.811.5 / 6.814.1
3.8cm
|예측−실제| 1번째 시도 (n=6)
1.3cm
|예측−실제| 2~5번째 시도 (n=12)

(1) 빠른 갱신 효과는 맞다. 영상의 예측은 최대 0.5초 전 것이라, 상자가 움직이기 시작하면 속도를 보고 바로 고친다. (2) 그래도 맞기 전 예측만 보면, 1번째 시도는 마찰과 무관하게 목표 근처에 멈춘다고 상상하고(마찰 정보가 없으니 목표를 그림), 실패를 한 번 본 뒤에는 실제와 약 1cm 안으로 들어온다. 이전 시도 영상이 동역학 예측을 바꾼다는 정성 증거다. (3) 여전히 낙관적이다. 101012에서는 12~13cm를 상상하지만 실제는 10~12cm라, 거의 된다고 믿고 같은 밀기를 반복하는 정체 실패와 맞아떨어진다.

주의: IDM 구조에서는 상상한 영상이 곧 계획이다(action이 그 영상을 따라감). 그래서 위 차이는 순수 물리 예측 오차가 아니라 "자기 밀기의 결과를 어떻게 상상했나 vs 실제"다. 표본이 3개 인스턴스뿐이라, 30개 인스턴스 history on/off 비교를 job 200844 / 200845로 진행 중이다. off에서 2번째 이후 오차가 1번째 수준에 머물면 history가 예측을 바꾼다는 직접 증거가 된다. → 아래 13.1에서 확인.

13.1 30개 인스턴스 on / off 비교 (job 200844 / 200845)

같은 30개 인스턴스(s101000~101029)를 history on과 off(매 시도 seed 변경 = 운 기준)로 돌렸다. 시도마다 맞기 전 시점(step 50 / 60 / 70) 3개의 예측을 골라, 32 step 뒤의 상자 이동을 실제 프레임과 비교했다. 픽셀→cm 환산은 시도 223개로 다시 맞췄다(0.410 cm/행). 1번째 시도는 on과 off의 seed가 같아서 결과가 완전히 같다(검증용). 그래서 1번째에 실패한 24개 인스턴스는 2번째 시도에서 정확히 같은 집합으로 비교된다.

시도on: |예측−실제| 평균 / 중앙 (n)off: 평균 / 중앙 (n)
12.70 / 0.98 (90)2.70 / 0.98 (90)
2 (같은 24개)0.73 / 0.54 (72)2.33 / 1.01 (72)
30.88 / 0.65 (36)2.15 / 0.99 (66)
40.80 / 0.66 (27)2.28 / 1.01 (63)
51.13 / 1.04 (24)2.18 / 1.11 (60)
6 (on은 768 창 초과)2.30 / 1.39 (24)2.10 / 0.86 (60)
0.73cm
on 2번째 시도 평균 오차
2.33cm
off 2번째 시도 평균 오차
0.979 / 0.893
2번째 시도 예측-실제 상관 (on / off)
24 / 11
해결 수 /30 (on / off)
왼쪽: 시도별 맞기 전 예측 오차. off는 몇 번을 다시 해도 1번째 수준(평균 약 2.2cm)에 머물고, on은 실패를 한 번 본 뒤 1/3로 줄어든다. 오른쪽: 2번째 시도의 예측 vs 실제(같은 24개 인스턴스). off는 크게 빗나간 점(예측 19cm / 실제 12cm, 실제 22cm인데 14cm 예측 등)이 남는다.

(1) 직접 증거가 나왔다. 같은 인스턴스, 같은 2번째 시도에서 이전 시도 영상이 context에 있으면 맞기 전 예측 오차가 2.33 → 0.73cm(평균), 1.01 → 0.54cm(중앙)로 줄어든다. off는 6번을 해도 줄지 않는다. 빠른 closed-loop 갱신은 on/off에 똑같이 있으므로, 이 차이는 history 때문이다. (2) 평균과 중앙값의 차이가 큰 것은 off에서 가끔 크게 빗나가는 예측 때문이다. 마찰이 극단(아주 미끄럽거나 아주 뻑뻑)일 때 기본값을 그대로 상상한다. (3) on의 6번째 시도에서 오차가 다시 커지는 것은 768 프레임 창(약 5.3 시도)을 넘어 1번째 시도가 잘려나가기 때문으로 보인다. 앞서 101012·6에서 본 현상과 같다.

한계: IDM 구조라 상상한 영상은 "계획한 밀기의 결과"이므로, 오차가 줄어든 것은 (a) 마찰 추정이 맞아졌거나 (b) 실제로 실행되는 밀기와 상상이 더 일치하게 됐거나의 혼합이다. 둘 다 이전 시도를 활용한 결과라는 결론은 같다.