접촉 주도형 파지 v1 — 로봇 악수 최초 성공 시연 (중간보고): 감속 대신 접촉을 목표로
초록
8월 20일 v3 curl 스윕 90개 전부 접촉 0건으로 끝났던 로봇 악수 그립이 접촉 주도형 컨트롤러와 v4 적층 맞잡기 기하 재설계로 최초 성공했다. 침투 게이트 4.37%(≤5%), 손바닥 도킹 유지율 1.0, 손가락 10/10 감싸쥠·유지율 전부 1.0 — 게이트와 과제 실행을 분리 측정한 상태의 성공이다. 핵심 반전은 사전-감속(회피 도구) 제거: 일정 속도 폐쇄 + 토크 상한 순응 + 접촉 후 settle→anchor 2단 유지. 기하 결함 3건(v3 맞물림 상시 침투, B손 중력 처짐 1.8mm, 관절 마찰에 의한 settle 정지)을 전부 실측으로 잡았다. 한계는 단일 조건 1건이라는 점이며, 향후 fingershake 브릿지(8600 시연)→강건성 스윕→모방학습 재개 로드맵과 선택지를 보고한다.
접촉 주도형 파지 v1 — 로봇 악수 최초 성공 시연 (중간보고)
저자: Moojoco (hb5u)
일자: 2026-08-28
단계: 8600 실악수 로드맵 1단계 (접촉 주도형 파지 컨트롤러) — 완료
선행: 2026-08-28-moojoco-handshake-4d-dual-gpu-proposal-review, 2026-08-20-moojoco-handshake-v3-curl-sweep-failure
코드: scripts/contact_driven_grasp_controller_v1.py, urdf/amazinghand_5finger_docking_v4.xml
0. 요약
8월 20일 v3 curl 스윕 90개 전부 접촉 0건으로 끝났던 로봇 악수 그립이, 접촉 주도형(contact-driven) 컨트롤러 + v4 적층 맞잡기 기하 재설계로 최초 성공했다.
| 지표 | 결과 | 기준 |
|---|---|---|
| 침투 게이트 (캡슐 반경 대비) | 4.37% | ≤ 5% |
| 손바닥 도킹 유지율 (HOLD 2초) | 1.0 | ≥ 0.9 |
| 손가락 감싸쥠 (원위 세그먼트 접촉) | 10/10 | ≥ 8 |
| 손가락별 HOLD 접촉 유지율 | 10/10 전부 1.0 | ≥ 0.8 × 8지 |
| 재현성 | 재실행 동일 결과 | — |
게이트 통과와 과제 실행 여부를 분리 측정한 상태의 성공이다 — Stage 3 거짓양성(게이트 통과했지만 손이 안 움직임)과 다르다.



1. 무엇을 뒤집었나 — 제어 전략의 반전
8월 20일 진단대로, 기존 실패의 근본 원인은 회피용 도구(근접도 기반 사전-감속)를 그립에 재사용한 것이었다. 구버전 컨트롤러의 핵심 라인은 이랬다:
slow_factor = clip(근접도 / 감속시작거리, 0, 1) # 가까울수록 0
굽힘 += 진행분 × slow_factor # 접촉 직전 동결
접촉이 목표인데 접촉 직전에 굽힘이 점근적으로 멈추므로 90/90 접촉 실패가 필연이었다. v1 컨트롤러는 이를 정반대로 뒤집었다:
- 감속 없는 폐쇄: 손가락을 일정 속도로 계속 굽힌다. 과도한 힘은 감속이 아니라 토크 상한(0.25 N·m)이 막는다.
- 접촉 = 정지 신호가 아니라 목표 이벤트: 근위 세그먼트가 닿아도 관절을 얼리지 않는다(조기 동결은 긴 손가락을 모서리에 걸린 갈고리로 만든다 — 실측 확인). 낮은 토크로 계속 구동하면 근위가 모서리를 타고 미끄러져 올라가 자연스럽게 감싸쥔다(순응 파지).
- 감싸쥠 판정은 원위 세그먼트 접촉: 원위가 상대 손바닥 면에 앉으면 그 손가락은 유지 모드로 전환.
- 2단계 유지(settle→anchor): 접촉 직후 0.4초는 미세 정토크로 힘 평형점을 찾게 두고, 그 평형 위치를 스프링 앵커로 승격(+토크 바이어스). 손가락마다 다른 평형점은 힘이 찾고, 유지·과압착 방지는 스프링이 맡는다.
상태 기계: APPROACH(y 정렬) → DESCEND(하강 도킹) → CLOSE(폐쇄) → HOLD(유지 2초).
2. 기하 재설계 — v4 적층 맞잡기(stacked clasp)
컨트롤러만의 승리가 아니다. 이번에도 결함 3개가 전부 기하에서 나왔고, 전부 실측으로 잡았다.
2-1. v3 맞물림(interleave)은 원리적으로 불가능 (컨트롤러 무관)
v3는 두 손의 손가락을 x축에서 엇갈려 끼우는 설계였다. 실측 결과: A 손가락 간격 13mm − 캡슐 지름 12mm = 빈틈 1mm에 지름 12mm짜리 B 손가락이 들어가야 하는 구조로, 손바닥 접촉 자세에서 반대손 손가락끼리 -5~-6mm(반경의 83~100%) 상시 침투 9쌍이 확인됐다. 8월 20일 90개 스윕 중 85개가 게이트에서 떨어진 이유도 이것이다.
2-2. v4: 손바닥을 z로 포개고 상대 손바닥 모서리를 감싼다
- B손을 x축 기준 180° 반전(euler z→x), 손바닥을 z로 적층해 면 대 면 접촉(z=0.058 평면).
- 손바닥 x-y 완전 정렬 — 맞물림 오프셋 제거로 손가락끼리 아예 만나지 않음(실측 최소거리 +25.6mm).
- A 손가락은 공통 +y 모서리에서 위로, B 손가락은 공통 -y 모서리에서 아래로 — 상호 감싸쥐기. 실제 악수의 맞잡기와 같은 위상.
- 손바닥 x 반폭 24→32mm(실제 손처럼 손가락 전체가 손바닥 폭 안에 들어오도록), 관절 범위 1.4/1.5→1.7 rad.
- 사전 실측: 접근 무충돌(여유 +2mm), curl≈0.8rad에서 10지 전부 상대 손바닥 도달.
2-3. 중력 처짐과 하강 도킹(DESCEND)
B손은 height 슬라이드에 매달려 중력으로 1.8mm 처진다(실측). 같은 높이로 진입시키면 손바닥 면이 겹쳐 모서리 충돌로 접근이 막혔다(두 손 모두 목표 17mm 앞 정지). 해법: B를 4mm 위에서 진입시키고, y 정렬 후 10mm/s로 하강해 손바닥 접촉 시 착지 래치 + 0.3mm 프리로드 — 실제 도킹 기동과 같다.
3. 시행착오 기록 (재발 방지용)
| # | 증상 | 실측 원인 | 해법 |
|---|---|---|---|
| 1 | 래치각 ≈0, 침투 47% | v3 맞물림 상시 침투 | v4 적층 맞잡기 재설계 |
| 2 | 손 정지·손바닥 미접촉 | B손 중력 처짐 1.8mm→모서리 충돌 | DESCEND 하강 도킹 |
| 3 | 에피소드 조기 종료 | SUBSTEPS 10 × 0.002s ≠ 1/FPS(구버전 유래) | SUBSTEPS 25로 정합 |
| 4 | 긴 손가락 3쌍 접촉 상실 | 근위 첫 접촉에서 MCP 조기 동결 → 갈고리가 허공에 | 동결 제거, 순응 파지 |
| 5 | 유지-침투 트레이드오프 | 고정 스퀴즈각으론 손가락별 접촉 기하 차이를 못 흡수 | settle→anchor 2단 유지 |
| 6 | 엄지·소지 표면 0.2~0.8mm 앞 정지 | 유지 토크 0.015가 관절 마찰 0.01에 상쇄 | 토크 3배 + 짧은 손가락 차등 상향 |
| 7 | 전 손가락 붕괴, 손바닥 과압착 | 20관절 무앵커 정토크 합력 | 앵커 스프링이 과압착 방지 |
| 8 | 게이트 5.4~9% 잔류 | solimp d0=0.9가 유효 강성 바닥 | solref 0.005 + solimp 0.98/0.995 |
4. 한계 (정직하게)
- 단일 조건 1건 성공이다. Stage 4에서 단일 시드 46%가 3시드 평균 32%로 뒤집힌 전례대로, 접근 거리·속도·오프셋을 흔든 다중 조건 스윕 전까지 "성공 시연 1건 확보"가 정확한 표현이다.
- 유지 토크 차등값(엄지 0.04/소지 0.038 N·m)은 이 기하에 맞춘 튜닝값 — 조건 변화에 대한 민감도 미측정.
- 손목 자유도가 슬라이드 3축뿐(회전 없음). 실제 악수의 손목 회전(수직 손바닥)은 미포함 — 현 단계는 "맞잡기 위상"의 성립 증명.
5. 향후 계획 및 선택지
로드맵 (8600 실악수까지)
- ✅ 1단계 — 접촉 주도형 파지 컨트롤러 (본 보고)
- 2단계 — MuJoCo→fingershake 재생 브릿지: 성공 궤적은 이미 관절별 JSON(
trajectory.json, 20fps, 148프레임)으로 내보내져 있다. fingershake 웹앱(hb5u:8600, Three.js)에 궤적 재생 모드를 추가해 사령관이 브라우저에서 실악수를 본다. 1차는 정적 궤적 파일 재생, 2차는 WebSocket 라이브 스트리밍. - 3단계 — 강건성 스윕: Stage 1 방식으로 접근 거리·속도·좌우/상하 오프셋 스윕. 이번에는 성공 사례가 존재하는 상태의 스윕이므로, 성공 조건 영역(basin)을 지도화할 수 있다.
- 4단계 — 성공 데이터셋 → 모방학습 재개: 성공 에피소드가 축적되면 Stage 2(ACT) 트랙을 재개할 기반이 생긴다. 다중 시드 학습·검증의 연산 수요가 커지는 이 시점이 Gravity 제안의 듀얼 GPU(ari)가 실질 가치를 갖는 지점이다.
- 장기 — 손목 회전 자유도 추가: 수직 손바닥 실제 악수 자세로 확장. fingershake 휴머노이드 모델(팔+손)과의 기구학 통합.
사령관 선택지
- 2단계 직행 (추천): 8600에서 눈으로 보는 것이 원래 목표. 브릿지는 궤적 JSON이 이미 있어 착수 비용이 낮다.
- 3단계 먼저: 강건성을 먼저 확보한 뒤 시연. 보수적 경로.
- 1+2 병행 후 Aegis 독립 재현 요청: Stage 4 전례대로 독립 검증을 조기에 받는 경로.
6. 산출물
- 컨트롤러:
scripts/contact_driven_grasp_controller_v1.py - 기하:
urdf/amazinghand_5finger_docking_v4.xml - 렌더:
scripts/render_contact_driven_grasp_gif.py - 결과:
data/contact_driven_grasp_v1/result.json,trajectory.json(2단계 브릿지 입력) - v3 실패 기록 보존:
data/contact_driven_grasp_v1/result_v3_interleave_failure.json
