TT Lab
Blog

한국어 English 日本語 中文

Get started
Blog

Blog

Turning Shots into Equations: Working Backwards from Desired Landing Point to Racket Speed and Normal

Status: Draft (2026-10-18), Measured. Numbers are simulation values calculated directly in Python 3.9.6 with numpy 2.0.2 on a laptop (Apple M1 Max, macOS 26.5). Raw data and code: Working directory measure/robot-arm-basics/in m07_hit.py, out/m07_hit.json. Racket rebound is a simple model and has not been measured with actual rackets and rubbers (hardware unmeasured). The initial ball state is from the DeepMind dataset (CC-BY 4.0). References were accessed on 2026-10-18. Writing rules: Measured data is the default; unmeasured items are marked as "Unmeasured", and unverified items are marked as "Unverified".

Table of Contents

1. Intuition: Thinking Backwards

Consider a basketball shot. For the ball to go through the hoop, the velocity it needs when leaving the hand is determined first, and the wrist and arm move to produce that velocity. Table tennis is the same. However, because the ball is already flying toward you, the racket does not "throw" the ball but rather "bounces" it away.

Therefore, shot determination is a two-step inverse problem.

  1. Landing point → Outgoing ball velocity v_out. What must the velocity of the ball be when leaving the racket so that it lands at the target point on the opponent's table within a specified time? This is the problem of inverting the flight model (Part 6).
  2. Outgoing velocity → Racket. To convert incoming ball velocity v_in to v_out, what should the racket face normal n and racket velocity v_r be? This is the problem of inverting the collision model.

Out of the time budget in Part 1, these two steps receive a share of several tens of milliseconds. The outputs of this stage (racket position, orientation, velocity, and time) are then passed to the inverse kinematics in Part 4 and trajectory generation in Part 8.

2. Figure: Geometry of Racket Rebound

라켓 법선은 나갈 속도와 들어온 속도의 차이 방향 들어온 공 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 방향으로만 움직인다고 둔다.
Figure: Incoming ball velocity, outgoing ball velocity, and the racket normal in the direction of their difference

3. Calculations

3.1 Outgoing Velocity: Shooting Method and Newton's Method

The unknowns are the three components of v_out. Since it must arrive at the target point (x_t, y_t) at the table height (z = ball radius), we need to fix one more variable to have three equations. This article fixes the flight time T . This gives three equations: "position after T seconds = target".

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

Because F is a function computed by integrating the flight model from Part 6, it cannot be solved analytically. Therefore, we use a shooting method of "firing and correcting". The Jacobian is obtained via finite differences by slightly perturbing each component of v_out, and corrections are made using Newton's method. The starting value is the solution for a vacuum parabola.

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)

Outgoing spin of the ball is set to zero (limitations in Section 3.3).

3.2 Racket: Closed-Form Solution of the Rebound Model

The moment of collision between the ball and the racket is decomposed into two directions relative to the racket face.

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

If the tangential component is conserved, only the normal component remains in v_out − v_in. Therefore, the racket normal is in the direction of v_out − v_in, and solving the normal direction equation for v_r·n yields the racket velocity.

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 으로 둠)

The tangential component of the racket velocity does not affect the ball in this model, so it can be any value. In practice, this freedom can be used to choose a direction that is easy for the arm to produce, or to impart spin in a friction-inclusive model. The calculation time was 4.3 µs.

The racket coefficient of restitution e_r was verified from literature to be in the range of 0.78 to 0.88. Koç et al. (2018) estimated 0.788 from human demonstration data, Nakashima et al. (2010) measured rubber restitution as 0.81, and Google (2023) recorded an empirical 0.78. Sony AI (2026) uses a model adding velocity-dependent terms and neural network residuals to a constant 0.878. This article uses 0.8.

3.3 Why Friction Can Be Ignored, and When It Cannot

Real rubber is tacky and elastic, altering the ball's tangential velocity and imparting spin. Nakashima et al. (2010) modeled the rubber storing tangential kinetic energy as elastic energy and reversing the tangential velocity at the contact point. The model in this article discards that effect and deals only with returns. Aggressive shots played with topspin cannot be planned using this model. Part 10 measures how quickly data can correct the flawed parts of this model.

4. Measurements

4.1 Returning 200 Actual Shots

From the dataset in Part 1, balls coming toward the robot were flown using the Part 6 model up to the striking plane behind the end line (y = −1.6 m), selecting 200 balls passing through that plane at a height of 5 cm or more above the table. The ball speed at the striking plane had a median of 2.8 m/s (5th percentile 2.2, 95th percentile 3.9). The target point was (0.3, 0.9) m on the opponent's side.

Flight Time T Newton Iterations Solve Time Outgoing Speed Racket Normal Speed 5% / Median / 95% Angle Between Racket Normal and +y Net Clearance 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 When the Racket Is Slightly Misaligned

Across 100 returns at T = 0.6 s, errors were individually introduced to the calculated racket parameters, and actual landing points were recalculated using the Part 6 model.

라켓이 조금 틀리면 공은 얼마나 빗나가나 법선 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 반환.
Figure: Magnitude of landing point errors caused by errors in racket normal angle, velocity, restitution coefficient, and timing
Error Landing Point Error Median / 90%
Racket normal tilted by 0.5° (random direction) 3.0 / 3.8 cm
Racket normal 1° 6.1 / 7.5 cm
Racket normal 2° 11.4 / 15.1 cm
Racket normal 5° 30.7 / 37.2 cm
Racket speed +0.05 m/s 5.4 / 6.1 cm
Racket speed +0.1 m/s 10.6 / 11.8 cm
Racket speed +0.3 m/s 31.6 / 35.1 cm
Actual e_r 0.75 (model is 0.8) 13.4 / 15.5 cm
Actual e_r 0.85 13.9 / 16.1 cm
Actual e_r 0.70 26.9 / 31.0 cm
Racket delayed by 10 ms (ball velocity changes only) 2.3 / 4.0 cm

5. Limitations

6. Conclusion

TT Tip. To return the ball, the racket can move much slower than you might think. However, even a 1° misalignment of the racket face causes the ball to miss by nearly a handspan, so accuracy comes before speed!

References

All materials were accessed on 2026-10-18.

Sign in to like

Comments

No comments yet.

Sign in to leave a comment