TT Lab
Blog

한국어 English 日本語 中文

Get started
Blog

Blog

Table Tennis Arm Reinforcement Learning: Past the Baseline, but Most Gains Were Not from Learning

Status: Draft (2026-10-18), measured. All success rates are values inside the simulator, while camera period, delay, noise, and spin hint accuracy are assumed values. Training was conducted on 2026-10-18 as a temporary pod on a single GPU node of a home lab Kubernetes cluster (a single RTX 4060 for laptops). The pod limits were 6 CPU cores and 4 GiB of memory, sharing resources with other services on the same node. The software stack consists of MuJoCo 3.16.0, MuJoCo Warp (warp-lang 1.18.0), Python 3.11, and PPO (hidden layer 256). The physics matches parts 2 and 5 (time step 0.5 ms, racket stiffness 4e6). Evaluation was performed using 500 evaluation balls separated from the training balls (seed 0 samples identical to part 5's baselines) under DeepMind's default unrandomized physics. RL values are the median of 3 seeds, with parentheses showing the seed min–max. The baseline and nominal planner are deterministic and were run once. Raw data (training logs, evaluation results, recorded trajectories, Warp comparison) is in the working directory measure/sim-tt-rl/ .

Table of Contents

1. Intuition: What to Learn

There are broadly two ways to teach table tennis using reinforcement learning. One is to make the robot's joints move directly . The policy outputs joint targets at every moment and figures out how to hit the ball on its own. The other is to let classical control handle what it does best, and only learn the decisions . Inverse kinematics, trajectories, and joint control are kept as-is, and the policy only chooses striking parameters such as "when, at what angle, and how hard to hit."

Part 13 of "Basics of Table Tennis Robot Arms" (Reward and Action Space, ../robot-arm-basics/13-reward-and-action-space.md) compared these two using a pendulum racket and showed that hybrid learns quickly, but gets stuck if the predictor does not know the spin. This time, we asked the same question using part 5's full-scale robot (2-axis gantry + 2-axis wrist) and the public ball distribution.

2. Experimental Design

Method Policy Output Training
Classical Baseline None (Part 5 planner) None
Hybrid Nominal None. Determines striking parameters with a cheap analytical formula and executes solutions exceeding joint limits by clipping them within limits without giving up None
RL (a) Hybrid Normal yaw/pitch correction, face velocity, strike time, and racket center x/z correction at each decision point. Execution via closed-form IK, quintic trajectory, and PD PPO, 1 million decisions, CPU
RL (b) Direct Joints Joint target positions and velocities at 100 Hz. Passes only through PD and limits PPO, 250 million decisions, GPU (MuJoCo Warp, 4,096 worlds)

3. Results

반환 성공률: 이득의 대부분은 새 계획기에서 왔다 평가 공 500개, 시뮬레이터 안. RL 은 3시드 중앙값(랜덤화 없음·지연 학습은 1시드). 0% 25% 50% 75% 100% 참 상태 고전 기준선 61.6 하이브리드 명목(학습 없음) 83.2 RL (a) 하이브리드 84.8 명목 + 회전 힌트(학습 없음) 83.2 RL (a) + 회전 힌트 84.2 RL (b) 관절 직접 75.6 RL (b) 지연 0–120 ms 학습 74.4 RL (b) 랜덤화 없음 2 120 Hz·30 ms 고전 기준선 59.2 하이브리드 명목(학습 없음) 80.6 RL (a) 하이브리드 83.8 명목 + 회전 힌트(학습 없음) 80.6 RL (a) + 회전 힌트 83.4 RL (b) 관절 직접 76.2 RL (b) 지연 0–120 ms 학습 73.4 RL (b) 랜덤화 없음 72.6 120 Hz·100 ms 고전 기준선 26.6 하이브리드 명목(학습 없음) 53.6 RL (a) 하이브리드 58.2 명목 + 회전 힌트(학습 없음) 66.6 RL (a) + 회전 힌트 68.6 RL (b) 관절 직접 29.6 RL (b) 지연 0–120 ms 학습 52 RL (b) 랜덤화 없음 0
Figure: Return Success Rate by Method and Condition
Method True State 120 Hz / 30 ms 120 Hz / 100 ms
Classical Baseline 61.6% 59.2% 26.6%
Hybrid Nominal (No Learning) 83.2% 80.6% 53.6%
RL (a) Hybrid 84.8%(84.4–85.0) 83.8%(82.8–83.8) 58.2%(58.0–59.0)
Nominal + Spin Hint (No Learning) 83.2% 80.6% 66.6%
RL (a) + Spin Hint 84.2%(84.0–84.2) 83.4%(83.0–83.4) 68.6%(67.4–69.0)
RL (b) Direct Joints (Warp) 75.6%(75.2–76.0) 76.2%(75.8–78.4) 29.6%(12.8–38.6)
RL (b) Trained with 0–120 ms Delay 74.4% 73.4% 52.0%
RL (b) Trained Without Randomization 2.0% 72.6% 0.0%
RL (b) CPU Version (30-min Training) 0.0% 0.0% 0.0%

(Trained with 0–120 ms delay, without randomization; the CPU version is a single seed.)

3.1 Reading Honestly: Where Did the Gains Come From?

3.2 RL Learning Joints Directly

3.3 The Same Ball, Three Methods

Evaluation ball #21 is redrawn using recorded trajectories (5 ms intervals) under the 120 Hz / 30 ms condition. Clicking the image plays it back 3x slower.

같은 공, 세 방법: 옆에서 본 공과 라켓 평가 공 21번, 카메라 120 Hz·지연 30 ms 조건, 기록된 궤적(5 ms 간격). 3배 느리게. ▶ 누르면 재생 고전 기준선 계획 실패 (관절 한계 밖) 하이브리드 명목(학습 없음) 반환 성공 RL (a) 하이브리드(학습 후) 반환 성공 가로축은 탁자 길이 방향(로봇 쪽 끝선 뒤 점선이 타격면), 빨간 선분은 라켓 면입니다.
Figure: Trajectories of Baseline, Nominal Planner, and Post-Training Hybrid for the Same Ball

The baseline attempts planning at 0.2 s, gives up because it is outside joint limits, and does not move the racket. Both the nominal planner and the post-training hybrid return the same ball to the opponent's court. The fact that the two trajectories are nearly identical echoes the discussion in Section 3.1.

3.4 Remaining Failures

4. Why a GPU Was Needed: MuJoCo Warp

Direct joint RL requires many samples. The CPU version (6 processes) trained 17.5 million decisions over 30 minutes but remained stuck at a 0% success rate. Moving the same environment to MuJoCo Warp allowed running 4,096 worlds in parallel on a single GPU.

학습 곡선: 벽시계 시간 대 학습 중 성공률 학습 분포(랜덤화·탐색 잡음 포함)에서 잰 최근 회차 성공률. 시드별 선. 0 25 50 75 100 0 30 60 90 120 150 벽시계(분) RL (a) 하이브리드 RL (a) + 회전 힌트 RL (b) 관절 직접 RL (b) 지연 0–120 ms RL (b) 랜덤화 없음 RL (b) CPU 판 CPU 판은 30분 동안 0%. Warp 판은 2.5억 결정에 39–62분.
Figure: Learning Curves
Run Decisions Training Time Physics Steps/s (Median) Final Success Rate During Training
RL (a) Hybrid (CPU, 3 seeds) 1 million 60.5–145.6 min 59,526–115,518 75.0–75.8%
RL (b) CPU Version 17.5 million 30.0 min 214,169 0.0%
RL (b) Warp (3 seeds) 250 million 41.5–62.0 min 1,833,179–2,393,369 63.5–65.5%
RL (b) Warp, 0–120 ms Delay 250 million 39.3 min 2,498,807 50.7%

(Physics steps are MuJoCo steps with dt 0.5 ms. Success rates during training are measured on the training distribution mixed with randomization and exploration noise, differing from the evaluation values in Section 3. The variation in hybrid training time across seeds is due to sharing the CPU with other tasks on the same node.)

We first verified whether physics remained identical when moving to Warp.

5. What Happened During Execution

The training pod was launched using kubectl run --rm -i . The intention was to have the pod automatically delete itself when the container finished. However, the attach connection of the first pod dropped due to a TLS error after about 4 hours, and at that exact moment, --rm deleted the training pod. After that, the container printed a line every minute to keep the connection alive, and the results were exported externally every ten minutes. We set a maximum execution time (activeDeadlineSeconds) on the pod as a final safety measure.

6. Unmeasured items

7. To the next part

The next step is to rerun the same evaluation by adding low balls and the depth axis to widen the workspace into the robot model. The story of aligning physics and the referee with real footage is in Part 8.

TT's note. We were excited that reinforcement learning significantly beat the baseline, but it turned out that most of it was thanks to the new planner without learning. You have to separate and measure the "learned share" and the "design-changed share" to see the true skill!

References

All links were verified as accessible when accessed on 2026-10-18.

Sign in to like

Comments

No comments yet.

Sign in to leave a comment