状态:草稿(2026-10-18),实测。相机周期、噪声、延迟以及机器人的速度和力限均采用假设值。 测量于 2026-10-18 在与第二篇相同的临时 Pod(迷你 PC 节点 Intel Core Ultra 9 185H,上限 CPU 3 核、内存 3 GiB,无 GPU,mujoco 3.16.0)中进行。 物理时间步长 0.5 ms,球拍接触 solref 为 (−4e6, −34)(第二篇第 7 节设定的值)。球使用了 DeepMind 公开的初始状态中与第二篇相同的 500 个样本(seed 0)的前 100 个, 由于时间关系,延迟 100 ms 和 30 Hz 的条件仅运行了前 50 个。每个条件运行了一次。前三个条件共 300 次运行耗时 1,573 s(3 个进程)。 原始数据位于工作目录
tt-robot/out/(三个 F1 表格及各轮次原始数据 JSON)与tt-robot/logs/中。
目录
1. 直觉:强化学习必须超越的底线
当我们要用强化学习来训练乒乓球机器人时,首先必须确立「打得好」的标准。本文的基线是由人工编写的经典控制。 通过观察球,利用物理公式预测其飞行轨迹,计算击球位置和球拍角度,并将机械臂移动到该位置。其中不包含任何学习过程。 只有搞清楚这个基线能回击几个球,以及它在 哪里 失败了,我们才能说明强化学习究竟带来了哪些改进。
2. 机器人:2 轴龙门架 + 2 轴手腕
| 部件 | 数值(均为假设值) |
|---|---|
| 龙门架 | 位于机器人侧端线后方 38 cm(y = −1.75 m)的平面内,横向 x ±0.9 m,高度 z −0.15–0.7 m |
| 手腕 | yaw 和 pitch 两个轴,±1.4 rad。球拍面中心距离 pitch 轴 0.15 m |
| 极限 | 龙门架 4 m/s、40 m/s²,力 400 N(横向)· 300 N(高度)。手腕 20·30 rad/s、400·600 rad/s²、20 N·m |
第 3 篇的硬件规划中,这对应于「2 轴导轨 + 2 轴手腕」(第 2、3 阶段)的形态。由于龙门架没有深度(y)轴,球拍能触及的 y 与球的纵向位置相交的瞬间即为击球时刻。
3. 管道:每个阶段一个函数
- 球状态估计。 假设相机仅观察球的位置(120 Hz,噪声 σ 3 mm,延迟 30 ms),通过最小二乘法拟合位置、速度和旋转。由于旋转仅通过轨迹的弯曲来体现,因此设置了一个向先验值拉扯的项。
- 飞行预测。 使用 RK4 求解重力、阻力和马格纳斯力,球台反弹则通过冲量模型处理。系数采用了第二篇中测得的仿真器数值。
- 击球决策。 通过击球法计算将球送回目标落点(对方球场中央)所需的回弹速度,并利用镜面法则与冲量模型确定球拍法线和挥拍速度。
- 逆运动学。 手腕的两个角度可直接从法线得出,龙门架只需做一次减法(见下方代码)。
- 关节轨迹。 从当前状态到击球瞬间的(位置、速度、加速度为 0)通过五次多项式进行连接。pitch 的击球速度即为挥拍速度。
- 关节控制。 通过计算力矩(PD + 前馈)进行跟踪,并在力极限处进行截断。
- 重新规划。 在反弹前 0.2 s 进行一次规划,反弹后每隔 50 ms 根据新的观测结果重新拟合,并将轨迹拼接起来。
def ik(c, n, rb):
"""원하는 라켓 면 중심 c 와 법선 n → 관절 [x, z, yaw, pitch]."""
n = np.asarray(n, float) / np.linalg.norm(n)
th = math.asin(max(-1.0, min(1.0, n[2]))) # pitch
psi = math.atan2(-n[0], n[1]) # yaw
x = c[0] - rb.L * math.sin(th) * math.sin(psi) # 갠트리는 손목 오프셋을 빼면 끝
z = c[2] - rb.L * math.cos(th)
y_res = c[1] - (rb.y_g - rb.L * math.sin(th) * math.cos(psi)) # 0 이어야 닿는다
q = np.array([x, z, psi, th])
ok = bool(np.all(q >= np.array(rb.lo)) and np.all(q <= np.array(rb.hi)))
return q, y_res, ok
(摘自 TT Lab 实验代码 ttsim.py ,已删去文档字符串和注释。)
正交龙门架的两个轴直接叠加在球拍位置上,因此不存在奇异点、多解或数值逆运动学问题。如果是 6 轴机械臂,则必须通过数值优化和避奇来解决同样的工作。旋转 pitch 可以使球拍面中心的精确速度正好沿着球拍面的法线方向,从而将「朝向哪里」(角度)和「打得多猛」(pitch 速度)清晰地区分开来。
4. 结果
| 条件 | 相机(周期·噪声·延迟,假设值) | 规划器的物理系数 | 球 | 回击成功 | 击中但失败 | 未击中 | 规划失败 |
|---|---|---|---|---|---|---|---|
| 真实状态 | 直接已知真实状态 | 仿真器实测值 | 100 | 62% | 16 | 2 | 20 |
| 120 Hz·延迟 30 ms | 120 Hz, 3 mm, 30 ms | 仿真器实测值 | 100 | 60% | 8 | 9 | 23 |
| 仅规划器用文献系数 | 120 Hz, 3 mm, 30 ms | 文献(TT3D 阻力·马格纳斯力,球台 e 0.85·μ 0.3) | 100 | 48% | 11 | 11 | 30 |
| 120 Hz·延迟 100 ms | 120 Hz, 3 mm, 100 ms | 仿真器实测值 | 50 | 26% | 4 | 17 | 16 |
| 30 Hz·延迟 100 ms | 30 Hz, 10 mm, 100 ms | 仿真器实测值 | 50 | 2% | 0 | 17 | 32 |
「击中但失败」是球出界和落入自己球场数量的总和。延迟 100 ms 条件下的 50 个球与 30 ms 条件下 100 个球的前 50 个是相同的球,在这 50 个球中,30 ms 条件下的成功率也是 60%。
| 条件 | 击球时刻误差中位数 | 击球时刻球预测误差中位数 | 球拍跟踪误差中位数 | 成功回击球的落点误差中位数 |
|---|---|---|---|---|
| 真实状态 | 1.6 ms | 1.9 cm | 0.08 cm | 21.3 cm |
| 120 Hz·延迟 30 ms | 2.3 ms | 3.8 cm | 0.07 cm | 18.5 cm |
| 仅规划器用文献系数 | 2.0 ms | 3.3 cm | 0.06 cm | 12.4 cm |
| 120 Hz·延迟 100 ms | 2.2 ms | 9.7 cm | 0.07 cm | 21.0 cm |
| 30 Hz·延迟 100 ms | 2.2 ms | 34.6 cm | 0.05 cm | 12.4 cm(1个) |
5. 是什么导致了失败
- 控制并非瓶颈。 球拍跟踪误差中位数为 0.05–0.08 cm,击球时刻误差在 2 ms 左右。力矩达到极限的轮次在真实状态和 30 ms 条件下分别仅有 2 个,而在 100 个球中,五次轨迹超出速度和加速度极限的规划有 0–6 个,全部发生在龙门架轴上。
- 最大的失败在于工作空间(规划失败占 20–30%)。 其中「超出关节极限」有 12–19 起,「球未能到达球拍可触及的 y 位置」有 6–10 起。仅靠在端线后方 38 cm 处固定的平面,无法接住短球和低球。仅看规划成功的球,回击率在真实状态下为 77.5%,30 ms 条件下为 77.9%,文献系数下为 68.6%。这与第 3 篇提出应优先通过 2 阶段轴来解决深度(y)问题的依据方向一致。
- 相机的延迟远比噪声影响大。 在 120 Hz 下,仅将延迟从 30 ms 增加到 100 ms,成功率就从 60% 暴跌至 26%,击球时刻的球预测误差中位数从 3.8 cm 增大到 9.7 cm。在 30 Hz·100 ms(假设为目前使用的记分牌相机级别)的条件下仅为 2%。由于本实验将规划时刻固定为 0.2 s,如果采用适应 30 Hz 并等待更多观测的策略,结果可能会略有提升(推测)。这与第 3 篇中「花钱减少相机延迟比升级电机更划算」的计算结论完全一致。
- 系数不准会导致性能下降 12%p。 当仿真器使用 DeepMind 的数值时,仅将规划器换成文献系数,成功率就从 60% 降至 48%,落在自己球场上的球从 2 个增加到 9 个。第二篇中观察到的马格纳斯力强度差异(4.2 倍)直接导致了击球失败。在真实机器人上,利用我们的相机轨迹来拟合系数将直接决定成功率的高低。
- 即使知道真实状态也只有 62%。 剩下的失败归咎于规划器的冲量模型与 MuJoCo 接触模型之间的差异(这也是为什么即使在真实状态下预测误差也有 1.9 cm,「击中但球出界」有 16 起)以及工作空间受限。我们推测,强化学习能够胜过经典方法的地方正在于这种「模型差异」(推测),因为它是直接从仿真器本身而非解析模型中进行学习的。
6. 局限性
- 相机周期、噪声、延迟以及机器人的速度和力极限均为假设值。我们相机的实际延迟分布尚未进行测量(未确认)。
- 每个条件下的球数量为 50–100 个且各运行了一次。样本太少,无法给出成功率的置信区间。
- 球拍是一个赋予了摩擦力的方块,在此设置下测得的有效摩擦力在 45° 入射时为 0.047。由于几乎不具备制造旋转的能力,因此未处理瞄准和旋转回击。
- 由于未保存每轮次的轨迹(球和球拍在每个步骤的位置),本次未能制作出同时展示成功回击球与因延迟漏球的对比动图。我们将在下一次测量中一并保留轨迹数据。
7. 下一篇预告
接下来,我们将把两种强化学习方法(仅学习击球参数的混合方法、直接输出关节目标的方法)与该基线进行并排对比,条件采用相同的球样本、相同的相机假设以及相同的机器人极限(第 7 篇)。在此之前,我们将在 第 6 篇中通过阅读原文来探讨 DeepMind 机器人的局限性,并借助仿真器分析旋转问题。 我们还会一并列出各项失败原因的具体数量,以便展示强化学习究竟减少了哪些失败。
小蒂碎碎念。 机械臂明明以 0.7 mm 的误差精准移动了,十个球却还是漏掉了四个。问题不在手臂,而在位置(工作空间)和眼睛(延迟)。请先给我一双能快点看清的眼睛吧!
参考
所有链接均已于 2026-10-18 确认可正常访问。
- DeepMind, Achieving Human Level Competitive Robot Table Tennis(ICRA 2025): https://arxiv.org/abs/2408.03906
- 公开的初始球状态: https://github.com/google-deepmind/competitive_robot_table_tennis(© 2025 Google LLC, CC BY 4.0。数据未重新发布,仅收录了仿真结果。)
- TT3D: Table Tennis 3D Reconstruction(2025, 规划器的文献系数): https://arxiv.org/abs/2504.10035
- Sony AI, Physics Models for Sim-to-Real Transfer in Professional-Level Robot Table Tennis(2026, 球拍反弹公式比较): https://arxiv.org/abs/2606.28805
- MuJoCo: https://github.com/google-deepmind/mujoco
- 引用的代码为 TT Lab 实验代码。