状态:草稿(2026-10-18),实际测量。 本文中的数字是在一台笔记本电脑(Apple M1 Max, macOS 26.5)上使用 Python 3.9.6 和 numpy 2.0.2 直接计算得出的值。时间是 7 次重复计算的中位数,第一次运行作为预热被舍弃。原始数据和代码位于工作目录
measure/robot-arm-basics/(m01_budget.py,m01b_fast.py,out/m01_budget.json)中。没有一个数值是在实际机器人硬件上测得的(硬件未实测)。球的初始状态采用了 DeepMind 的公开数据集(CC-BY 4.0),乒乓球规格通过 ITTF Statutes 2026 原文进行了确认。所有参考资料均于 2026-10-18 查阅。编写规则:实测数据为基础,无法测量的标注为「未实测」,未能确认的标注为「未确认」。
目录
1. 直觉:必须在 0.6 秒内完成的七件事
人在对方球拍击球的瞬间就已经转动了身体。眼睛追踪着球,猜测它会在哪里弹起,然后将手臂向后引并挥拍。所有这一切都在不到一秒的时间内发生,并且大多数过程都是在无意识中进行的。
机器人必须通过一项项计算来解开这个过程。本系列将该计算过程分为七个步骤。
| 步骤 | 做的事情 | 涉及的篇章 |
|---|---|---|
| 1 感知(perception) | 从相机图像中寻找球并获取三维位置 | 第 2 篇(坐标转换) |
| 2 状态估计(state estimation) | 从带有噪声的位置序列中估计位置和速度 | 第 6 篇(卡尔曼滤波) |
| 3 飞行预测 | 利用重力、阻力、马格努斯力和反弹计算球的未来轨迹 | 第 6 篇 |
| 4 击球决策 | 决定何时何地击球、球拍的速度和拍面方向 | 第 7 篇 |
| 5 逆运动学(inverse kinematics) | 将球拍姿态转换为关节角度 | 第 3、4、5 篇 |
| 6 关节轨迹(trajectory) | 创建从当前姿态到击球姿态及速度的时间函数 | 第 8 篇 |
| 7 低层控制(low-level control) | 通过电机电流实际跟随该轨迹 | 第 9 篇 |
第 10 篇将结合乒乓球机器人论文,对比这些步骤中哪些应该通过方程求解,哪些应该交由学习算法处理。
本系列是将乒乓球机器人做成 开源硬件的准备过程。因此,每一个数字的编写都旨在引出「应该购买什么零件」。例如:关节速度上限为多少时球拍能达到多少 m/s(第 5 篇),球拍角度偏离 1° 会使球偏离多少厘米(第 7 篇),控制周期为 200 Hz 时会出现什么崩塌(第 9 篇)等。
2. 图示:七个步骤与我们代码的计算时间
- 右侧的数字是本系列各篇中测得的计算时间。由于这是用纯 Python 和 numpy 编写的教学代码,在实际机器人上可以大大缩短,但移植到 C++ 后能快几倍并未进行测量(未实测)。
- 橙色的两格(飞行预测、击球决策)负担最重。因为这两者都需要对球的轨迹进行数千步的积分。其余步骤都在微秒量级。
- 最后一步中的两个数字不是计算时间,而是重复周期。位置循环 1 kHz 是本系列的仿真设置,而电流循环 30 kHz 是开源电机控制器 moteus 文档中记载的默认开关频率(moteus theory.md).
3. 计算:球要多久才能飞到
时间预算的起点是球的飞行时间。为了进行直接测量,我们准备了两个东西。
球的初始状态。 Google DeepMind 公开的 competitive_robot_table_tennis 数据集包含 15,792 个由人或机器人击球 之后瞬间的球位置、速度和角速度(13,088 个拉力球,2,704 个发球)。该数据用于 D'Ambrosio 等人 2024 年的论文(arXiv:2408.03906)的训练,并以 CC-BY 4.0 授权发布。坐标系以乒乓球台顶面中心为原点,x 为宽度,y 为长度,z 为高度。本系列全篇均使用相同的坐标系。机器人站在 y < 0 的一侧。
飞行模型。 使用将在第 6 篇中详细讨论的运动方程,以 1 ms 的时间间隔进行 RK4 积分。
m · dv/dt = m·g − ½ ρ C_D A |v| v + ½ ρ A r C_M (ω × v)
중력 항력(drag) Magnus 힘
탁구대에 닿으면: 법선 속도에 반발 계수 e, 접선 방향은 쿨롱 마찰 μ
代码很简短。从数据集中挑选出朝向机器人飞来的球进行模拟,并记录球在机器人侧球台上弹起一次后穿过多个「击球平面」的时间。
incoming = [s for s in rallies + serves if s["vel_y"] < 0] # 로봇(y<0) 쪽으로 오는 공 14,703개
for s in incoming:
rec = fly(p, v, w, dt=1e-3, stop=lambda t, p, v, nb: p[1] < -2.2 or nb >= 2)
# 첫 바운스가 로봇 쪽 탁구대 안이면 유효. 이후 y = -1.37, -1.6, -1.9 를 지나는 시각·높이·속력을 기록
结果如下。在 14,703 个球中,有 11,590 个正确落在了机器人侧的球台上(其余为网球或出界),其中飞到底线(y = −1.37 m)的球有 10,618 个。
| 事件 | 第 5 百分位 | 中位数 | 第 95 百分位 |
|---|---|---|---|
| 击球后球速 (m/s) | 3.89 | 5.46 | 7.62 |
| 击球后旋转 (rad/s) | 9 | 49 | 100 |
| 至机器人侧反弹(秒) | 0.317 | 0.449 | 0.621 |
| 反弹后至顶点(秒) | 0.511 | 0.678 | 0.904 |
| 顶点高度(台面上方,m) | 0.20 | 0.30 | 0.45 |
| 通过底线 y = −1.37(秒) | 0.474 | 0.654 | 0.951 |
| 通过底线后 23 cm,y = −1.6(秒) | 0.538 | 0.745 | 1.082 |
| 通过底线时球速 (m/s) | 2.07 | 2.88 | 4.15 |
| 通过底线时高度(台面上方,m) | 0.06 | 0.24 | 0.38 |
计算时间为:模拟全部 14,703 个球耗时 130 秒,平均每个球约 9 ms。
如果是更快的球
本数据集中的球并不快。同一篇论文的附录将超过 7 m/s 的球归类为「快」,而上表中的第 95 百分位为 7.6 m/s。随着竞技水平的提高,球速会变快,因此我们进行了单独计算。在对方底线上方 45 cm 处沿 −y 方向以速度 v 击球,赋予 50 rad/s 的上旋,然后通过二分法调整上下速度,使其落在机器人侧的 y = −0.7 m 处(m01b_fast.py). 五种情况下均能过网。
| 击打速度 (m/s) | 至反弹(秒) | 通过底线(秒) |
|---|---|---|
| 6 | 0.452 | 0.682 |
| 8 | 0.338 | 0.496 |
| 12 | 0.226 | 0.321 |
| 16 | 0.170 | 0.238 |
| 20 | 0.136 | 0.190 |
Büchler 等人(2022)的气动肌肉机器人在扣球任务中报告称其击球速度平均约为 12 m/s(arXiv:2006.05935 v1). 要接住这种速度的球,预算为 0.32 秒。仅为数据集中心值的一半。
4. 按步骤划分时间
我们将 0.65 秒按步骤进行划分。重要的一点是,这些事情并非按顺序发生,而是重叠发生的。在观察球的同时,手臂已经在向准备姿势移动,并且每当有新帧输入时,预测就会被修正。
| 区段 | 花费时间 | 依据 |
|---|---|---|
| 观察球的时间 | 0.1~0.3秒 | 第 6 篇实测:仅观察前 0.1 秒进行预测时,击球面位置误差中位数为 7.0 cm(阻力模型);观察 0.3 秒时为 4.8 cm |
| 单帧相机画面 | 8 ms (125 fps) | D'Ambrosio 等人 2023 年的相机设置(arXiv:2309.03315) |
| 系统延迟 | 球观测 40 ms,手臂动作 71 ms | 同一论文表 I(平均值)。2024 年论文将其总结为「系统延迟约 100 ms」 |
| 我们的计算(预测 + 击球决策 + IK + 轨迹) | 约 25 ms | 各篇实测值的总和:11 + 14 + 0.06 + 0.007 ms |
| 手臂到达击球姿态的时间 | 0.05~0.10秒 | 第 8 篇实测:通过 0.6 rad 且达到 10 rad/s 的五次多项式轨迹,在加速度极限 300~600 rad/s² 下为 0.062~0.082 秒 |
| 剩余裕度 | 其余部分 | 基于数据集中心值 0.65 秒约为 0.2 秒,若是 12 m/s 的球(0.32 秒)则几乎没有 |
从表中可以看出两点。
- 计算时间并非瓶颈。 即使使用教学用的 Python,也只需 25 ms。瓶颈在于需要观察足够长的时间才能使预测准确,以及相机、通信和控制器中累积的延迟。Google 的系统仅观测延迟就达到了 40 ms。
- 观察时间和运动时间会互相挤占。 观察时间越长,预测越好,但手臂运动的时间就越少。因此,实际系统从预测还很粗略时就开始将手臂引导至大致的准备姿势,并随着预测的不断完善而修改目标(第 8 篇的轨迹重规划)。
5. 本系列的通用模型与常量
所有篇章均使用相同的常量。对通过查阅原文确认的值与假设进行区分记录。
| 量 | 值 | 出处与条件 |
|---|---|---|
| 球质量与直径 | 2.7 g, 40 mm | ITTF Statutes 2026, 2.3.1·2.3.2 |
| 球台 | 2.74 × 1.525 m, 高度 76 cm | 同上文档 2.1.1 |
| 网高 | 15.25 cm | 同上文档 2.2.3 |
| 球台反弹系数 | e = 0.876 | 将 2.1.3 中的「从 30 cm 落下约为 23 cm」在无空气阻力下换算的值。第 6 篇将再次讨论 |
| 球台摩擦系数 | μ = 0.25 | Nakashima 等人 2010 年的滑动摩擦测量值 |
| 阻力系数 | C_D = 0.47 | 调整为与同一项目的 MuJoCo 仿真器中测得的有效值 0.471 相匹配。文献范围 0.37~0.55(Sony AI 2026 表 I) |
| 马格努斯系数 | C_M = 0.6(每单位质量 3.4×10⁻³) | 仿真器端笔记从 Tebbe 等人 2020 处搬运的值(原文未确认)。各文献差异超过 3 倍(第 6 篇) |
| 球拍反弹系数 | e_r = 0.8 | 介于文献值 0.788(Koç 等人 2018)与 0.81(Nakashima 等人 2010)之间 |
坐标系、质量、直径和球台规格与同一项目中正在制作的 MuJoCo 乒乓球仿真器相同。由于仿真器以 DeepMind 数据集笔记本的 MJCF 作为起点,因此可以直接将本文的球状态放入其中进行结果对照。
6. 局限性
- 飞行模型假设旋转在飞行过程中不会衰减。在 0.5 秒左右的飞行中,旋转衰减究竟有多大并未进行测量(未实测)。
- 数据集中的球是混合了人类和机器人的业余水平拉力球。未能查阅到运动员水平的球速分布的原始资料(未确认)。
- 「穿过底线的时间」只是机器人可以击球时间的代表值。实际击球点取决于机器人的工作空间和策略。 Koç 等人 (2018) 指出,固定的虚拟击球平面 (virtual hitting plane) 会不必要地限制轨迹,并同时优化了击球时间和击球点。 本系列简单地将 y = −1.6 m 平面作为基本击球面。
- 延迟数字是 Google 系统的测量值,而我们将要制造的硬件的延迟尚未测量。
7. 总结
- 对手击出的球根据数据集的中位数为 0.65 秒,如果是快球则在 0.2~0.3 秒后到达机器人面前。
- 计算很快。真正耗时的是「充分观察」、「延迟」以及「移动手臂」。
- 因此,在选择硬件时,首先要看的是相机帧率、延迟以及关节的加速度极限。从下一篇开始,我们将这些数字 逐一串联到计算中。
TT 的一句话。 在球飞来的 0.6 秒内,机器人要做七件事。计算很快就能完成,但真正让人头疼的是,观察球的时间越长,留给移动手臂的时间 就越少!
参考资料
所有资料均于 2026-10-18 查阅。
- ITTF, Statutes 2026, 第 2 章 The Laws of Table Tennis (2.1.1, 2.1.3, 2.2.3, 2.3.1, 2.3.2)。
- Google DeepMind, competitive_robot_table_tennis 初始球状态数据集,CC-BY 4.0。
- D'Ambrosio 等人, Achieving Human Level Competitive Robot Table Tennis, arXiv:2408.03906(ICRA 2025)。
- D'Ambrosio 等人, Robotic Table Tennis: A Case Study into a High Speed Learning System, arXiv:2309.03315(RSS 2023), 表 I。
- Büchler 等人, Learning to Play Table Tennis From Scratch using Muscular Robots, arXiv:2006.05935 v1。
- Koç, Maeda, Peters, Online optimal trajectory generation for robot table tennis, Robotics and Autonomous Systems 105 (2018), 作者公开版.
- Nakashima 等人, Modeling of Rebound Phenomenon of a Rigid Ball with Friction and Elastic Effects, ACC 2010, 机构存储库.
- Conti 等人 (Sony AI), Physics Models for Sim-to-Real Transfer in Professional-Level Robot Table Tennis, arXiv:2606.28805, 表 I。
- mjbots, moteus docs/reference/theory.md.