TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

乒乓球手臂强化学习:超越了基准线,但收益的大部分并非来自学习

状态:草稿(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 个世界)

3. 水果

반환 성공률: 이득의 대부분은 새 계획기에서 왔다 평가 공 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
图:不同方法和条件下的回球成功率
方法 真实状态 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 诚实地解读:收益究竟来自哪里

3.2 直接学习关节的 RL

3.3 相同的球,三种方法

以 120 Hz·30 ms 条件下录制的评估球 21 的轨迹(5 ms 间隔)重新绘制。点击图片可进行 3 倍慢动作回放。

같은 공, 세 방법: 옆에서 본 공과 라켓 평가 공 21번, 카메라 120 Hz·지연 30 ms 조건, 기록된 궤적(5 ms 간격). 3배 느리게. ▶ 누르면 재생 고전 기준선 계획 실패 (관절 한계 밖) 하이브리드 명목(학습 없음) 반환 성공 RL (a) 하이브리드(학습 후) 반환 성공 가로축은 탁자 길이 방향(로봇 쪽 끝선 뒤 점선이 타격면), 빨간 선분은 라켓 면입니다.
图:针对同一个球的基准线、标称规划器和学习后混合式的轨迹

基准线在 0.2 秒时进行规划,但因超出关节极限而放弃,未移动球拍。标称规划器和学习后的混合式将同一个球回击到了对方半场。两条轨迹几乎完全一致,这与 3.1 节所述完全吻合。

3.4 剩余的失败

4. 为什么需要 GPU:MuJoCo Warp

直接关节 RL 需要大量的样本。CPU 版本(6 个进程)在 30 分钟内学习了 1,750 万次决策,但成功率停留在 0%。我们将相同的环境迁移到 MuJoCo Warp,在单张 GPU 上同时运行 4,096 个世界。

학습 곡선: 벽시계 시간 대 학습 중 성공률 학습 분포(랜덤화·탐색 잡음 포함)에서 잰 최근 회차 성공률. 시드별 선. 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분.
图:学习曲线
运行 决策数 学习时间 物理步数/秒(中位数) 学习过程中的最终成功率
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 后的物理机制是否相同。

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. 未实测

7. 下期预告

接下来是将低球和扩大工作空间的深度轴加入机器人模型中,并再次运行相同的评估。关于使用真实视频来对齐物理引擎和裁判的故事,请参考 第 8 篇。

TT 的总结。 本来为强化学习大幅超越基准线而高兴,结果发现大部分功劳归功于无需学习的新规划器。只有把“学习到的部分”和“设计改变的部分”分开测量,才能看出真正的实力!

参考资料

所有链接均已于 2026-10-18 确认可正常访问。

登录后即可点赞

评论

还没有评论。

登录后即可发表评论