状态:草稿(2026-10-18),实测。屏幕和文中的数字均为模拟器内部的值,相机周期、延迟和噪声均为假设值。本文中的机器人使用未经训练的经典规划器进行移动。 评估条件与第 7 篇相同,采用 500 个相同的测试球(seed 0)以及三种条件(真实状态、120 Hz·30 ms 延迟、120 Hz·30 ms 延迟)。括号内为 95% 置信区间的半宽度。 机器人模型来自 MuJoCo Menagerie 的
unitree_g1(Unitree 官方g1_29dof_rev_1_0,BSD-3-Clause),原始文件未作修改。由于模型中没有关节速度限制,因此使用了 Unitree 官方的 URDF 值。 视频于 2026-10-18 在家庭实验室 Kubernetes 的一个 Mini PC 节点上以临时 Pod 渲染(仅 CPU,峰值内存 1.55 GiB)。版本为 MuJoCo 3.16.0、Python 3.12.15、numpy 2.5.4、Mesa 25.0.7 (OSMesa),编码使用 ffmpeg 9.0.2 (libx264)。
目录
- 1. 为什么选择人形
- 2. 视频抢先看
- 3. 机器人与规划器
- 4. 结果:500 个测试球
- 5. 左右轴的速度应有多快
- 6. 球拍挥动的速度能有多快
- 7. 在 GPU 上快速运行
- 8. 下一步:学习与机器人之间的比赛
- 未实测与局限性
1. 为什么选择人形
从第 5 篇到第 9 篇,机器人采用的是固定在球桌边缘的 2 轴龙门架和 2 轴手腕。这是接球最简单的形态。然而,本实验室的下一个目标是 让机器人互相对战以打造更强的机器人,为了让比赛看起来更像人类的乒乓球,机器人也必须长得像人。
因此,我们选择了广泛使用的人形机器人 Unitree G1 的上半身。我们在下方用一个左右滑动的轴代替了双腿,用来模拟乒乓球运动员侧移迎球的动作。
我们还设定了一个额外的条件: 机器人的移动速度不得超过人类。 机器人的关节速度可以比人类快好几倍,但以这种速度获胜的机器人并不是「像人一样打球的机器人」。我们将关节角速度、左右移动速度、加速度以及球拍速度限制在文献中人类的上限之内,并取机器人限制和人类限制中较小的一个。
2. 视频抢先看
2.1 从侧后方看单个球
机器人通过左右轴移动 0.37 m,在 0.789 s 时回击了从对方底线飞过来的球。击球瞬间的球拍速度为 1.27 m/s。橙色点代表球走过的轨迹。可以看到躯干跟随球转动,肘部和手腕调整球拍面的姿态。
2.2 从上方看同一个球
从上方可以清楚地看到机器人提前移动到了球将要到达的位置。这种「提前移动」是本文中产生最大差异的动作(第 4 节)。
2.3 四个不同的球
依次展示了左右轴向右(+)大幅移动的球、向左(-)移动 0.82 m 的球、中间的球以及弹跳较短的球。所有四个球都成功回击。这些球是从前 80 个成功回击的球中按左右轴移动幅度从大到小的顺序挑选的,挑选规则和结果由渲染脚本保存为文件。
3. 机器人与规划器
| 项目 | 值 |
|---|---|
| 手臂 | 7 自由度(肩 3、肘 1、腕 3) |
| 腰部 | 3 自由度(yaw、roll、pitch) |
| 左右轴 | 移动范围 ±0.9 m,速度 1.5 m/s,加速度 10 m/s² |
| 骨盆位置 | 底线后方 48 cm(扫描 28–68 cm 后选定,差异在样本误差范围内) |
| 质量 | 模型 33.3 kg(官方规格约 35 kg) |
| 规划器 | 与第 7 篇「混合标称」结构相同:球预测 → 确定击球时间·位置·拍面·速度 → 逆运动学 → 关节轨迹,无学习 |
规划器采用了与龙门架相同的球预测和击球决策,仅在最后一步针对 G1 的 11 个关节(包括左右轴)替换为逆运动学。重新规划时,我们设定为从上一个姿势出发,在训练球上的真实状态成功率从 88.5% 提高到了 94.0%。
3.1 人类限制
| 关节 | 机器人限制(URDF,rad/s) | 人类上限(rad/s) |
|---|---|---|
| 腰部 yaw | 32 | 10.1 |
| 腰部 roll·pitch | 37 | 10.1(代替躯干旋转值,估计值) |
| 肩膀 pitch / roll / yaw | 37 | 13.8 / 4.8 / 16.7 |
| 肘部 | 37 | 5.7 |
| 手腕 roll / pitch / yaw | 37 / 22 / 22 | 18.3 / 9.3 / 3.9 |
- 左右移动上限为 2.2 m/s,加速度上限为 10 m/s²。 我们未能找到健全乒乓球运动员的侧移测量值。因此,速度估计为残疾人乒乓球国家队重心左右速度范围(双向 4.35 m/s)的一半,加速度则借用了网球的测量值。
- 球拍速度上限为 19.6 m/s。 在整个评估过程中从未触发过。仅凭关节上限就能将球拍保持在人类最大速度以下。
- 上限值和来源已汇总到一个配置文件中。因触及限制而被截断的比例将在训练日志中单独统计。
4.结果:500 个测试球
| 配置 | 真实状态 | 120 Hz·30 ms | 120 Hz·100 ms |
|---|---|---|---|
| 7 自由度手臂 · 使用腰部 · 左右轴(默认) | 91.4% (±2.5) | 72.0% (±3.9) | 27.4% (±3.9) |
| 相同配置,无人类限制 | 92.4% | 74.4% | 27.2% |
| 7 自由度手臂 · 锁定腰部 · 左右轴 | 83.8% | 67.8% | 26.6% |
| 5 自由度手臂 · 使用腰部 · 左右轴 | 83.4% | 70.2% | 25.6% |
| 7 自由度手臂 · 使用腰部 · 无左右轴 | 66.4% | 60.4% | 26.6% |
| 5 自由度手臂 · 锁定腰部 · 无左右轴 | 40.4% | 31.6% | 12.8% |
| 龙门架经典基准(第 5 篇) | 61.6% | 59.2% | 26.6% |
| 龙门架混合标称(第 7 篇,规划结构相同) | 83.2% | 80.6% | 53.6% |
| 龙门架学习混合(第 7 篇,3 个种子) | 84.8% | 83.8% | 58.2% |
可以看出三点。
- 左右轴带来了最大的差异。 如果去掉左右轴,在真实状态下「无法触及的球」从 4.6% 增加到 23.8%,成功率从 91.4% 下降到 66.4%。无论手臂有多长,都无法在原地覆盖 1.525 m 宽的球桌。这与人类侧移的原因相同。
- 人类限制的代价比想象中要小。 对比施加限制前后的相同球,默认配置下漏掉的球占 2.0–8.2%。如果锁定腰部,这一比例会扩大到 7.6–14.4%。这是因为必须仅靠手臂进行快速挥拍。
- 延迟较大时,表现弱于龙门架。 在 100 ms 延迟下,默认配置的成功率为 27.4%,仅为相同结构龙门架(53.6%)的一半。在 500 个球中,有 45.4% 因「时机与预测」而失败(占失败总数的 63%)。沉重的躯干和左右轴无法跟上延迟的规划修正。这是通过学习最需要改进的地方。
4.1 按原因分类的失败情况
默认配置,应用人类限制,占 500 个球的比例。每个球只统计一个原因。
| 条件 | 无法触及 | 关节限制(机器人) | 关节限制(人类) | 姿态(拍面方向) | 时机与预测 | 失败总计 |
|---|---|---|---|---|---|---|
| 真实状态 | 4.6% | 0.4% | 2.4% | 0.0% | 1.2% | 8.6% |
| 120 Hz·30 ms | 4.0% | 1.2% | 10.6% | 0.0% | 12.2% | 28.0% |
| 120 Hz·100 ms | 10.6% | 1.4% | 15.2% | 0.0% | 45.4% | 72.6% |
在 30 ms 相机延迟下产生的失败中,有 38% 是因为「触及人类关节限制」。这种情况发生在为了追赶延迟获知的球时,需要比人类动得更快。人类选手也会漏掉这样的球。
5. 左右轴的速度应有多快
| 左右轴速度·加速度 | 真实状态成功率 |
|---|---|
| 1.0 m/s | 88.6% |
| 1.5–3.0 m/s | 91.4–92.4% |
| 3 m/s · 40 m/s² | 68.4% |
并非越快越好。当加速度达到 40 m/s²(约 4 g)时,躯干会剧烈晃动,手臂关节的扭矩无法承受其反作用力(扭矩饱和占控制周期的 35%)。处于人类范围(速度 ≤ 2.2 m/s,加速度 ≤ 10 m/s²)内的 1.5–2.0 m/s · 10 m/s² 属于最佳区间。
轴所搬运的质量包括 G1 全身以及球拍和支架(假设 5 kg),共计 38.5 kg。计算表明,要以 10 m/s² 的加速度推动它需要 385 N,而模拟器中测得的 95 分位值为 468 N,最大值为 520 N。如果卸下双腿、仅保留上半身,质量将降至 24.1 kg,所需力量将减少约 2/3。
6. 球拍挥动的速度能有多快
这是仅根据关节速度限制计算出的最大球拍速度(计划的击球姿态,拍面法线方向)。这是一个未计入通过扭矩加速至该速度所需时间的上限。
| 配置 | 机器人限制 | 人类限制 |
|---|---|---|
| 默认配置 | 中央 38.8 m/s | 中央 9.6 m/s(5–95%:5.5–18.9) |
| 5 自由度手臂 · 锁定腰部 | — | 中央 2.4–3.4 m/s |
回球所需的 1.5–4 m/s 在默认配置下几乎可以在所有姿态下实现。扣球所需的 5–7 m/s 在人类限制下,只有「7 自由度手臂·使用腰部」的配置才能在大多数姿态下实现。不过,目前规划器在击球瞬间的球拍速度中央值为 1.06 m/s。这相当于像挡球一样将其挡回去的水平。大力击球则是学习需要完成的任务。
7. 在 GPU 上快速运行
为了进行训练,必须同时运行大量球,因此我们也在 MuJoCo Warp (GPU) 中运行了相同的场景。与 CPU MuJoCo 对比 0.5 s 后发现,即使在机器人大幅运动的情况下,球位置的差异中央值为 5 µm,关节差异最大为 1.1×10⁻⁵ rad。
| 同时运行的世界数量 | 每秒物理步数 (RTX 4060) |
|---|---|
| 256 | 63 万 |
| 1,024 | 133 万 |
| 4,096 | 166 万 |
| 8,192 | 167 万 |
约为龙门架(657 万)的 1/4。这是因为关节较多且躯干较重,导致接触计算增加。由于只测量了一次,因此未验证其波动性。
8. 下一步:学习与机器人之间的比赛
- 学习。 我们针对 G1 准备了类似于第 7 篇的混合强化学习环境。观测为 68 维,动作为 8 维(在龙门架的 6 个动作上增加了左右轴的目标位置和到达时间)。训练计划通过 Kubernetes 的训练任务(Kubeflow TrainJob)运行,延期测试正在等待 GPU。
- 机器人之间的比赛。 我们在环境中加入了阵营(side)参数,以便在球台两侧放置机器人。比赛的计分与规则计划直接使用 TT Lab 记分牌所使用的裁判引擎。我们将同时测试通过自我对弈变强的机器人在固定评估球面前是否依然强劲,从而排查出“仅在对弈中强大”的过拟合现象。
未实测与局限性
- 目前还没有训练策略的结果。本文中所有成功率均为无训练规划器的数值。
- 未输入电机的转矩-转速曲线。第 6 节中的球拍速度为上限值。
- 由于未能找到人类关节的角加速度、健全乒乓球运动员的侧向移动速度以及乒乓球反应时间,因此未将其纳入,或者借用了其他项目的数据。
- 我们将骨盆固定在空间中。未涉及站立平衡的问题。
- 规划器的惩罚权重是通过观察评估球前 100 个决定的,因此可能存在少许选择偏差。