TT Lab
요금제

한국어

시작하기
블로그

블로그

타격을 방정식으로: 원하는 착지점에서 거꾸로 라켓 속도와 법선을 구하기

상태: 초안 (2026-10-18), 실측. 숫자는 노트북(Apple M1 Max, macOS 26.5)의 Python 3.9.6·numpy 2.0.2 로 직접 계산한 시뮬레이션 값입니다. 원자료와 코드: 작업 디렉터리 measure/robot-arm-basics/의 m07_hit.py, out/m07_hit.json. 라켓 반발은 단순 모델이며 실제 라켓·러버로 잰 값이 아닙니다(하드웨어 미실측). 공 초기 상태는 DeepMind 데이터셋(CC-BY 4.0)입니다. 참고 자료는 2026-10-18 에 열람했습니다. 작성 규칙: 실측 데이터가 기본이고, 못 잰 것은 「미실측」, 확인하지 못한 것은 「미확인」으로 표시합니다.

목차

1. 직관: 거꾸로 생각하기

농구 슛을 생각해 봅니다. 공이 골대에 들어가려면 손을 떠날 때 어떤 속도여야 하는지가 먼저 정해지고, 손목과 팔은 그 속도를 만들도록 움직입니다. 탁구도 같습니다. 다만 공이 이미 날아오고 있어서, 라켓은 공을 「던지는」 것이 아니라 「튕겨 내는」 것입니다.

그래서 타격 결정은 두 단계의 거꾸로 문제입니다.

  1. 착지점 → 나갈 공 속도 v_out. 상대 탁구대의 목표점에 정해진 시간 안에 떨어지려면 공이 라켓을 떠날 때 속도가 얼마여야 하나. 비행 모델(6편)을 거꾸로 푸는 문제입니다.
  2. 나갈 속도 → 라켓. 들어오는 공 속도 v_in 을 v_out 으로 바꾸려면 라켓 면의 법선 n 과 라켓 속도 v_r 은 얼마여야 하나. 충돌 모델을 거꾸로 푸는 문제입니다.

1편의 시간 예산에서 이 두 단계가 받는 몫은 수십 ms 입니다. 그리고 이 단계의 출력(라켓 위치·방향·속도·시각)이 4편의 역기구학과 8편의 궤적 생성으로 넘어갑니다.

2. 그림: 라켓 반발의 기하

라켓 법선은 나갈 속도와 들어온 속도의 차이 방향 들어온 공 v_in 나갈 공 v_out 법선 n 라켓 면 n = (v_out − v_in) / |v_out − v_in| (마찰 무시: 접선 성분 보존) v_r·n = (v_out·n + e_r · v_in·n) / (1 + e_r) e_r: 라켓 반발 계수(문헌 0.79–0.88). 라켓은 n 방향으로만 움직인다고 둔다.
그림: 들어온 공 속도와 나갈 공 속도, 그리고 그 차이 방향의 라켓 법선

3. 계산

3.1 나갈 속도: 사격법과 뉴턴법

미지수는 v_out 의 세 성분입니다. 목표점 (x_t, y_t) 에 탁구대 높이(z = 공 반지름)로 도착해야 하므로 식이 셋이 되려면 하나를 더 정해야 합니다. 이 글은 비행 시간 T 를 정합니다. 그러면 「T 초 뒤 위치 = 목표」라는 식 세 개가 됩니다.

F(v_out) = 공을 v_out 으로 T 초 날린 위치 − (x_t, y_t, r) = 0

F 는 6편의 비행 모델을 적분해야 계산되는 함수라 식으로 풀 수 없습니다. 그래서 「쏴 보고 고치는」 사격법(shooting method)을 씁니다. 야코비안은 v_out 의 각 성분을 조금씩 바꿔 쏴 보는 유한 차분으로 구하고, 뉴턴법으로 고칩니다. 시작값은 공기 없는 포물선의 답입니다.

def solve_vout(p, T, goal):
    v = (goal - p) / T
    v[2] += 0.5 * 9.81 * T                   # 진공 포물선에서 출발
    for it in range(20):
        r = flight_to(p, v, T) - goal        # 6편의 RK4 적분
        if norm(r) < 1e-4:                   # 0.1 mm
            return v
        J = np.column_stack([(flight_to(p, v + h*e_i, T) - flight_to(p, v, T)) / h for e_i in I3])
        v = v - np.linalg.solve(J, r)

나가는 공의 회전은 0 으로 두었습니다(3.3 절의 한계).

3.2 라켓: 반발 모델의 닫힌 해

공과 라켓이 부딪히는 순간을 라켓 면 기준으로 두 방향으로 나눕니다.

법선 방향:   (v_out − v_r)·n = −e_r · (v_in − v_r)·n          반발 계수 e_r
접선 방향:   v_out,t = v_in,t                                   마찰 무시(접선 성분 보존)

접선 성분이 보존되면 v_out − v_in 에는 법선 성분만 남습니다. 그러니 라켓 법선은 v_out − v_in 방향이고, 법선 방향 식을 v_r·n 에 대해 풀면 라켓 속도가 나옵니다.

def racket_for(v_in, v_out, e_r=0.8):
    n = (v_out - v_in) / norm(v_out - v_in)
    vrn = (v_out @ n + e_r * (v_in @ n)) / (1 + e_r)     # 라켓 속도의 법선 성분
    return n, vrn                                         # 접선 성분은 자유(0 으로 둠)

라켓 속도의 접선 성분은 이 모델에서 공에 영향을 주지 않으므로 아무 값이나 됩니다. 실제로는 이 자유를 팔이 내기 쉬운 방향을 고르는 데 쓰거나, 마찰이 있는 모델에서 회전을 거는 데 씁니다. 계산 시간은 4.3 µs 였습니다.

라켓 반발 계수 e_r 은 문헌에서 0.78~0.88 범위로 확인했습니다. Koç 외 2018 은 사람 시연 데이터로 0.788 을 추정했고, Nakashima 외 2010 은 러버 반발을 0.81 로 쟀으며, Google 2023 은 실측 0.78 을 적었습니다. Sony AI 2026 은 상수 0.878 에 속도 의존 항과 신경망 잔차를 더한 모델을 씁니다. 이 글은 0.8 을 씁니다.

3.3 왜 마찰을 무시해도 되나, 그리고 언제 안 되나

실제 러버는 끈적이고 탄성이 있어 공의 접선 속도를 바꾸고 회전을 겁니다. Nakashima 외 2010 은 러버가 접선 방향 운동 에너지를 탄성 에너지로 저장해 접점의 접선 속도가 반대로 뒤집힌다고 모델링했습니다. 이 글의 모델은 그 효과를 버리고 돌려보내기만 다룹니다. 탑스핀을 걸어 세게 치는 공격은 이 모델로는 계획할 수 없습니다. 10편에서는 이 모델의 틀린 부분을 데이터로 얼마나 빨리 고칠 수 있는지 잽니다.

4. 실측

4.1 실제 타구 200개를 돌려보내기

1편의 데이터셋에서 로봇 쪽으로 오는 공을 6편 모델로 끝줄 뒤 23 cm 타격면(y = −1.6 m)까지 날리고, 탁구대 위 5 cm 이상 높이로 그 면을 지나는 공 200개를 골랐습니다. 타격면에서 공 속력은 중앙값 2.8 m/s(5% 2.2, 95% 3.9) 였습니다. 목표점은 상대 쪽 (0.3, 0.9) m 입니다.

비행 시간 T 뉴턴 반복 풀이 시간 나갈 속력 라켓 법선 속도 5% / 중앙 / 95% 라켓 법선과 +y 사이 각 네트 위 여유 5%
0.35 s 2 39 ms 8.7 m/s 3.1 / 3.6 / 4.0 m/s 12° 3.2 cm
0.45 s 2 50 ms 6.9 m/s 2.1 / 2.6 / 2.9 m/s 17° 12.6 cm
0.60 s 2 67 ms 5.7 m/s 1.5 / 2.0 / 2.2 m/s 24° 31 cm
0.80 s 2 90 ms 5.5 m/s 1.4 / 1.9 / 2.1 m/s 35° 64 cm

4.2 라켓이 조금 틀리면

T = 0.6 s 반환 100개에서, 계산한 라켓에 오차를 하나씩 넣고 6편 모델로 실제 착지점을 다시 계산했습니다.

라켓이 조금 틀리면 공은 얼마나 빗나가나 법선 0.5° 기울어짐 3.0 법선 1° 6.1 법선 2° 11.4 법선 5° 30.7 속도 +0.05 m/s 5.4 속도 +0.1 m/s 10.6 속도 +0.3 m/s 31.6 실제 e_r 0.75(모델 0.8) 13.4 실제 e_r 0.7 26.9 5 ms 늦음(공 속도만) 1.0 10 ms 늦음(공 속도만) 2.3 0 10 20 30 착지점 오차 중앙값(cm). 공 100개, 비행 시간 0.6 s 반환.
그림: 라켓 법선 각, 속도, 반발 계수, 타이밍 오차가 착지점 오차로 번지는 크기
오차 착지점 오차 중앙 / 90%
라켓 법선 0.5° 기울어짐(무작위 방향) 3.0 / 3.8 cm
라켓 법선 1° 6.1 / 7.5 cm
라켓 법선 2° 11.4 / 15.1 cm
라켓 법선 5° 30.7 / 37.2 cm
라켓 속도 +0.05 m/s 5.4 / 6.1 cm
라켓 속도 +0.1 m/s 10.6 / 11.8 cm
라켓 속도 +0.3 m/s 31.6 / 35.1 cm
실제 e_r 0.75(모델은 0.8) 13.4 / 15.5 cm
실제 e_r 0.85 13.9 / 16.1 cm
실제 e_r 0.70 26.9 / 31.0 cm
라켓 10 ms 늦음(공 속도 변화만) 2.3 / 4.0 cm

5. 한계

6. 정리

티티 한마디. 공을 돌려보내는 데 라켓은 생각보다 천천히 움직여도 돼요. 대신 라켓 면이 1° 만 틀어져도 공은 한 뼘 가까이 빗나가니까, 빠르기보다 정확하기가 먼저예요!

참고

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

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

댓글

아직 댓글이 없습니다.

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