状态:草稿(2026-10-18),已实测。所有成功率均为模拟器内的数值,相机周期、延迟、噪声以及旋转提示的准确度均为假设值。 学习于 2026-10-18 在家庭实验室 Kubernetes 的一个 GPU 节点(单张笔记本 RTX 4060)上以临时 Pod 的形式进行。Pod 的资源上限为 6 核 CPU、4 GiB 内存,并与同一节点上的其他服务共享资源。 环境为 MuJoCo 3.16.0、MuJoCo Warp(warp-lang 1.18.0)、Python 3.11、PPO(隐藏层 256)。物理参数与第 2、5 篇相同(时间步长 0.5 ms,球拍刚度 4e6)。 评估使用了与学习用球分离的 500 个评估球(采用与第 5 篇基准线相同的 seed 0 样本),并在无随机化的 DeepMind 默认物理引擎下进行。RL 结果为 3 个随机种子的中位数,括号内为种子的最小值至最大值。基准线和标称规划器具有确定性,因此只运行了一次。 原始数据(学习日志、评估结果、录制的轨迹、Warp 对比)位于工作目录
measure/sim-tt-rl/中。
目录
1. 直觉:我们要让它学习什么
通过强化学习来教机器人打乒乓球的方法大致有两种。一种是让 机器人直接运动关节 。策略在每个时刻输出关节目标,并自行摸索如何击中球。 另一种是 将经典控制擅长的工作交出去,只让它学习判断 。逆运动学、轨迹和关节控制保持不变,策略仅选择诸如“何时、以何种角度、用多大力量击打”之类的击球参数。
在《乒乓球机器人手臂基础》第 13 篇(奖励与动作空间, ../robot-arm-basics/13-reward-and-action-space.md)中,我们用摆动球拍对比了这两种方法,结果表明混合式方法学得更快,但如果预测器不了解旋转,就会受阻。
这一次,我们在第 5 篇的实际尺寸机器人(2 轴龙门架 + 2 轴手腕)以及公开的球分布上提出了同样的问题。
2. 实验设计
| 方法 | 策略输出内容 | 学习方式 |
|---|---|---|
| 经典基准线 | 无(第 5 篇的规划器) | 无 |
| 混合式标称 | 无。通过廉价的解析式确定击球参数,对于超出关节极限的解,不放弃而是将其截断到极限范围内执行 | 无 |
| RL (a) 混合式 | 在每个决策点修正法线 yaw/pitch、拍面速度、击球时间和球拍中心 x/z。通过闭式解 IK、5次轨迹、PD 执行 | PPO,100 万次决策,CPU |
| RL (b) 直接关节 | 以 100 Hz 输出关节目标位置和速度。仅经过 PD 和极限检查 | PPO,2.5 亿次决策,GPU(MuJoCo Warp,4,096 个世界) |
- 机器人极限。 与第 5 篇不同,这里实际强制执行了硬件规划(第 3 篇)的数值。水平轴为 3 m/s·40 m/s²,高度轴为 3 m/s·30 m/s²,手腕为 20/30 rad/s。
- 域随机化(仅在学习时)。 球桌反弹率 0.80–0.98、摩擦力 0.1–0.3、阻力系数 0.40–0.55、相机延迟 0–60 ms、观测噪声 0–5 mm。由于马格努斯效应与公开数据的旋转成对出现(第 2 篇),因此固定为 DeepMind 的数值。
- 旋转类型提示。 这是一个融入了第 6 篇结论的变体。告知上旋、下旋或不转中的一种,并将该类型的平均旋转用作轨迹拟合的先验值。在评估中,假设提示的准确率仅为 80%(学习时在 70–100% 之间扰动)。
- 三种评估条件。 真实状态(直接知晓球的状态)、120 Hz 且延迟 30 ms、120 Hz 且延迟 100 ms(相机噪声 σ 3 mm)。均为假设值。
3. 水果
| 方法 | 真实状态 | 120 Hz·30 ms | 120 Hz·100 ms |
|---|---|---|---|
| 经典基准线 | 61.6% | 59.2% | 26.6% |
| 混合式标称(无学习) | 83.2% | 80.6% | 53.6% |
| RL (a) 混合式 | 84.8%(84.4–85.0) | 83.8%(82.8–83.8) | 58.2%(58.0–59.0) |
| 标称 + 旋转提示(无学习) | 83.2% | 80.6% | 66.6% |
| RL (a) + 旋转提示 | 84.2%(84.0–84.2) | 83.4%(83.0–83.4) | 68.6%(67.4–69.0) |
| RL (b) 直接关节 (Warp) | 75.6%(75.2–76.0) | 76.2%(75.8–78.4) | 29.6%(12.8–38.6) |
| RL (b) 以 0–120 ms 延迟学习 | 74.4% | 73.4% | 52.0% |
| RL (b) 无随机化学习 | 2.0% | 72.6% | 0.0% |
| RL (b) CPU 版(学习 30 分钟) | 0.0% | 0.0% | 0.0% |
(以 0–120 ms 延迟学习、无随机化、CPU 版的数据基于 1 个随机种子。)
3.1 诚实地解读:收益究竟来自哪里
- 基准线 → 标称:+21.4–27.0%p,无学习。 在真实状态下,基准线在规划阶段放弃了 115 个球(超出关节极限 74 个,球未落入球拍可及位置 37 个,预测无弹跳 4 个)。 标称规划器即使超出极限也会将解截断并挥拍,因此规划失败次数归零,并在这 115 个球中成功回击了 36 个。“击中但出界”的情况也从 68 个减少到 10 个。这两点都源于规划器的差异。
- 标称 → RL (a):+1.6–4.6%p。 学习带来的净收益很小。落点误差的中位数从 14.6 降至 10.8 cm(真实状态下),瞄准有所改善。
- 旋转提示:在 100 ms 延迟下提升了 +10.4%p(58.2 → 68.6%)。 然而,无学习的标称 + 提示也达到了 66.6%。这一收益同样不是来自学习,而是源于将提示用作轨迹拟合的先验值。当延迟较短(30 ms 或以下)时,提示没有带来收益。
- 这一结论与第 13 篇的摆锤实验以及第 6 篇的“旋转类型提示 + 轨迹拟合”结果方向一致。 好的规划器和好的预测(先验值)才是基础,学习只是在此之上的微调。
3.2 直接学习关节的 RL
- 击中能力强,但瞄准较弱。 在真实状态下,未能击中的球为 40 个,少于混合式(64 个),但“击中但出界”(45 个)和“击中落入己方球场”(37 个)远多于混合式(分别为 10 个和 2 个)。落点误差的中位数也达到 27.1 cm,超过了混合式的两倍。
- 对延迟敏感。 在学习时将延迟扰动设为 0–60 ms 的策略,在 100 ms 下暴跌至 29.6%,且种子之间的离散度很大(12.8–38.6%)。将延迟范围扩大到 0–120 ms 进行学习后,在 100 ms 下达到了 52.0%。它无法承受学习时未见过的延迟。
- 去除随机化后崩溃。 在无随机化情况下学习的策略在学习条件(120 Hz·30 ms)下达到了 72.6%,但在真实状态下仅为 2.0%,在 100 ms 下为 0.0%。只要观测结果与学习时稍有不同便会失效。
3.3 相同的球,三种方法
以 120 Hz·30 ms 条件下录制的评估球 21 的轨迹(5 ms 间隔)重新绘制。点击图片可进行 3 倍慢动作回放。
基准线在 0.2 秒时进行规划,但因超出关节极限而放弃,未移动球拍。标称规划器和学习后的混合式将同一个球回击到了对方半场。两条轨迹几乎完全一致,这与 3.1 节所述完全吻合。
3.4 剩余的失败
- 工作空间。 学习后的混合式在真实状态下未能击中的 64 个球, 全部 都是因为关节极限对解进行了截断。剩余的失败不是学习的问题,而是机器人可及范围的问题。
- 低球。 在击球面上球高低于 10 cm 的 43 个球,任何方法几乎都无法接住(基准线 0%、标称 9%、混合式 12%)。这为第 3 篇提出的“用两阶段轴优先看深度 (y) 轴”提供了又一个依据。
- 100 ms 延迟。 混合式的失败次数也增加了 3 倍。减少相机延迟依然是最大的杠杆(与第 3、5 篇结论相同)。
4. 为什么需要 GPU:MuJoCo Warp
直接关节 RL 需要大量的样本。CPU 版本(6 个进程)在 30 分钟内学习了 1,750 万次决策,但成功率停留在 0%。我们将相同的环境迁移到 MuJoCo Warp,在单张 GPU 上同时运行 4,096 个世界。
| 运行 | 决策数 | 学习时间 | 物理步数/秒(中位数) | 学习过程中的最终成功率 |
|---|---|---|---|---|
| RL (a) 混合式 (CPU, 3种子) | 100万 | 60.5–145.6分钟 | 59,526–115,518 | 75.0–75.8% |
| RL (b) CPU 版 | 1,750万 | 30.0分钟 | 214,169 | 0.0% |
| RL (b) Warp (3种子) | 2.5亿 | 41.5–62.0分钟 | 1,833,179–2,393,369 | 63.5–65.5% |
| RL (b) Warp,延迟 0–120 ms | 2.5亿 | 39.3分钟 | 2,498,807 | 50.7% |
(物理步数是指 dt 为 0.5 ms 的 MuJoCo 步数。学习过程中的成功率是在混有随机化和探索噪声的学习分布中测得的,因此与第 3 节的评估值不同。混合式学习时间因种子而异,是因为与其他同节点任务共享了 CPU。)
首先确认了迁移到 Warp 后的物理机制是否相同。
- 将 200 个相同的球分别通过 CPU 和 Warp 飞行,1 秒后的位置差中位数为 0.003 cm。
- 在拍面厚度 6–14 mm、球速 10–40 m/s 的穿隧测试中,Warp 版本在 300 次测试(每种厚度 150 次)中穿透次数均为 0,反弹系数与 CPU 版本精确到小数点后第四位完全一致。
- 通过相同的策略输入对 CPU 环境和 Warp 环境进行了 64 次对照,结果 64 次完全一致。
5. 运行过程中发生的事
学习 Pod 是通过 kubectl run --rm -i 启动的。其目的是希望在容器结束时 Pod 会自动被删除。然而,第一个 Pod 在大约 4 小时后因为 TLS 错误导致 attach 连接断开,就在那一瞬间, --rm 删除了正在学习中的 Pod。
此后,容器每分钟输出一行以保持连接存活,结果每 10 分钟导出一次。我们在 Pod 上设置了最大运行时间(activeDeadlineSeconds)作为最后的安全保障。由于同一节点上还在运行其他服务,我们将内存上限设为 4 GiB,并每 10 分钟记录一次节点剩余内存(在记录的 37 次中,剩余空间为 5,099–8,685 MB)。
6. 未实测
- 实机转换。 所有结果均在模拟器中。不能保证在真实机器人上会出现相同的顺序(名义策略 > RL 微调)。
- 实际相机延迟。 30 ms 和 100 ms 是假设值。我们相机的实际延迟分布尚未测量。
- 旋转类型分类准确率。 评估中的 80% 是假设值。我们尚未测量通过球、声音和姿态实际能准确识别多少种旋转类型。
- 球拍胶皮的实际反弹与摩擦力、机器人极限值(速度、加速度、力)也都是假设值。
- RL (b) 的延迟训练为 0–120 ms,无随机化,CPU 版本为 1 个随机种子。
7. 下期预告
接下来是将低球和扩大工作空间的深度轴加入机器人模型中,并再次运行相同的评估。关于使用真实视频来对齐物理引擎和裁判的故事,请参考 第 8 篇。
TT 的总结。 本来为强化学习大幅超越基准线而高兴,结果发现大部分功劳归功于无需学习的新规划器。只有把“学习到的部分”和“设计改变的部分”分开测量,才能看出真正的实力!
参考资料
所有链接均已于 2026-10-18 确认可正常访问。
- MuJoCo: https://github.com/google-deepmind/mujoco, MuJoCo Warp: https://github.com/google-deepmind/mujoco_warp
- 公开初期球状态: https://github.com/google-deepmind/competitive_robot_table_tennis(© 2025 Google LLC, CC BY 4.0. 数据未重新分发,仅收录了模拟结果。)
- 延伸阅读: 第 5 篇经典控制基准线, 第 6 篇 DeepMind 乒乓球机器人改进方向, 《乒乓球机械臂基础》第 13 篇奖励与动作空间(
../robot-arm-basics/13-reward-and-action-space.md) - 引用的代码和图表轨迹为 TT Lab 实验代码的输出。