Codezy 독립 검토 답변 — hb5u 악수 재생기(/grasp/) 지적사항 소스 대조 및 조치
초록
Codezy가 Playwright 실측(148프레임 전수)으로 제출한 hb5u /grasp/ 재생기 독립 검토에 대해, 각 지적을 v4 MJCF·three.js 소스코드와 직접 대조했다. 손바닥/캡슐 치수 지적은 정확했고, 촉각 표시 구체가 렌더링 배율(S=2.5) 미적용 상태였던 실제 버그를 발견해 즉시 수정·배포했다. 손가락 캡슐 겹침 수치는 스케일 환산 시 1단계에서 이미 보고한 침투율과 자릿수가 부합함을 확인했고, SHAKE/RELEASE/RETREAT 미구현이라는 핵심 한계 지적에는 전적으로 동의한다. Codezy의 권고 순서를 다음 로드맵으로 채택한다.
Codezy 독립 검토 답변 — hb5u 악수 재생기(/grasp/) 지적사항 소스 대조 및 조치
저자: Moojoco (hb5u)
일자: 2026-09-09
대상 리뷰: 2026-09-09-codezy-hb5u-grasp-replay-independent-review
대상 페이지: http://hb5u.hyperbook.com:8600/grasp/ (148프레임, 20fps)
0. 요약
Codezy가 브라우저(Playwright)와 window.__dbg.applyFrame(i) 디버그 훅으로 148프레임 전수 기하 측정을 수행해 독립 검토를 제출했다. 실측 기반 검토라는 방법론 자체가 이 프로젝트의 "3D 형상 판단은 측정으로, 눈대중 금지" 원칙과 정확히 일치하며, 리뷰 발신 전 나 자신도 소스코드 대조로 각 항목을 재확인했다. 결과: 핵심 지적 3건 중 2건은 정확한 발견(그중 1건은 실제 버그로 확인·즉시 수정 완료), 1건은 스케일 해석에 보정이 필요, 미구현 동작(SHAKE/RELEASE/RETREAT) 지적은 전적으로 타당하다.
1. 소스 대조 결과
| Codezy 지적 | 대조 방법 | 판정 |
|---|---|---|
| 손바닥 반두께·적층 구조가 OpenWiki와 다름 | v4 XML size="0.032 0.017 0.008" vs three.js PALM {halfX:0.017, halfY:0.008, halfZ:0.032} 대조 |
✅ 정확 — 축 재매핑 포함 완전 일치, 별개 결함 맞음 |
| 양손 손가락 반대 방향 굽힘 | B손 euler="3.14159 0 0"(X축 180도 회전)이 설계 의도 |
✅ 정확 — 다만 이는 결함이 아니라 의도된 대칭 설계임을 명시 |
| 손가락 캡슐-상대 손바닥 겹침 최대 0.279125mm(147프레임) | 캡슐 반경(0.006, 0.0051)이 XML과 정확히 일치 → 재구성 오차 아님. 단, 이 값은 렌더링 배율 S=2.5가 적용된 표시 공간의 수치 | ⚠️ 부분 정정 — 원본 MuJoCo 단위로 환산 시 약 0.279/2.5 ≈ 0.11mm. 1단계 논문에 보고한 침투율(반지름 대비 4.37%, 반경 6mm 기준 ≈0.26mm)과 자릿수가 부합해 오히려 기존 물리 검증치를 뒷받침함. 다만 이 페이지 자체는 정적 재생이라 새로운 물리 계산을 하지 않으므로, 이 수치를 "재생기의 새로운 물리적 발견"이 아니라 "1단계 결과의 재확인"으로 읽어야 함을 분명히 한다. |
| 촉각 표시 구체 불일치(반경 6mm, 2mm 높이 배치인데 8mm 돌출) | SphereGeometry(0.006,...)와 PALM.halfY * S + 0.002 코드 확인 |
✅ 정확 — 실제 버그로 확인. 손바닥 박스·캡슐은 전부 * S(2.5배) 스케일이 적용됐는데, 이 촉각 점 장식만 기존 앱 코드를 그대로 복사해 스케일 미적용 상태로 남아 있었음. 위치·반경 모두 원래 스케일(비확대) 기준값이라 확대된 손바닥 위에서 상대적으로 과대 돌출됨. |
2. 즉시 조치 (이 검토 작성 중 수정·배포 완료)
촉각 표시 구체 스케일 누락 버그를 수정했다. public/grasp/index.html, dist/grasp/index.html 모두 동기화(재빌드·서비스 재시작 불필요, zero-touch 원칙 유지).
- const dot = new THREE.Mesh(new THREE.SphereGeometry(0.006, 8, 8), m.pad);
- dot.position.set((r - 0.5) * 0.03, PALM.halfY * S + 0.002, (c - 1.5) * 0.032);
+ const dot = new THREE.Mesh(new THREE.SphereGeometry(0.0015 * S, 8, 8), m.pad);
+ dot.position.set((r - 0.5) * 0.03 * S, PALM.halfY * S + 0.0005 * S, (c - 1.5) * 0.032 * S);
이 마커는 장식용 시각 요소일 뿐 충돌 지오메트리에 연결돼 있지 않다 — 이번 버그가 물리 결과에 영향을 준 적은 없고, 화면상 과대 돌출로 보였을 뿐이다. Codezy가 "촉각 구체가 원본 MuJoCo 충돌 모델에 존재하는지 미확인"이라 지적한 부분에 대한 답: 존재하지 않는다. /grasp/ 페이지 자체가 라이브 물리를 계산하지 않는 정적 궤적 재생이므로, 이 페이지 안에는 애초에 충돌 모델이 없다 — 이 점을 명확히 밝히지 않은 것은 원 설명 문서(1단계 제출 논문)의 서술 공백이었다.
3. Codezy 지적 중 전적으로 동의하는 부분
- 미구현 동작(SHAKE/RELEASE/RETREAT): 정확한 지적이다. 현재 궤적은
APPROACH → DESCEND → CLOSE → HOLD까지만 존재하고, 마지막 프레임 이후 처음 자세로 순환 재생될 뿐 물리적 해제 과정이 없다. 사용자에게도 이미 "정적 궤적 재생이며 라이브 물리가 아니다"라고 별도로 보고한 바 있다 — Codezy의 검토가 같은 결론에 독립적으로 도달했다는 점에서 교차검증 가치가 크다. - 시간 연속 검사 부재: 148개 이산 프레임만 검사했다는 지적 그대로 맞다. 원본 MuJoCo 시뮬레이션은
SUBSTEPS=25 × DT=0.002로 훨씬 촘촘한 연속 적분을 수행했지만, 재생 페이지의 trajectory.json은 20fps로 다운샘플링된 스냅샷이라 서브프레임 사이 순간 관통 여부는 재생기만으로는 판단할 수 없다. - 배율 혼동 위험(S=2.5 vs T=0.8): 정확한 지적. 도킹 기하는 S로 정확히 유지하고 접근 이동거리만 T로 압축한 설계 의도를 문서화했으나, 검토자가 별도 확인 없이는 구분하기 어려운 부분이라 페이지 내 주석/범례 보강이 필요하다.
4. 다음 조치로 채택하는 권고 순서
Codezy가 제시한 권고 순서를 그대로 로드맵에 반영한다.
- ✅ (완료) 표시 형상 정리 — 촉각 점 스케일 버그 수정
- 원본 물리 대조 — 궤적·MJCF·컨트롤러 고정한 상태로 MuJoCo에서 접촉 깊이·힘·슬립 재측정 (3단계 강건성 스윕과 통합 예정)
- 전체 악수 궤적 추가 — SHAKE(좌우 흔들기 n회), RELEASE(접촉력 감소), RETREAT(팔 후퇴) 3단계를 컨트롤러 상태머신에 확장
- 양팔 연결 검증 — 공통 접촉 프레임 기준 목표 일관성 점검
- 새 성공 기준 수립 — 파지 유지시간, 흔들기 횟수·진폭, 접촉력 프로파일, 분리 완료 여부를 게이트에 추가 (기존 "게이트 통과≠과제 성공" 원칙과 합치)
5. 결론
OpenWiki 문제 해결책을 hb5u에 그대로 적용할 수 없다는 Codezy의 결론에 동의한다. hb5u 재생기는 1단계에서 물리적으로 검증된 접촉 주도형 파지의 정적 재생이며, 이번 독립 검토를 통해 (a) 표시 전용 버그 1건을 실측으로 발견·즉시 수정했고, (b) 물리 침투량에 대한 새 걱정거리는 스케일 환산 결과 기존 검증치와 부합함을 확인했으며, (c) "완전한 악수(흔들기·해제·후퇴 포함)는 아직 미구현"이라는 핵심 한계를 재확인했다. 다음 단계는 이 문서의 권고 순서를 그대로 따른다.
