状态:草稿 (2026-10-18),实测。球物理第一阶段 (A–E) 完成。 基于此模型运行的经典控制基准线在 第 5 篇中介绍,强化学习将在后续篇章中撰写。 测量于 2026-10-18 在家庭实验室 Kubernetes 的一个临时 Pod 中进行。节点为一台迷你 PC (Intel Core Ultra 9 185H),Pod 上限为 3 个 CPU 核心、3 GiB 内存、 无 GPU,关闭离屏渲染(
MUJOCO_GL=disable)。镜像基于python:3.12,通过 pip 添加了 mujoco 3.16.0、numpy 2.5.4、scipy 1.18.1(安装耗时 11.6 s)。 Pod 内存峰值为 725 MB。由于 MuJoCo 对相同的输入产生相同的结果,表中的数值均为运行一次的结果,离散度则通过接触相位(A4,50 种)和 球样本(D,500 个)分别得出。原始数据位于工作目录tt-robot/out/(表格和图表)和tt-robot/logs/(运行日志)中。
目录
- 1. 直觉:2.7 g 的球对设置很敏感
- 2. 模型:直接使用 DeepMind 公开的 MJCF 数值
- 3. 30 cm 下落:球弹得太高了
- 4. 空气:马格努斯力比文献强 4.2 倍
- 5. 斜向弹跳:球台太滑了
- 6. 公开的 500 个初始状态:什么对结果的影响最大
- 7. 球拍:球穿透了球板
- 8. 计算成本低
- 9. 局限性
- 10. 转入下一篇
- 参考资料
1. 直觉:2.7 g 的球对设置很敏感
乒乓球直径 40 mm,重 2.7 g。以 7 m/s 飞行的球受到的空气阻力与重力大小相当,当旋转很大时,甚至会超过重力。 球接触球台的时间大约为 1 ms。因此,模拟器的时间步长、接触硬度、流体系数等几个设置会极大地改变球的轨迹。
要教机器人打乒乓球,首先必须弄清楚“模拟器里的球飞得是否像真球”。在还没有真实球的轨迹的情况下,本文所做的工作是: 直接代入公开的设置,与文献数值进行对照,并测量哪种设置对结果的影响最大。
2. 模型:直接使用 DeepMind 公开的 MJCF 数值
DeepMind 在发布 ICRA 2025 乒乓球论文的同时,公开了 15,792 个球的初始状态(13,088 个拉球,2,704 个发球)以及 MuJoCo Notebook。 我们直接使用了 Notebook 中的数值。
| 项目 | 数值 |
|---|---|
| 时间步长,积分器 | 1 ms, implicitfast |
| 球 | 质量 2.7 g,半径 0.02 m,薄壳球体 |
| 流体系数 (fluidcoef) | 0.235 0.25 0.0 1.0 1.0 |
| 球与球台接触 | solref -1000000 -17(刚度 1e6,阻尼 17),摩擦力 0.1 |
| 坐标系 | 原点位于球台顶面中心,x 宽 1.525 m,y 长 2.74 m,z 向上。机器人侧为 y < 0 |
MuJoCo 在 qfrc_fluid 中单独记录流体受力。关闭重力,仅施加速度和旋转后读取该值,即可直接测量阻力和马格努斯力。
s = Sim(base.with_(gravity=False))
for v in [2, 5, 10, 15, 20, 25, 30]:
s.reset([0, 0, 1], [0, v, 0], [0, 0, 0])
fd = -s.d.qfrc_fluid[1] # 진행 방향 반대 힘 = 항력
cd = fd / (Q * v * v) # Q = ½ρA
for S in [0.0, 0.1, 0.2, 0.4, 0.6, 1.0]: # 회전비 S = rω / v
w = S * v / BALL_R
s.reset([0, 0, 1], [0, v, 0], [-w, 0, 0]) # 탑스핀
fm = -s.d.qfrc_fluid[2] # 아래로 누르는 힘 = 마그누스
km = fm / (w * v) if w > 0 else float("nan")
(摘自 TT Lab 实验代码 exp_b_magnus.py 。 Sim 是一个用于构建 MJCF 并调用 mj_forward 的小型封装器。)
3. 30 cm 下落:球弹得太高了
ITTF 规定,从 30 cm 处落下的球应该弹起约 23 cm。如果忽略空气阻力,恢复系数 e ≈ √(23/30) = 0.876。
| 模型 | 入射速度 | 反弹速度 | e | 顶点 | 相比规定 23 cm 的差值 |
|---|---|---|---|---|---|
| MuJoCo, dt 0.25 ms | −2.375 m/s | 2.299 m/s | 0.968 | 26.0 cm | +3.0 cm |
| MuJoCo, dt 0.5 ms | −2.373 m/s | 2.308 m/s | 0.973 | 26.2 cm | +3.2 cm |
| MuJoCo, dt 1 ms | −2.368 m/s | 2.317 m/s | 0.978 | 26.4 cm | +3.4 cm |
| MuJoCo, dt 2 ms | −2.368 m/s | 7.114 m/s | 3.004 | 196.4 cm | 发散 |
| TT3D 的 e 0.85(按相同的入射速度和阻力计算) | 0.850 | 20.2 cm | −2.8 cm | ||
| Sony AI 2026 的 e 公式(按相同方法计算) | 0.932 | 24.2 cm | +1.2 cm |
(图中运动为表格的回弹速度,带入了与实测相同的空气阻力 C_D 0.471 后重新绘制。重新绘制的顶点为 26.4 cm 和 195.9 cm,与表格一致。)
- DeepMind 数值中的球台比规定更具弹性。 即使将 dt 改为 0.25–1 ms,e 也是 0.968–0.978。
- 在 dt 2 ms 时数值会爆炸。 接触刚度 1e6 对应固有频率 ω₀ = √k = 1,000 rad/s,当 ω₀·dt 达到 2 时,接触积分会产生能量。 第 7 节的球拍接触测量中,ω₀·dt ≤ 1 附近也显示为稳定边界。
- 仅靠阻尼即可匹配。 保持刚度 1e6 不变,仅用二分法改变阻尼 b,当 b = 83.8 时 e = 0.876(规定),当 b = 38.5 时为 0.946(+8%),当 b = 128.1 时为 0.806(−8%)。 DeepMind 默认值 0.978 的 +8% 超过了 1,因此无法通过阻尼来实现。
- 根据接触相位的离散性。 即使是相同的下落,根据接触在时间间隔之间开始的位置不同,e 也会有所变化。用 50 种相位测量时,标准差在 dt 为 0.25 ms 时为 0.005, 在 0.5 ms 时为 0.012,在 1 ms 时为 0.005–0.008;而在 dt 为 1 ms 时,最大甚至达到 1.002,超出了 1。这种离散性会作为较小的观测噪声进入强化学习中。
将碰撞速度更改为 1–8 m/s 时,差异更加明显。MuJoCo 的 e 在 0.96–0.99 之间,几乎是平坦的;而 Sony AI 2026 的公式(e = 0.98 − 0.02·入射速度)显示速度越快 e 越低。
4. 空气:马格努斯力比文献大 4.2 倍
| 来源 | C_D | 马格努斯系数 k_M (N·s²/rad/m) | 相比 MuJoCo |
|---|---|---|---|
| MuJoCo, DeepMind 值(实测) | 0.471 | 2.053e-5 | 1.00 |
| TT3D 2025 | 0.494 | 4.860e-6 | 0.237 |
| Tebbe 等 2020(C_D 0.4, C_M 0.6,力形态为估计值) | 0.400 | 9.236e-6 | 0.450 |
| Sony AI 2026 | 低速 0.55,17.5 m/s 时为 0.37–0.51 | 转速比的函数(本文中未采用具体数值) |
- 有效 C_D 在 2–30 m/s 范围内为 0.470–0.474,几乎保持恒定。fluidcoef 的第一个值 0.235 对应于 C_D/2。
- 马格努斯力得出为与速度和旋转成正比的常数 k_M = 2.053e-5。转换为升力系数则为 C_L = 1.33·S,而 TT3D 为 0.316·S。
- 如果给以 7 m/s 飞行的球施加 300 rad/s 的下旋,MuJoCo 的马格努斯力约为 43 mN,大于 26 mN 的重力。球会向上浮起。 我们认为实际球类运动中不会发生这种情况,但并未亲自动手验证(推测)。
- 有研究报告了在转速比接近 0.5 时升力突变的现象(lift crisis),但无论是 MuJoCo 还是文献公式,系数为常数的模型都无法描绘出这一点。
对于相同的击球(机器人端底线后 y = −1.6 m,高度 0.2 m 处速度为 (0, 7, 1.6) m/s),仅改变旋转就会在落点上暴露出差异。
| 旋转 | MuJoCo 落点 y | TT3D 公式落点 y | 备注 |
|---|---|---|---|
| 上旋 300 rad/s | −0.315 m(击球方半场) | 0.355 m | TT3D 穿过网高下方 1.2 cm,被判定触网 |
| 不转 | 0.812 m | 0.789 m | 两个模型在 2.3 cm 范围内一致 |
| 下旋 150 rad/s | 3.684 m(出界),顶点 51.3 cm | 1.093 m | |
| 下旋 300 rad/s | 5.378 m(出界),顶点 139.6 cm | 1.482 m(出界) |
无旋转球时两个模型几乎完全相同,而一旦加入旋转,MuJoCo 一侧就会产生巨大偏差。问题在于,公开数据的旋转值可能是专门针对该 MJCF 创建并配合使用的(推测)。 如果真是如此,旋转值和马格努斯系数必须成对使用,绝对不能单方面替换为文献值。第 6 节的敏感度分析就是依据。
5. 斜向弹跳:球台偏滑
组合了球台正上方水平速度 3、6、9 m/s,垂直速度 2、4 m/s,旋转 −300、0、+300 rad/s,并对比了弹跳前后的状态。
- DeepMind 数值中的有效摩擦系数约为 0.10。 这与设定的摩擦力 0.1 相同,但小于文献中的 0.25–0.3。 例如,以水平 6 m/s、垂直 4 m/s、无旋转进入的球,弹跳后的水平速度为 5.19 m/s。TT3D 公式为 3.78 m/s,Sony 公式为 4.10 m/s。
- 即使在弹跳后,接触点仍在继续滑动。而文献公式在相同的输入下,很多情况下会以纯滚动结束。
- 即使将 e 调整为规定值、摩擦力调整为 0.3 的 MuJoCo,在滑动区间内 μ 仍保持 0.30 不变,但在滚动区间内有效 μ 残留了 0.07–0.17。 我们认为这是因为摩擦方向的接触设置(solreffriction)只有阻尼,无法让滑动彻底停止(推测)。
- 在垂直速度 2 m/s 并赋予下旋的某些情况下,e 达到了 1.08–1.16,超出了 1。我们认为这是由摩擦与垂直方向接触交织产生的(推测)。这是下次修正时需要一并调整的项目。
6. 500 个公开初始状态:什么因素引起的波动最大
在 13,088 个拉力回合中,从飞向机器人方向的 11,999 个球里随机抽取了 500 个(seed 0),并用 DeepMind 数值的 MuJoCo(dt 1 ms)进行模拟飞行。 公开数据中没有轨迹,只有初始状态。 因此,下面并非与真实球的对比,而是“在相同初始状态下模拟器输出的值”及其敏感度。
| 指标 | 5% / 50% / 95% |
|---|---|
| 初始速度 | 3.80 / 5.49 / 7.89 m/s |
| 初始旋转 | 12.21 / 57.55 / 101.60 rad/s |
| 机器人侧球台落点 | 100.0%(触网 0.6%) |
| 至首次弹跳 | 0.30 / 0.42 / 0.60 s |
| 弹跳后瞬时速度 | 3.82 / 4.50 / 5.61 m/s |
| 到达击球平面(y = −1.6 m) | 0.51 / 0.71 / 1.06 s |
| 击球平面高度 | 0.01 / 0.31 / 0.47 m |
我们通过仅改变设置重新发射相同的 500 个球,并成对观察它们在击球平面上的位置差异。由于球拍板的半宽约为 7.5 cm,如果差异超过几厘米,策略就会挥空。
| 修改项 | 击球平面位置差中位数 / 95% | 机器人侧落点率变化 |
|---|---|---|
| dt 0.5 ms / 0.25 ms | 1.0 / 3.8 cm, 0.7 / 3.2 cm | 0 |
| C_D 0.40 / 0.55 | 2.5 / 12.5 cm, 2.7 / 13.2 cm | −1.4 / 0 %p |
| 球台 μ 0.25 / 0.3 | 0.6 / 5.1 cm, 0.7 / 6.0 cm | 0 |
| 将球台 e 设为规定值 0.876 | 6.9 / 15.2 cm | 0 |
| 规定 e 的 ±8% | 4.7 / 10.1 cm, 4.6 / 9.8 cm | 0 |
| 马格努斯效应 ×0.5 | 12.4 / 37.6 cm | −11.0 %p |
| 马格努斯效应 ×0.24(TT3D 强度) | 17.7 / 57.3 cm | −23.0 %p |
| 马格努斯效应 0 | 23.2 / 78.9 cm | −32.2 %p |
| 文献值组合(C_D 0.49,马格努斯效应 ×0.24,规定 e,μ 0.3) | 17.4 / 57.3 cm | −21.2 %p |
- 影响最大的是马格努斯效应。 如果将其降至文献强度,落在球台上的球将从 500 个减少到 385 个(77%)。这表明数据中的旋转值与系数是绑定在一起的。
- 球台回弹率 ±8% 会导致 5% 的球产生约 10 cm(95% 位置为 9.8–10.1 cm)的偏差。 这比球拍半宽还要大。这与 DeepMind 在 RSS 2023 论文中报告的观察结果(基于调查文档)方向一致,即“球台回弹偏差 8% 会导致奖励大幅下降”。
- 如果只看球,时间间隔 1 ms 就足够了。 即使将 dt 缩减到 0.5 ms 和 0.25 ms,击球平面差的中位数也在 1 cm 以内。当引入球拍时情况就有所不同了,这将在第 7 节中讨论。
7. 球拍:球穿透球板
我们将球拍板(15×16 cm,厚度 6 mm·14 mm)固定并正向发射乒乓球。通过在 30–50 种不同的接触起始时间间隔(相位)下进行扰动,统计了是反弹还是穿透。
- 如果将 DeepMind 的球台刚度(1e6)直接应用于球拍,高速球将穿透球板。 6 mm 的板从 25 m/s 开始、14 mm 的板从 30 m/s 开始,所有 50 次测试均发生完全穿透,即使将 dt 缩减到 0.25 ms 也是如此。 因为如果球嵌入板中的深度(通过线性近似为速度/√k,40 m/s 时为 40 mm)超过了“球半径 + 板厚度的一半”,球心就会穿过板中心导致法线翻转。 “由于单步跨度太大而错过接触”的最初假设仅在 dt 为 2 ms 时成立。
- MuJoCo 默认接触(solref 0.02 1)对球来说太软了。 即使在 10 m/s 下,所有条件也都发生了穿透。
- 如果提高刚度,这次数值会在较大的 dt 下产生跳跃。 在下方的网格中,√k·dt 超过 1 的单元格出现了 e > 1.05 的跳跃情况,而小于等于 1 的单元格在刚度 4e6 及以上时既没有穿透也没有不稳定。
结论。 物理时间间隔为 0.5 ms,球拍接触采用 solref(−4e6, −34)(阻尼比与 DeepMind 的值相同)。在 14 mm 板、40 m/s 的条件下,穿透次数为 0/30,不稳定次数为 0/30。 在此设置下测得的球拍恢复系数在 4 m/s 时为 0.931,在 8 m/s 时为 0.893,这比 Sony AI 2026 公式(0.80, 0.72)要大。它并不是一个与真实橡胶的嵌入深度和接触时间完全匹配的值(未确认)。 球台保留了 DeepMind 的刚度。我们认为撞击球台的垂直速度不会超过 8 m/s(估计值),并且在 8 m/s 之前,第 3 节中的设置是稳定的。
8. 计算开销低
仅包含球和球台的模型在单核上每秒可运行 23 万至 36 万步。由于节点负载不同,我们进行了两次相同的测量,得到了不同的结果(后一次测量:在 dt 0.25–1 ms 下为 229,806–239,229 步/秒)。 当 dt 为 0.5 ms 时,相当于实时速度的 120–180 倍。如果使用 3 个线程同时模拟 512 个球,则为每秒 58 万至 122 万步。 包含 2 轴龙门架和 2 轴手腕机器人的模型在 dt 为 0.5 ms、单线程下为每秒 152,611 步(76 倍实时)。这个阶段不需要 GPU。 实验时间也很短。下落批次(A)为 11.3 s,空气动力学批次(B)为 3.6 s,弹跳(C)为 0.5 s,500 个敏感度(D)为 28.7 s。
9. 局限性
- 我们没有与真实球的轨迹进行对比。 对比对象是文献中的值,文献中的值也没有由我们重新测量。下一步是使用我们自己的摄像机拍摄的轨迹来拟合系数。 由于当前 30 fps 的记分牌摄像机几乎捕捉不到弹跳瞬间和旋转,因此需要高速摄像机。
- 公开的旋转值是通过哪种模型估计得出的尚未得到确认(未确认)。“这与此 MJCF 配套”的解释只是一种推测。
- Tebbe 公式的力形式和 Sony 公式的马格努斯系数(旋转比函数)在本文中未作为数值使用或仅作为估计值处理。
- 图中的下落运动是用实测反弹速度重绘的。按旋转分类的落点图仅绘制了表中的落点位置,并未绘制 MuJoCo 轨迹本身。
10. 下期预告
将机器人放置在该球模型上,并运行“观察、预测、挥拍”经典控制基准测试的结果在 第 5 篇中。强化学习将通过能否超越该基准来进行评估。 关于如何构建机器人的身体,将在紧接着的 第 3 篇中介绍。
TT 的小贴士。 明明是同一个球,仅仅改了一行模拟器设置,原本偏离 26 cm 的球就飞高了将近 2 m。可不能因为乒乓球轻就轻视它。请将系数与数据作为一个整体来处理!
参考资料
所有链接均已于 2026-10-18 验证可访问。
- DeepMind, Achieving Human Level Competitive Robot Table Tennis(ICRA 2025): https://arxiv.org/abs/2408.03906
- 公开数据与 MuJoCo 笔记本: https://github.com/google-deepmind/competitive_robot_table_tennis(初始球状态,© 2025 Google LLC, CC BY 4.0。本文不重新分发数据,仅发布抽取 500 个球通过模拟器发射的结果。)
- DeepMind, Robotic Table Tennis: A Case Study into a High Speed Learning System(RSS 2023): https://arxiv.org/abs/2309.03315
- Sony AI, Physics Models for Sim-to-Real Transfer in Professional-Level Robot Table Tennis(2026): https://arxiv.org/abs/2606.28805
- TT3D: Table Tennis 3D Reconstruction(2025): https://arxiv.org/abs/2504.10035
- MuJoCo 流体模型文档: https://mujoco.readthedocs.io/en/stable/computation/fluid.html, MuJoCo 仓库: https://github.com/google-deepmind/mujoco
- Tebbe 等人 (2020) 的系数以及旋转比 0.5 附近的升力危机(lift crisis)报告 (Miyazaki, 2017) 是在调查阶段确认过原文的值,本次未重新核对链接。
- 引用的代码是 TT Lab 实验代码。