TL;DR
- 전체 dataset moved 성공: ALOHA 4→176 / 829 (0.5%→21%), UR5e 61→314 / 829 (7.4%→38%)
- 튜닝 안 한 held-out 16 seq에서도 0/9/2 → 14/37/25 (ALOHA/UR5e/YAM) — dev 과적합 아님
- 독립 검증 결과 blocker 0, major 7 → 수정 라운드(wf_0fa01853-449) 진행 중
11.6→14°
최대 target 회전 step (사람 11.6°)
1 배경 / 목적
physics replay(별도 카드)에서 기존 kinematic dataset의 moved 성공은 ALOHA 4/829, UR5e 61/829로 거의 실행되지 않았다. 원인은 retargeting이다.
기존 한계: gripper gap이 사람 thumb–index 거리에서 나와 lifted 프레임의 21–48%에서 gap ≥ 물체 폭. TCP가 물체를 감싸지 않고, in-hand 시작 시 open gripper가 물체와 겹침. gap만 20 mm 더 닫아도 UR5e 성공이 2배.
→ H2O GT 6D pose + mesh로 grasp 자체를 다시 만드는 방향을 택했다.
2 작업 내용
Workflow wf_0720fefc-34c (Implement → Review[physics, integration] → Fix), 이후 독립 검증 wf_363747b3-2dc (data/physics lens, code/integration lens).
신규: ego2robot/grasp.py (검출·후보 탐색·feasibility·pairing·trajectory)
ego2robot/grasp_state.py (numpy 전용 contact arrays)
tools/grasp_summary.py, tests/test_grasp.py, docs/DESIGN.md §18
prepare 순서: retarget → table → placement → grasp.plan_grasps → bimanual IK(grasp-aware target/gap) → contact arrays
grasp.enabled: false 이면 이전 prepare와 bit-identical
검출 (§18.2)
- pinch 거리 on 20 mm / off 30 mm (hysteresis). 근거: lifted 프레임의 97%가 ≤ 20 mm, 99.9%가 ≤ 30 mm (max 37 mm).
- carry(손바닥 좌표계에서 물체 동행) + support(들린 물체, 손 40 mm 이내). 20 frame 미만 gap 병합, 6 frame 미만 grasp 폐기, 다른 손이 잡는 동안 evidence < 50% interval 제거(assist).
- 184 seq: lifted 프레임 커버율 99.95%, 검출 arm-frame 중 pinch >20/>30 mm 비율 15.9/5.5% → 12.5/3.6%.
합성 (§18.3) / trajectory (§18.5)
- grasp당 물체 좌표계 고정 gripper pose 1개. closing axis는 사람 grasp 주변 10° 격자 탐색. pad patch(±10 mm) 폭 ≤ stroke−6 mm, 접촉면 기울기 ≤ 20°(공통 ≤ 10°), 사람 TCP 80 mm 이내·90° 이내.
- 로봇 hand 형상(MuJoCo)으로 open/fully-open 통과, closed 양 pad 접촉, table clearance, 접근 경로 검사. 단일 팔 IK 연속성(`ReachCheck`): IK 실패 증가 ≤ +5%.
- squeeze = 무게 m g/(2μ), 밀림 μ m g, closing axis 중력 토크를 버티는 값 + 8 mm margin.
- SE(3) blend → pre-grasp(접근축 뒤 40 mm) → 직선 접근 → closing ramp → lock → opening ramp → retreat → blend 복귀. transition 중 gripper는 단조 개방, flip variant는 blend당 1회 선택.
리뷰에서 수정된 major 4건
- release 직후 gripper가 사람 aperture를 따라 재폐쇄 → transition gap 단조 개방
- export state가 command라 영상 손가락과 불일치 → state를 도달 opening으로
- flip을 frame마다 선택해 blend가 한 frame에 40–89° 점프 → blend당 1회
- release ramp 손가락이 물체 안쪽에 렌더 → `gap_contact` 렌더
3 결과
스냅샷 0201b3b, GPU 1장 job 199412, 9분 21초. tests 223 passed.
Physics replay moved 성공 (ALOHA / UR5e / YAM)
| grasps off | 1차 구현 | fix 후 (8864596) |
| dev 16 seq (moved 78) | 0 / 7 / 3 | 21 / 33 / 31 | 20 / 30 / 32 |
| held-out 16 seq (moved 76, 튜닝 없음) | 0 / 9 / 2 | 15 / 36 / 28 | 14 / 37 / 25 |
| static undisturbed, dev (of 7) | 6 / 5 / 6 | 7 / 5 / 6 | 7 / 6 / 6 |
| 최대 target 회전 step (사람 11.6°) | – | 62 / 89 / 72° | 14 / 14 / 14° |
| IK fail any-arm, dev | .113 / .261 / .431 | .122 / .239 / .294 | .133 / .262 / .301 |
전체 dataset (독립 검증자 직접 실행, 184 seq, 실패 0 / NaN 0)
| ALOHA | UR5e |
| moved 성공 (of 829) | 4 → 176 | 61 → 314 |
| static undisturbed (of 104) | 81 → 86 | 68 → 72 |
| static 새로 disturbed / 새로 고쳐짐 | 2 / 7 | 12 / 16 |
| prepare p50/p90/max (on) | 28/47/76 s | 40/69/108 s |
| prepare p50/p90/max (off) | 18/28/53 s | 24/39/86 s |
Ablation (dev moved 성공) 및 물체별
- gap-only(사람 pose 유지, gap만 맞춤) 7/12/14 → pose 재합성이 핵심. weight-only squeeze 12/30/29. squeeze margin 3 mm: 21/23/30.
- ALOHA: lotion 9/12, spray 7/10, espresso 4/11; milk·chips·cocoa·cappuccino는 0/39 (stroke 58 mm보다 넓음). UR5e: espresso·cocoa·milk 각 6/10–11. YAM: espresso 10/11, milk 9/10.
검증: dev/held-out 80/80 파일 bit-identical 재현, disabled 모드는 HEAD와 bit-identical, joint step ≤ 0.120 rad·site step ≤ 40 mm(grasps off와 동일), export contract(v2.1·v3.0) 모든 frame 성립.
4 Takeaway
"성공을 만들어서 확인"이 처음 가능해졌다. 전체 dataset 기준 ALOHA 0.5%→21%, UR5e 7.4%→38%.
튜닝하지 않은 held-out에서도 같은 규모 개선 → 일반화됨. ALOHA의 한계는 기구학적(stroke 58 mm)이며, 넓은 gripper의 UR5e가 성공 수 기준 최선.
5 Next Steps
독립 검증 major 7건 → 수정 라운드 wf_0fa01853-449 진행 중:
- blend 스침: blend 약 10%가 IK 도달 open hand로 물체를 스침(clearance는 계획 target에만 1 mm margin) → flag 없이 dataset에 포함됨
- UR5e joint 0 wrap: frame 0부터 grasp인 경우 home_q(π) 쪽 wrap으로 +2π 한계 → 팔이 한 바퀴 회전 (12–15개 팔)
- 인접 grasp 간 gap 상한: 접근 시 gripper가 덜 열려 손가락 관통 (YAM 최대 34 mm)
- 다른 손과 충돌: 직선 approach/release/retreat에서 거리 미검사 (최대 −57 mm)
- GT pose flip: 5 seq에서 90–180° 뒤집힘이 smoothing으로 회전화 → lock된 gripper가 31.9°/frame 회전
- minor 12건. 수정 후 독립 검증 → 커밋 → production 2 로봇 재변환(invalidate prepare → replan+vlm GPU → physics → export → verify)