TT Lab
요금제

한국어

시작하기
블로그

블로그

야코비안과 속도: 관절 속도 한계로 낼 수 있는 라켓 속력

상태: 초안 (2026-10-18), 실측. 숫자는 노트북(Apple M1 Max, macOS 26.5)의 Python 3.9.6·numpy 2.0.2 로 직접 계산했습니다. 원자료와 코드: 작업 디렉터리 measure/robot-arm-basics/의 arm.py, m05_speed.py, out/m05_speed.json(필요 속도는 7편의 out/m07_hit.json). 관절 속도 한계는 가정값이며 실제 모터로 잰 값이 아닙니다(하드웨어 미실측). 참고 자료는 2026-10-18 에 열람했습니다. 작성 규칙: 실측 데이터가 기본이고, 못 잰 것은 「미실측」, 확인하지 못한 것은 「미확인」으로 표시합니다.

목차

1. 직관: 지렛대의 길이

같은 각속도로 휘둘러도 긴 막대의 끝이 짧은 막대의 끝보다 빠릅니다. 어깨를 1 rad/s 로 돌리면 0.75 m 떨어진 손목은 0.75 m/s 로, 0.4 m 떨어진 팔꿈치는 0.4 m/s 로 움직입니다. 관절이 여럿이면 각 관절이 만드는 속도를 벡터로 더합니다. 이 「관절 속도 → 라켓 속도」 변환표가 야코비안(Jacobian) 입니다. 관절 각에 따라 지렛대의 길이와 방향이 바뀌므로 야코비안도 자세마다 다릅니다.

모터를 고를 때 가장 먼저 묻는 질문이 여기서 나옵니다. 관절이 몇 rad/s 를 내야 라켓이 공을 돌려보낼 만큼 빠른가?

2. 계산

2.1 기하 야코비안

회전 관절 i 의 축이 단위 벡터 z_i 이고 축 위의 한 점이 o_i 일 때, 그 관절만 1 rad/s 로 돌면 라켓 중심 p 는 z_i × (p − o_i) 의 속도로 움직이고 라켓은 z_i 를 중심으로 1 rad/s 로 돕니다. 이것을 열로 쌓은 6×6 행렬이 기하 야코비안입니다.

def jacobian(q):
    Ts = frames_dh(q)                    # 바닥, 관절 1..6 의 좌표계(3편)
    pe = Ts[6][:3, 3]                    # 라켓 중심
    J = np.zeros((6, 6))
    for i in range(6):
        z, o = Ts[i][:3, 2], Ts[i][:3, 3]
        J[:3, i] = np.cross(z, pe - o)   # 선속도 부분 J_v
        J[3:, i] = z                     # 각속도 부분 J_w
    return J

라켓 중심 속도는 v = J_v q̇, 라켓 각속도는 ω = J_w q̇ 입니다. 라켓 면의 다른 점(중심에서 r 떨어진 점)은 v + ω × r 로 움직이므로, 공이 면의 가장자리에 맞으면 중심 속도와 다른 속도를 받습니다.

2.2 속도 한계 안에서의 최대 속력

관절마다 |q̇_i| ≤ q̇max_i 라는 한계가 있습니다. 라켓을 단위 방향 d 로 가장 빠르게 움직이려면 dᵀ J_v q̇ 를 최대로 하는 q̇ 를 고르면 됩니다. 목적 함수가 선형이고 허용 범위가 상자(box)이므로 최댓값은 상자의 꼭짓점에서 나오고, 관절마다 부호만 맞추면 됩니다.

v_max(d) = Σ_i |dᵀ J_v,i| · q̇max_i        (J_v,i 는 J_v 의 i 번째 열)

이 식은 선형 계획법을 풀 필요가 없는 닫힌 식입니다. 코드에서는 6축의 꼭짓점 2⁶ = 64개를 모두 대입해 같은 값이 나오는지 검산했습니다(4절).

주의할 점이 하나 있습니다. 이 최댓값은 라켓 각속도를 자유롭게 둘 때의 값입니다. 위 식의 q̇ 는 손목까지 모두 최대 속도로 돌리므로 라켓 면도 빠르게 돕니다. 타격 순간 라켓 면의 방향이 정해져 있어야 한다면(7편) 그만큼 손해를 봅니다. 아래에서 두 경우를 함께 잽니다.

2.3 조작성과 특이점

조작성(manipulability) w = √det(J Jᵀ) 는 라켓을 모든 방향으로 고르게 움직일 수 있는 정도입니다. 2링크 평면 팔에서는 w = L1·L2·|sin q2| 이므로 팔꿈치를 직각으로 굽혔을 때 가장 크고, 팔을 쭉 펴거나 완전히 접으면 0 이 됩니다. 4편의 특이점이 바로 이 0 입니다. 쭉 편 팔은 팔 길이 방향으로 라켓을 더 밀 수 없습니다.

팔꿈치 각 q2 0° 30° 60° 90° 120° 150°
w = L1·L2·|sin q2| 0 0.070 0.121 0.140 0.121 0.070
어깨~끝 거리(m) 0.75 0.72 0.65 0.53 0.38 0.20

공을 세게 치려면 팔을 펴서 지렛대를 길게 해야 하는데, 다 펴면 특이점입니다. 사람이 팔을 「거의」 펴서 치는 이유와 같은 긴장 관계입니다.

3. 그림: 관절 속도 한계와 라켓 속력

관절 속도 한계와 낼 수 있는 라켓 속력 2.8 5 5.7 10 11.3 20 17.0 30 5.1 8·20 0 5 10 15 20 25 라켓 중심 최대 속력(m/s, +x) 관절 최대 속도(rad/s, 모든 축 같음; 8·20 은 어깨·팔꿈치 8, 손목 20) 사람(엘리트 주니어 여자) 포핸드 탑스핀 라켓 속도 13.0–14.7 m/s 빠른 반환(비행 0.35 s)에 필요한 라켓 법선 속도 중앙값 3.6 m/s 막대: 타격 자세 2,134개의 중앙값, 선: 5–95백분위.
그림: 관절 속도 한계별로 라켓이 낼 수 있는 최대 속력과 필요 속도, 사람의 라켓 속도

4. 실측

4.1 타격 자세와 측정 방법

팔 바닥 기준으로 +x 를 상대 쪽(탁구대 방향)으로 둡니다. 라켓 중심을 x 0.40~0.65 m, y −0.35~0.35 m, z 0.0~0.35 m 상자에서 무작위로 뽑고, 라켓 법선을 +x 에서 위로 0~20°, 옆으로 ±20° 기울였습니다. 자세 400개를 4편의 해석해로 풀고, 8개 해 가운데 모든 관절이 ±170° 안에 드는 해를 모두 썼습니다. 그렇게 얻은 관절 자세가 2,134개입니다. 64개 꼭짓점 전수 검산과 닫힌 식의 차이는 최대 3.6×10⁻¹⁵ m/s 였습니다.

4.2 관절 속도 한계별 최대 라켓 속력

관절 속도 한계(rad/s) +x 방향 5% / 중앙 / 95% (m/s) 라켓 법선 방향 중앙(m/s)
모두 5 2.1 / 2.8 / 3.7 2.8
모두 10 4.3 / 5.7 / 7.5 5.7
모두 20 8.5 / 11.3 / 15.0 11.4
모두 30 12.8 / 17.0 / 22.5 17.1
어깨·팔꿈치 8, 손목 20 3.8 / 5.1 / 6.7 4.6

같은 한계에서도 자세에 따라 5백분위와 95백분위가 1.7배 차이 납니다. 팔을 거의 펴고 친 자세가 빠르고, 팔을 접은 자세가 느립니다. 그러니 「어디서 칠지」를 정할 때 그 자세에서 낼 수 있는 속력도 함께 따져야 합니다. 7편의 타격 결정이 이 표를 제약 조건으로 씁니다.

마지막 줄은 감속비가 큰 어깨·팔꿈치와 가벼운 손목을 섞은 구성입니다. 손목을 아무리 빠르게 해도 지렛대(d6 = 0.15 m)가 짧아 이득이 적고, 결국 어깨·팔꿈치의 속도가 라켓 속력을 정합니다.

4.3 반대로: 5 m/s 를 내려면 관절이 몇 rad/s 여야 하나

라켓 중심을 +x 로 5 m/s 로 움직이는 데 필요한 관절 속도를 유사역행렬로 구하고, 여섯 관절 가운데 가장 빠른 관절의 속도를 기록했습니다.

조건 5% 중앙 95%
라켓 면이 돌지 않게(각속도 0) 10.7 14.1 18.0 rad/s
라켓 면 회전 자유(위치 속도만 맞춤) 11.9 14.7 17.8 rad/s

회전을 풀어 주면 필요 속도가 줄 것 같았는데 오히려 중앙값이 조금 늘었습니다. 유사역행렬은 관절 속도의 제곱합을 최소로 하는 해를 주지, 가장 빠른 관절을 최소로 하는 해를 주지 않기 때문입니다. 관절 한계가 문제라면 최대값 노름을 최소화하는 선형 계획 문제로 풀어야 합니다 (미실측). 위치 부분 야코비안 J_v 의 최소 특이값은 자세 중앙값 0.26 m/rad 이었습니다. 「가장 굼뜬 방향으로는 관절 1 rad/s 가 라켓 0.26 m/s」라는 뜻입니다.

4.4 필요한 속도와 비교

7편에서 실제 타구 200개를 받아 목표점(상대 쪽 x = 0.3, y = 0.9 m)에 정해진 비행 시간으로 돌려보내는 라켓 속도를 풀었습니다. 그 결과를 미리 가져옵니다.

돌려보낼 때 비행 시간 나가는 공 속력 중앙 필요한 라켓 법선 속도 5% / 중앙 / 95%
0.80 s(느린 반환) 5.5 m/s 1.4 / 1.9 / 2.1 m/s
0.60 s 5.7 m/s 1.5 / 2.0 / 2.2 m/s
0.45 s 6.9 m/s 2.1 / 2.6 / 2.9 m/s
0.35 s(빠른 반환) 8.7 m/s 3.1 / 3.6 / 4.0 m/s

공이 라켓에서 튕겨 나가므로 라켓은 공보다 훨씬 느려도 됩니다(반발 계수 0.8 가정). 모든 관절 10 rad/s 면 빠른 반환까지 대부분의 자세에서 가능하고, 5 rad/s 면 느린 반환만 가능합니다.

사람과 비교하면 차이가 큽니다. Bańkosz·Winiarski(2018)는 폴란드 엘리트 여자 주니어 선수 10명을 120 Hz 모션 캡처로 재어, 포핸드 탑스핀의 공 접촉 순간 라켓 속도가 평균 13.0~14.6 m/s 라고 보고했습니다. 사람은 공을 「돌려보내는」 것이 아니라 회전을 걸어 세게 치는 데 그 속도를 씁니다. 이 예제 팔로 그 수준을 내려면 중앙값 기준 모든 관절이 25 rad/s 안팎이어야 합니다(20 rad/s 에서 11.3, 30 rad/s 에서 17.0 m/s 사이).

4.5 갠트리 + 손목

2축 갠트리 위 손목은 계산이 더 단순합니다. 라켓 속력은 벨트 축의 선속도에 손목 각속도 × 손목에서 라켓까지 거리를 더한 값이 최대입니다.

벨트 축(m/s) 손목(rad/s) 손목~라켓 0.15 m 0.25 m
1 20 4.0 6.0
2 20 5.0 7.0
3 20 6.0 8.0
5 20 8.0 10.0

이 표는 덧셈이라 실측이라기보다 계산입니다. 참고로 Google 의 2023 시스템은 갠트리 최대 속도를 2 m/s 로 적었습니다(arXiv:2309.03315 II-A 절). 갠트리는 자세와 상관없이 같은 속도를 내지만, 벨트 축은 큰 질량을 움직이므로 가속도 한계가 따로 걸립니다(8편).

5. 한계

6. 정리

티티 한마디. 관절이 10 rad/s 만 돌아도 공은 돌려보낼 수 있어요. 그런데 선수처럼 14 m/s 로 휘두르려면 두세 배는 빨라야 하니까, 처음 만드는 로봇은 「돌려보내기」부터 목표로 잡아요!

참고

모든 자료는 2026-10-18 에 열람했습니다.

로그인하면 좋아요를 누를 수 있습니다

댓글

아직 댓글이 없습니다.

로그인하면 댓글을 쓸 수 있습니다