Status: Draft (2026-10-18), Measured. Numbers were calculated directly using Python 3.9.6 and numpy 2.0.2 on a laptop (Apple M1 Max, macOS 26.5). Raw data and code: working directory
measure/robot-arm-basics/'sarm.py,m05_speed.py,out/m05_speed.json(required speed is from Part 7out/m07_hit.json). Joint velocity limits are assumed values and not measured with actual motors (hardware not measured). Reference materials were accessed on 2026-10-18. Writing conventions: Measured data is the baseline; unmeasured items are marked as 「Unmeasured」, and unverified items are marked as 「Unverified」.
Table of Contents
- 1. Intuition: Length of the Lever
- 2. Calculation
- 3. Figure: Joint Velocity Limits and Racket Speed
- 4. Measurements
- 5. Limitations
- 6. Conclusion
- References
1. Intuition: Length of the Lever
Even when swung at the same angular velocity, the tip of a long rod is faster than the tip of a short rod. If the shoulder is rotated at 1 rad/s, the wrist 0.75 m away moves at 0.75 m/s, and the elbow 0.4 m away moves at 0.4 m/s. When there are multiple joints, the velocities produced by each joint are added as vectors. This 「joint velocity → racket velocity」 conversion table is the Jacobian. Because the length and direction of the lever change depending on the joint angles, the Jacobian also varies with each posture.
This leads to the first question asked when choosing a motor: What joint rad/s are needed for the racket to be fast enough to return the ball?
2. Calculation
2.1 Geometric Jacobian
When the axis of rotational joint i is a unit vector z_i and a point on the axis is o_i, if only that joint rotates at 1 rad/s, the racket center p moves at a velocity of z_i × (p − o_i), and the racket rotates at 1 rad/s around z_i. A 6×6 matrix stacking these columns is the geometric Jacobian.
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
The racket center velocity is v = J_v q̇, and the racket angular velocity is ω = J_w q̇. Since other points on the racket face (points at a distance r from the center) move at v + ω × r, if the ball hits the edge of the face, it receives a different velocity than the center velocity.
2.2 Maximum Speed Within Velocity Limits
Each joint has a limit of |q̇_i| ≤ q̇max_i. To move the racket fastest in a unit direction d, we can choose q̇ that maximizes dᵀ J_v q̇. Since the objective function is linear and the feasible range is a box, the maximum value occurs at the vertices of the box, and we only need to match the sign for each joint.
v_max(d) = Σ_i |dᵀ J_v,i| · q̇max_i (J_v,i 는 J_v 의 i 번째 열)
This formula is a closed-form solution that does not require solving a linear programming problem. In the code, all 2⁶ = 64 vertices of the 6 axes were substituted to verify that the same values are produced (Section 4).
There is one thing to note. This maximum value is the value when the racket angular velocity is unconstrained. Since q̇ in the above formula rotates everything up to the wrist at maximum speed, the racket face also rotates rapidly. If the orientation of the racket face must be fixed at the moment of impact (Part 7), there is a corresponding penalty. Both cases are measured together below.
2.3 Manipulability and Singularities
Manipulability w = √det(J Jᵀ) is the degree to which the racket can be moved evenly in all directions. In a 2-link planar arm, w = L1·L2·|sin q2|, so it is greatest when the elbow is bent at a right angle, and becomes 0 when the arm is fully extended or completely folded. The singularity in Part 4 is precisely this 0. A fully extended arm cannot push the racket any further in the direction of the arm length.
| Elbow angle q2 | 0° | 30° | 60° | 90° | 120° | 150° |
|---|---|---|---|---|---|---|
| w = L1·L2·|sin q2| | 0 | 0.070 | 0.121 | 0.140 | 0.121 | 0.070 |
| Shoulder-to-tip distance (m) | 0.75 | 0.72 | 0.65 | 0.53 | 0.38 | 0.20 |
To hit the ball hard, you need to extend your arm to make the lever longer, but fully extending it creates a singularity. This is the same tension relationship as why humans hit with "almost" extended arms.
3. Figure: Joint Velocity Limits and Racket Speed
4. Measurements
4.1 Striking Postures and Measurement Method
Based on the arm base, +x is set toward the opponent (toward the table tennis table). The racket center was randomly sampled from a box of x 0.40–0.65 m, y −0.35–0.35 m, z 0.0–0.35 m, and the racket normal was tilted 0–20° upward and ±20° sideways from +x. 400 postures were solved using the analytical solutions from Part 4, and among the 8 solutions, all solutions where all joints fell within ±170° were used. The resulting joint postures numbered 2,134. The difference between the 64-vertex exhaustive verification and the closed-form solution was at most 3.6×10⁻¹⁵ m/s.
4.2 Maximum Racket Speed by Joint Velocity Limit
| Joint velocity limit (rad/s) | +x direction 5% / median / 95% (m/s) | Racket normal direction median (m/s) |
|---|---|---|
| All 5 | 2.1 / 2.8 / 3.7 | 2.8 |
| All 10 | 4.3 / 5.7 / 7.5 | 5.7 |
| All 20 | 8.5 / 11.3 / 15.0 | 11.4 |
| All 30 | 12.8 / 17.0 / 22.5 | 17.1 |
| Shoulder/elbow 8, wrist 20 | 3.8 / 5.1 / 6.7 | 4.6 |
Even with the same limits, the 5th and 95th percentiles differ by a factor of 1.7 depending on the posture. Postures hitting with the arm almost extended are fast, and postures with a folded arm are slow. Therefore, when deciding 「where to hit」, the speed achievable in that posture must be considered together . The striking decision in Part 7 uses this table as a constraint condition.
The last row is a configuration combining shoulder and elbow joints with large reduction ratios and a lightweight wrist. No matter how fast the wrist is made, the lever (d6 = 0.15 m) is short, yielding little benefit, and ultimately the speeds of the shoulder and elbow determine the racket speed.
4.3 Conversely: What joint speed in rad/s is needed to produce 5 m/s?
We used the pseudoinverse to calculate the joint velocities required to move the racket center at +x at 5 m/s, and recorded the speed of the fastest among the six joints.
| Condition | 5% | Median | 95% |
|---|---|---|---|
| Fixed racket face (angular velocity 0) | 10.7 | 14.1 | 18.0 rad/s |
| Free racket face rotation (position velocity only) | 11.9 | 14.7 | 17.8 rad/s |
We expected the required speed to decrease when freeing the rotation, but the median actually increased slightly. This is because the pseudoinverse provides a solution that minimizes the sum of squaresof the joint velocities, not the fastest joint. If joint limits are an issue, it must be solved as a linear programming problem minimizing the infinity norm (unmeasured). The minimum singular value of the positional Jacobian J_v was 0.26 m/rad at the median posture. This means 「1 rad/s of joint motion results in 0.26 m/s of racket motion in the most sluggish direction」.
4.4 Comparison with required speed
In Part 7, we solved for the racket speeds needed to receive 200 actual shots and return them to a target point (opponent side x = 0.3, y = 0.9 m) within a specified flight time. We bring those results forward.
| Flight time on return | Outgoing ball speed median | Required racket normal speed 5% / median / 95% |
|---|---|---|
| 0.80 s (slow return) | 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 (fast return) | 8.7 m/s | 3.1 / 3.6 / 4.0 m/s |
Since the ball bounces off the racket, the racket can be much slower than the ball (assuming a coefficient of restitution of 0.8). All joints at 10 rad/s can achieve up to fast returns in most postures, and 5 rad/s allows only slow returns.
Compared to humans, the difference is significant. Bańkosz and Winiarski (2018) measured 10 elite Polish female junior players using 120 Hz motion capture and reported that the racket speed at the moment of ball contact in a forehand topspin averages 13.0–14.6 m/s. Humans use that speed to hit hard with spin , rather than just 「returning」 the ball. To achieve that level with this example arm, all joints would need to be around 25 rad/s based on the median (between 11.3 at 20 rad/s and 17.0 m/s at 30 rad/s).
4.5 Gantry + Wrist
A wrist mounted on a 2-axis gantry is simpler to calculate. The maximum racket speed is the linear speed of the belt axis plus the wrist angular velocity multiplied by the distance from the wrist to the racket.
| Belt axis (m/s) | Wrist (rad/s) | Wrist-racket 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 |
This table is based on addition, so it is more of a calculation than a direct measurement. For reference, Google's 2023 system specified a maximum gantry speed of 2 m/s (arXiv:2309.03315 , Section II-A). While gantry speeds are uniform regardless of posture, moving large masses on the belt axes imposes separate acceleration limits (Part 8).
5. Limitations
- We only looked at velocity limits. In reality, acceleration and torque limits often come into play first, and there must be enough distance and time to accelerate to that speed before swinging (Part 8).
- Motor speed limits are determined by supply voltage and back-EMF, and decrease as torque increases (torque-speed curve). This post simplifies them as constant limits.
- The maximum value in the racket normal direction (right column of the table) also assumes free rotation of the racket face.
6. Conclusion
- The Jacobian is a posture-dependent conversion table from 「joint velocity to racket velocity」. Each column represents the contribution of a single joint.
- The maximum racket speed within joint velocity limits is given by the closed-form expression Σ |dᵀ J_v,i| q̇max_i.
- In the example arm, 10 rad/s joint speed yields about 5.7 m/s for the racket, and 20 rad/s yields about 11.3 m/s. While 10 rad/s is enough to return the ball, hitting hard like a human requires around 25 rad/s.
- Even under the same limits, posture causes a 1.7-fold difference, meaning choosing where to strike and velocity planning cannot be treated separately.
A word from Titi. Even with joints rotating at just 10 rad/s, you can return the ball. But to swing at 14 m/s like a pro player, you need two to three times that speed, so your very first robot should aim for 「returning」 first!
References
All materials were accessed on 2026-10-18.
- Lynch, Park, Modern Robotics, 2017, Open Preprint, Chapter 5 (5.1 Jacobians, 5.3 Singularities, 5.4 Manipulability).
- Bańkosz, Winiarski, Correlations between Angular Velocities in Selected Joints and Velocity of Table Tennis Racket during Topspin Forehand and Backhand, J. Sports Sci. Med. 17 (2018) 330–338, Original text, Table 1.
- D'Ambrosio et al., Robotic Table Tennis: A Case Study into a High Speed Learning System, arXiv:2309.03315, Section II-A.