TL;DR
- H2O 장면(table + GT pose의 물체 mesh)을 MuJoCo로 재현하고, dataset의 joint/gripper action을 로봇 자체 actuator로 재생하는
physics stage를 만듦. 리뷰 finding 14개를 모두 수정했고 테스트 212 passed.
- dev 16 seq(85 ep/robot)에서 물체가 영상처럼 움직인 moved episode: ALOHA 0/78, UR5e 7/78, YAM 3/78. 로봇 없이 물체만 둔 baseline은 1/78.
- 가설 확인: 물체가 들린 프레임의 28% / 43% / 48%에서 dataset gripper gap이 물체 폭 이상이라 조이지 못함. gap을 20 mm 더 닫으면 UR5e 성공이 7→14로 2배.
- UR5e full 변환(184/184)의 IK 실패는 팔×프레임 0.203(ALOHA 0.075). 그중 58%는 두 2F-85 pad끼리 20 mm floor에 막힌 프레임임.
- ALOHA 재변환에서 daqp가 degenerate QP를 못 풀어 1 seq가 죽었음 → quadprog fallback으로 수정.
1배경/목적
사용자 질문: "h2o랑 같은 세팅을 시뮬에 만들어놓고, 동작을 잘 하는지 성공을 만들어서 확인해야하는건 아닌가?" 결정은 policy 학습 전에 dataset action 자체를 물리적으로 재생해 검증하는 것이었다. 지금 dataset은 사람 손 keypoint를 gripper pose와 폭으로 옮긴 kinematic retargeting이라서, 실제로 물체를 쥐고 옮기는지는 확인한 적이 없었다.
가설: gripper gap(= thumb-tip↔finger-tip 거리 − 12 mm)이 grasp할 때 물체 폭 이상이면, position-controlled gripper는 물체를 조이지 못한다.
2작업 내용
Twin과 재생 (ego2robot/physics.py)
- 물체: H2O mesh를 m 단위로 씀. 충돌은 convex hull이고, rest face 바닥을 평평하게 잘랐다. 잘라야 lotion이 혼자서도 넘어지지 않는다(전에는 89° 기울었음). 질량은 제품 추정값이다(book 1.43 kg … espresso 0.1 kg). ×0.5와 ×2로 바꿔도 결과는 거의 같았다.
- 접촉: friction 0.8, torsional 5 mm, elliptic cone, impratio 10.
- 팔: menagerie actuator에 velocity feed-forward를 더함. TCP 추종 오차 p50/p95는 ALOHA 4.3/20.7 mm, UR5e 0.6/12.2 mm(전에는 24/57, 17/82 mm).
- Episode: action segment마다 재생한다. 손에 든 채 시작하면 GT pose에 weld하고, gripper를 닫은 뒤 release한다.
성공 판정 (moved episode, GT noise floor로 threshold 결정)
ADD-S ≤ 20 mm (≥80% frames), final ≤ 30 mm
centroid ≤ 30 mm (≥80% frames), final ≤ 50 mm
video lift > 30 mm → sim lift ≥ ½ video lift
feasible start: open-gripper overlap ≤ 10 mm, gripper overextension ≤ 2 mm
NOT passing frozen-object / no-robot replays (the robot must cause it)
GT noise floor: resting drift ADD-S p99 2.3 mm, held jitter p99 2.9 mm
실패 원인은 ik_fail, start_collision, overextended, unstable_start, tracking, passive, not_held, dropped, knocked, no_grasp_contact, slipped로 나눈다. export.physics_filter(기본 off)를 켜면 L4 사유로 거른다.
3결과
Dev subset (16 seq, 8개 물체 전부, train/val/test; 85 ep/robot = moved 78 + static 7)
| ALOHA | UR5e + 2F-85 | YAM |
| moved 성공 | 0/78 | 7/78 | 3/78 |
| IK ok + feasible start일 때 성공 | 0/28 | 6/25 | 3/26 |
| static: 건드리지 않음 / 판정 가능 | 6/7 / 6/7 | 5/7 / 4/7 | 6/7 / 6/7 |
| no-robot baseline (moved) | 1/78 | 1/78 | 1/78 |
| 실패 상위 | start_collision 30, ik_fail 15, no_grasp 9 | ik_fail 30, start_collision 22, dropped 9 | ik_fail 47 |
| lifted 프레임 중 gap ≥ 물체 폭 | 28% | 43% | 48% |
진단: gripper를 더 닫으면 (moved 성공)
| variant | ALOHA | UR5e | UR5e dropped |
| base | 0 | 7 | 9 |
| gap −10 mm | 2 | 8 | 7 |
| gap −20 mm | 6 | 14 | 2 |
| mass ×0.5 / ×2 | 1 / 0 | 7 / 7 | 9 / 8 |
Oracle grasp(scripted side grasp, 10 cm lift)에서는 ALOHA spray 89 mm, UR5e milk 98 mm가 들렸고 slip은 1 mm 이하였다. 시뮬레이터가 grasp를 못 하는 것이 아니라 dataset action이 문제다.

UR5e 실패(dropped): 사람은 손바닥으로 32 mm espresso 상자를 쥐지만 손끝 간격이 넓어서 gripper가 44–65 mm로 열린 채 물체를 놓친다. 왼쪽은 실제 영상, 오른쪽은 sim.

ALOHA 실패(no_grasp_contact): power grasp의 thumb/finger 중점이 bottle을 감싸지 않아 손가락이 옆으로 지나간다.

UR5e 성공: espresso 상자를 잡아 142 mm 들어 올렸다(영상은 139 mm). no-robot replay는 따라가지 못하므로 로봇이 만든 성공이다.
UR5e full 변환 IK 분석 + ALOHA 지표 정정
| 지표 | 이전 ALOHA | 새 ALOHA | UR5e |
| 팔×프레임 IK fail 평균 | 0.0740 | 0.0753 | 0.2030 |
| seq ≤ 0.1 | 144 | 143 | 76 |
| any-arm frame (curation) | – | 0.131 | 0.308 |
- 처음에는 ALOHA가 0.074→0.124로 회귀한 것처럼 보였지만 지표를 섞어 본 결과였다. 같은 episode window에서는 0.1365 vs 0.1377로 같다.
- UR5e 실패는 base–target 거리와 무관하다. 58%가 arm-arm floor에 붙어 있고, 최근접 pair는 pad–pad가 38% 이상이다. 그때 두 TCP target 간격은 p50 86 mm(정상 156 mm)다.
- ALOHA subject1/h1/0이 죽은 원인: collision row 8개가 h=0인 degenerate QP를 daqp가 풀지 못함(v=0은 feasible). quadprog fallback을 넣었다. daqp가 풀던 QP의 결과는 그대로라서 기존 production 출력은 유효하다.
4Takeaway
현재 dataset은 물리적으로 실행되지 않는다(성공 0–9%). 원인은 시뮬레이터가 아니라 retargeting이다. 사람 손끝에서 만든 gripper 폭과 위치는 parallel gripper가 실제로 물체를 쥐는 pose가 아니다.
gap만 바꿔도 성공이 2배가 된다. H2O는 모든 프레임에 GT 물체 pose와 mesh를 주므로, 물체를 아는 grasp retargeting으로 근본적으로 고칠 수 있다.
의견
이 결과는 사용자가 제안한 "시뮬에서 성공을 만들어 확인"이 꼭 필요했다는 근거다. kinematic 품질 지표(L1/L2)를 모두 통과한 episode도 물리적으로는 실패한다. 앞으로 데이터 품질은 physics 성공률로 보고하는 것이 맞다.
5Next
- grasp-aware retargeting(workflow 실행 중): 손–물체 grasp 구간을 검출하고, 물체 좌표계에 고정된 grasp(closing axis가 물체를 가로지르게)를 둔다. gap = 폭 − robot별 squeeze이고 approach/release는 blend한다. 3 robot dev 평가로 확인한다.
- production: ALOHA subject1/h1/0 재실행, 두 로봇 전체 physics(CPU job). grasp retargeting이 끝나면 두 로봇을 재변환하고 export한다.
- 한계: rigid 물체(open/pour 판정), in-hand 시작이 이전 grasp를 이어받지 않음, YAM 팔 처짐, 절대 tolerance.