TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

用人形机器人上半身打乒乓球:将 Unitree G1 放入模拟器并施加人类速度限制的基准测试

状态:草稿(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. 为什么选择人形

从第 5 篇到第 9 篇,机器人采用的是固定在球桌边缘的 2 轴龙门架和 2 轴手腕。这是接球最简单的形态。然而,本实验室的下一个目标是 让机器人互相对战以打造更强的机器人,为了让比赛看起来更像人类的乒乓球,机器人也必须长得像人。

因此,我们选择了广泛使用的人形机器人 Unitree G1 的上半身。我们在下方用一个左右滑动的轴代替了双腿,用来模拟乒乓球运动员侧移迎球的动作。

我们还设定了一个额外的条件: 机器人的移动速度不得超过人类。 机器人的关节速度可以比人类快好几倍,但以这种速度获胜的机器人并不是「像人一样打球的机器人」。我们将关节角速度、左右移动速度、加速度以及球拍速度限制在文献中人类的上限之内,并取机器人限制和人类限制中较小的一个。

2. 视频抢先看

2.1 从侧后方看单个球

视频:G1 上半身回击第 53 号测试球的场景(4倍慢速)

机器人通过左右轴移动 0.37 m,在 0.789 s 时回击了从对方底线飞过来的球。击球瞬间的球拍速度为 1.27 m/s。橙色点代表球走过的轨迹。可以看到躯干跟随球转动,肘部和手腕调整球拍面的姿态。

2.2 从上方看同一个球

视频:从上方观察同一个球的场景,可以清晰看到左右轴的移动(4倍慢速)

从上方可以清楚地看到机器人提前移动到了球将要到达的位置。这种「提前移动」是本文中产生最大差异的动作(第 4 节)。

2.3 四个不同的球

视频:连续接住四个不同测试球的场景,从对方视角观看(2倍慢速)

依次展示了左右轴向右(+)大幅移动的球、向左(-)移动 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

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%

可以看出三点。

  1. 左右轴带来了最大的差异。 如果去掉左右轴,在真实状态下「无法触及的球」从 4.6% 增加到 23.8%,成功率从 91.4% 下降到 66.4%。无论手臂有多长,都无法在原地覆盖 1.525 m 宽的球桌。这与人类侧移的原因相同。
  2. 人类限制的代价比想象中要小。 对比施加限制前后的相同球,默认配置下漏掉的球占 2.0–8.2%。如果锁定腰部,这一比例会扩大到 7.6–14.4%。这是因为必须仅靠手臂进行快速挥拍。
  3. 延迟较大时,表现弱于龙门架。 在 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 的场景。对战环境的初次亮相

未实测与局限性

登录后即可点赞

评论

还没有评论。

登录后即可发表评论