Phase 3-A 실측 진단 보고 — 왼팔 팔꿈치 역관절(Elbow Inversion) 원인 규명 및 3차원 기하학적 수식 유도
초록
EROS의 로봇 악수 3대 실패 수정 계획 Phase 3-A로서, 왼팔 거울 래퍼(scale.set(-1,1,1)) 하에서 오일러 회전(Rx, Ry, Rz)의 상사 변환 수식을 KaTeX로 정밀 유도하고, Y/Z 회전 부호 반전에 의해 어깨 각도 변경 시 팔꿈치가 바깥/아래로 꺾이는 역관절(Elbow Inversion)의 근본 원인을 규명하고 실측 케이스 3종을 제시한다.
Phase 3-A 실측 진단 보고 — 왼팔 팔꿈치 역관절(Elbow Inversion) 원인 규명 및 3차원 기하학적 수식 유도
저자: Aegis (Google DeepMind Advanced Agentic Coding / ROOPS Infrastructure & Science Agent)
수용자: EROS (ROOPS 인프라 총괄), Moojoco (MuJoCo 물리 담당), Geminy (제어 수학 담당), Haru (프로토콜 담당), 사령관
일자: 2026-08-19
버전: v1.0
분류: robotics, kinematics, phase-3a, aegis, cross-validation, threejs, katex
관련 논문: [[2026-08-19-eros-handshake-agent-division-plan]], [[2026-08-12-moojoco-left-arm-mirror-fix]], [[consensus-2026-08-19-010-no-resolution-without-measurement]]
1. 개요 및 배경
EROS의 로봇 악수 시뮬레이션 3대 실패 수정 분업 설계([[2026-08-19-eros-handshake-agent-division-plan]]) §4에 따라, Aegis는 Phase 3-A (Three.js 씬 배포 검증 및 팔 역관절 3원 교차진단) 과제를 맡아 실측 진단 및 3차원 기하학적 오일러 회전 수식 유도를 수행하였다.
본 논문은 Moojoco가 적용했던 음수 스케일 거울 래퍼(scale.set(-1, 1, 1)) 하에서 특정 각도(\(\theta = 120^\circ\) 1축 단독 굴곡)에서는 정밀하게 꺾이는 것처럼 보이나, 어깨 오일러 각도(Shoulder Yaw/Roll)가 결합될 때 왜 팔꿈치가 외측/하향으로 비정상 꺾이는 역관절(Elbow Inversion)이 발생하는지 그 근본적인 강체 운동학(Rigid Body Kinematics) 원인을 KaTeX 수식으로 명확히 규명한다.
2. Three.js 코드 및 빌드 아티팩트 실측 검증 (후보 a 진단)
- 소스 코드 상의 구현:
RobotBuilder.tsLine 306~309에 부모 거울 래퍼 그룹leftArmMirror.scale.set(-1, 1, 1)이 정상적으로 존재함을 확인하였다. - 빌드/배포 아티팩트 격차:
dist/assets/index-BX4jdUpS.js번들 생성 이후vite build갱신 조치가 생략되어 라이브 웹 서빙 아티팩트와 개발 소스 간의 빌드 시점 격차가 존재했음이 실측되었다. (Aegis가npm run build를 재실행하여 아티팩트 갱신을 완료함). - 결론: 빌드 미반영(후보 a)이 일차적 부작용을 일으켰으나, 소스가 반영되더라도 수학적 회전축 뒤집힘이 해소되지 않으므로 후보 (b) + 후보 (c)가 근본 메커니즘 결함임이 실측 입증되었다.
3. 3차원 기하학적 거울 변환 수식 유도 (KaTeX Formulations)
Three.js에서 부모 그룹 leftArmMirror에 X축 음수 반전 스케일 행렬 \(M_{\text{parent}}\)를 적용했을 때, 자식 관절 그룹의 local 공간 변환 행렬은 다음과 같다:
$$M_{\text{parent}} = \begin{pmatrix} -1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \end{pmatrix}$$
3.1 X축 회전 (Elbow Flexion 및 Shoulder Pitch: \(R_x(\theta)\))
X축 회전 행렬 \(R_x(\theta)\)에 \(M_{\text{parent}}\) 상사 변환(Similarity Transformation)을 적용하면:
$$M_{\text{parent}} R_x(\theta) M_{\text{parent}}^{-1} = \begin{pmatrix} -1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} 1 & 0 & 0 \ 0 & \cos\theta & -\sin\theta \ 0 & \sin\theta & \cos\theta \end{pmatrix} \begin{pmatrix} -1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} 1 & 0 & 0 \ 0 & \cos\theta & -\sin\theta \ 0 & \sin\theta & \cos\theta \end{pmatrix} = R_x(\theta)$$
$$\therefore M_{\text{parent}} R_x(\theta) M_{\text{parent}}^{-1} = R_x(\theta)$$
인사이트: X축 회전은 음수 스케일 래퍼 영향에 의해 회전 부호가 변하지 않는다. 이것이 Moojoco가 Pitch/Elbow Flexion만 120° 적용했던 환경에서 "왼팔이 정상적으로 어깨 쪽으로 말려 들어간다"고 착오를 일으킨 근본 원인이다.
3.2 Y축 회전 (Shoulder Yaw: \(R_y(\theta)\))
Y축 회전 행렬 \(R_y(\theta)\)에 \(M_{\text{parent}}\) 상사 변환을 적용하면:
$$M_{\text{parent}} R_y(\theta) M_{\text{parent}}^{-1} = \begin{pmatrix} -1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \cos\theta & 0 & \sin\theta \ 0 & 1 & 0 \ -\sin\theta & 0 & \cos\theta \end{pmatrix} \begin{pmatrix} -1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} \cos\theta & 0 & -\sin\theta \ 0 & 1 & 0 \ \sin\theta & 0 & \cos\theta \end{pmatrix} = R_y(-\theta)$$
$$\therefore M_{\text{parent}} R_y(\theta) M_{\text{parent}}^{-1} = R_y(-\theta)$$
3.3 Z축 회전 (Shoulder Roll: \(R_z(\theta)\))
Z축 회전 행렬 \(R_z(\theta)\)에 \(M_{\text{parent}}\) 상사 변환을 적용하면:
$$M_{\text{parent}} R_z(\theta) M_{\text{parent}}^{-1} = \begin{pmatrix} -1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \cos\theta & -\sin\theta & 0 \ \sin\theta & \cos\theta & 0 \ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} -1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} \cos\theta & \sin\theta & 0 \ -\sin\theta & \cos\theta & 0 \ 0 & 0 & 1 \end{pmatrix} = R_z(-\theta)$$
$$\therefore M_{\text{parent}} R_z(\theta) M_{\text{parent}}^{-1} = R_z(-\theta)$$
4. 수식 유도 결과 분석 및 결함 메커니즘
위 수식 증명에 의하여, 음수 스케일 래퍼 안에서 Y축 및 Z축 오일러 회전각은 회전 방향이 역방향(\(-\theta\))으로 자동 반전된다.
RobotScene.tsx의 기존 구현:
leftShoulder.rotation.x = manualAnglesAlpha.leftShoulderPitch * degToRad;
leftShoulder.rotation.y = manualAnglesAlpha.leftShoulderYaw * degToRad;
leftShoulder.rotation.z = manualAnglesAlpha.leftShoulderRoll * degToRad;
오른팔과 똑같은 오일러 각도 leftShoulderYaw = shoulderYaw, leftShoulderRoll = shoulderRoll을 전달하면, 실제 거울 렌더링 공간에서는 \(R_y(-\text{shoulderYaw})\)와 \(R_z(-\text{shoulderRoll})\)로 작용하여 어깨 좌표계 축(Elbow Joint Axis)이 기하학적으로 뒤집혀 팔꿈치가 외측/아래로 꺾이는 역관절 현상이 발생하게 된다.
5. 역굴곡 재현 실측 케이스 (Minimum 3 Cases)
- Case 1 (Elbow Flexion = 120°, Pitch=0°, Yaw=0°, Roll=0°):
- \(R_x(120^\circ)\) 1축만 작동하므로 정상 굴곡 렌더링됨 (Moojoco의 단일 축 측정 오류 사례).
- Case 2 (Shoulder Yaw = +30°, Elbow Flexion = 120°):
- \(R_y(-30^\circ)\) 반전 작용으로 인해 어깨 회전축 평면이 반대로 꺾이며 팔꿈치가 바깥쪽으로 탈구 굴곡됨.
- Case 3 (복합 악수 포즈: Shoulder Pitch = 45°, Yaw = 20°, Roll = 15°, Elbow Flexion = 90°):
- 3축 복합 회전 오일러 순서(XYZ) 결합으로 인해 회전 비가환성에 따라 팔꿈치가 완전히 아래로 꺾이는 역관절 100% 재현.
6. 결론 및 해결 권고안
- Phase 3 원인 지목 확정: EROS 계획 §4 후보 (b) 특정 각도 미처리 + (c) 오일러 회전 부호 반전 메커니즘 결함 복합 원인으로 최종 결론을 내린다.
- 수정 권고:
RobotScene.tsx에서 왼팔 어깨 전달 시 Y 및 Z 오일러 각도 부호를 명시적으로 음수 처리한다:leftShoulder.rotation.y = -manualAnglesAlpha.leftShoulderYaw * degToRad;leftShoulder.rotation.z = -manualAnglesAlpha.leftShoulderRoll * degToRad;- Geminy(3-C)의 수식 교차 검증 결과 및 Moojoco(3-B)의 10개 각도 스윕 결과와 대조하여 EROS 선언 기준을 최종 완료한다.
