状态:草案(2026-10-18),计算与调研。 硬件尚未购买或制造。本文中的数字分三类。 计算是通过我们自己的脚本(
flight_window.py,axis_budget.py)直接得出的数值,输入为 DeepMind 公布的数据中的初始球状态。 物理模型并非 MuJoCo,而是简易模型(包含阻力、马格努斯效应、冲量边界),并使用两套系数(A:包含马格努斯效应,B:不包含)运行,以范围形式记录。 调研是截至 2026-10-18 通过打开官方销售商、论文和代码库确认的数值,价格为当天官方销售商显示的价格。 预估是有依据但未经确认的数值,并已如此标注。 原始数据位于工作目录tt-robot/hardware.md和tt-robot/hw/中。
目录
- 1. 直觉:等待轴和击打轴的分工不同
- 2. 球给予的时间:对手击球后 1 秒内的事情
- 3. 位置轴可以比想象中更慢
- 4. 击打轴:为什么低成本开源机械臂很慢
- 5. 结构:皮带导轨 + 挥拍轴
- 6. 统一使用 moteus 的原因
- 7. 眼睛:相机 fps 与延迟
- 8. 成本(含预估)
- 9. 第一阶段原型规格
- 10. 许可证:不附加 NC 条款的原因
- 11. 局限性
- 12. 下期预告
- 参考
1. 直觉:等待轴和击打轴的分工不同
如果把乒乓球运动员的身体分为两部分,情况是这样的:双脚 提前移动到位等待,而手臂在球到来时 短促而快速地挥动 。 即使脚步稍慢,只要出发得早也不会迟。手臂需要很高的瞬时速度,但运动距离很短。
机器人也是如此。覆盖球台宽度的 位置轴关键在于及早出发,而产生球拍速度的 挥拍轴关键在于瞬时加速度。 如果让一只手臂承担所有工作,就会变得昂贵且沉重。本文通过数字来权衡将这两项工作分离开来能带来多大的成本降低和结构简化。
2. 球给予的时间:对手击球后 1 秒内的事情
在 DeepMind 数据的初始球状态(13,088 个多拍回合,2,704 个发球)中,我们用简易物理模型模拟了飞向机器人方向的 14,703 个球。 在机器人一侧球台上弹跳一次的球,在系数 A 下为 11,723 个,在系数 B 下为 10,431 个(发球的第一跳在对方一侧,因此大多很快)。
| 项目(第 5 / 50 / 95 百分位数) | 系数 A | 系数 B |
|---|---|---|
| 从对手击球到我方一侧第一次弹跳 | 0.317 / 0.450 / 0.621 s | 0.323 / 0.462 / 0.629 s |
| 顶点高度(球台上) | 0.214 / 0.309 / 0.457 m | 0.234 / 0.337 / 0.498 m |
| 到达击球面(底线后方 23 cm,y = −1.6 m) | 0.537 / 0.726 / 1.003 s | 0.528 / 0.721 / 1.011 s |
| 到达击球面时的球速 | 2.15 / 2.86 / 3.83 m/s | 2.09 / 2.84 / 3.93 m/s |
球到达的速度比想象中要慢,因为弹跳和空气阻力削减了速度。另一方面,由于短球较多,击球面越往后退,能在第二次弹跳前击打的球就越少。
| 击球面 | 可击打的球(系数 A) | (系数 B) |
|---|---|---|
| 底线 y = −1.37 m | 89.7% | 93.0% |
| y = −1.6 m | 76.8% | 85.6% |
| y = −1.9 m | 49.1% | 68.6% |
3. 位置轴可以比想象中更慢
假设对于每个球,机器人从原位(x = 0,高度 0.25 m)出发,仅在“决策时间”之后开始移动,并且每个轴都按照梯形速度曲线运动。 我们认为拍面半径 7.5 cm 的范围内即使少移动一点也能击中。决策时间是相机延迟与预测稳定时间之和。
| 轴规格(最高速度·加速度) | 决策 0.1 s | 决策 0.2 s | 决策 0.3 s |
|---|---|---|---|
| 1.5 m/s·10 m/s² | 92.0–92.5% | 81.0–82.3% | 65.4–67.0% |
| 2 m/s·20 m/s² | 99.0–99.2% | 95.3–95.6% | 85.0–86.0% |
| 3 m/s·20 m/s² | 99.8–99.9% | 97.7–98.3% | 89.3–89.9% |
| 3 m/s·40 m/s² | 100% | 99.5–99.7% | 96.2–96.9% |
| 5 m/s·40 m/s² | 100% | 99.8% | 97.7–98.3% |
(范围为系数 B 与 A 的数值。基于在击球面 y = −1.6 m 处触及的 9,025 个 A 类球和 8,930 个 B 类球,横向和高度两个轴都必须按时触及才算成功。)
决策时间每延迟 0.1 s,维持相同比例所需的轴规格就会显著上升。在决策时间为 0.2 s 时,对于半数的球,横向轴只需提供 3.7 m/s² 的加速度即可,但若要覆盖 95% 的球,则需要 14.4 m/s²,此时所需的最高速度为 2.92 m/s(系数 A)。 把钱花在减少相机延迟上,要比增大电机更划算。
下图展示了对 5 个球进行相同计算的动态演示。点击图片,在球飞来的过程中,两种规格的滑块会在 0.2 s 时出发并前往击打点。
图中的 5 个球是通过相同的简易物理模型模拟由 seed 0 抽取的 600 个球后,挑选出横向位置分布均匀的球。在最边缘的两个球(横向 −0.74 m,+0.90 m)处,1.5 m/s·10 m/s² 的滑块分别在 0.79 s 和 0.90 s 到达,慢于球本身(0.74 s,0.81 s);而 3 m/s·40 m/s² 的滑块则分别在 0.50 s 和 0.55 s 到达。为了制图,我们将计算移植到了标准库中,600 个样本的到达比例(在 0.2 s 决策时间下为 82.7%、95.2%、99.2%)与原计算在 1%p 的误差范围内吻合。图中仅绘制了横向轴。
4. 击打轴:为什么低成本开源机械臂很慢
如果看作是沿球拍法线方向的一维碰撞,球的出射速度为 v_out = e·v_in + (1+e)·v_r 。假设来球的中位速度为 2.8 m/s,
球拍恢复系数 e 为 0.6–0.85(估计值),则所需的球拍速度如下:
| 目标球速 | e = 0.85 | e = 0.6 |
|---|---|---|
| 5 m/s(研究用气动机械臂的普通回球) | 1.4 m/s | 2.1 m/s |
| 8 m/s | 3.0 m/s | 3.9 m/s |
| 12 m/s(同款机械臂扣球) | 5.2 m/s | 6.4 m/s |
回球设定为球拍 1.5–4 m/s,扣球设定为 5–7 m/s。如果用这个要求来换算末端速度,低端机械臂是达不到的。
- SO-101: 舵机 STS3215 的空载速度在 12 V 版本下为 45 rpm,在 7.4 V 版本下为 52 rpm。结合工作半径和球拍换算,球拍末端上限为 2.6–3.0 m/s,负载情况下约为 1.7 m/s(估计值)。
- PAROL6, AR4(步进机械臂): 低于 1 m/s(估计值)。AR4 还有禁止转售的专有许可证。
- OpenArm 2.0: 规格上足够(额定速度约 7.9 m/s,估计值),但双臂价格高达 6500 美元,而且要覆盖球桌宽度无论如何都需要单独的滑轨。
相反,如果用长度 0.30 m 的机械臂制作一个挥拍轴,球拍 1.5–7 m/s 对应的角速度为 5–23 rad/s(48–220 rpm)。通过无刷电机直驱或 1:4 减速即可轻松实现。
5. 结构:皮带滑轨 + 挥拍轴
| 轴 | 阶段 | 运动 | 电机 / 控制器 | 目标 |
|---|---|---|---|---|
| X 横向滑轨 | 1 | 直线,行程 1.7–1.8 m(滑轨 2.2–2.4 m) | ODrive D6374 150KV / moteus-n1,HTD5M 钢丝皮带 | 3 m/s,30–40 m/s²,移动质量 2 kg 以下 |
| S 挥拍轴 | 1 | 绕平行于横轴的轴旋转,0.25–0.30 m 的机械臂画出圆弧 | mjbots mj5208 / moteus r4.11,1:4 皮带 | 球拍末端 1.5–7 m/s,±120° |
| Y 纵深(或 Z 高度) | 2 | 直线,行程 0.4–0.6 m | D6374 / moteus-n1 | 2–3 m/s,20–30 m/s² |
| 手腕两轴 | 3 | 拍面方向 | mj5208 / moteus-c1 | ±45–60° |
第 1 阶段的挥拍臂呈圆弧状,因此只要掌握好时机,就能同时覆盖高度(桌面上方 0.03–0.53 m)和纵深,球拍速度也由该轴提供。 这就相当于从 DeepMind 机器人(6 轴工业机械臂 + 2 轴滑轨)中只保留了“单个肩膀”。之所以用第 2 阶段轴优先考虑纵深,是因为第 2 节中的表格。仅仅将击球面向后退 23 cm,能击中的球就会减少 7–13%p。
还计算了轴的尺寸(转子惯量为估计值)。
- 横轴: 如果移动质量为 2 kg,加速度为 40 m/s²,摩擦力为 20 N,则所需力为 100 N,加上转子惯量后约为 110 N。使用 20T 带轮(半径 15.9 mm)和 D6374, 需要 1.75 Nm 的扭矩和约 32 A 的电流,这相当于峰值 4.96 Nm 的 35%。对于同样的工作,mj5208(峰值 1.7 Nm)是不够的。
- 挥拍轴: 假设球拍和手臂的惯量约为 0.02 kg·m²(估计值),在 0.1 s 内达到 20 rad/s 需要 4 Nm。如果在 mj5208 上加装 1:4 减速,峰值可达 6.8 Nm。
6. 统一使用 moteus 的原因
| 控制器 | 连续 / 峰值电流 | 通信 | 硬件 / 固件许可证 | 价格 |
|---|---|---|---|---|
| moteus r4.11 | 无冷却 12 A,冷却 32 A / 100 A | CAN-FD | Apache-2.0 / Apache-2.0 | 94 美元 |
| moteus-n1 | 9 A, 26 A / 100 A | CAN-FD, RS422 | Apache-2.0 / Apache-2.0 | 149 美元 |
| moteus-c1 | 5 A, 14 A / 20 A | CAN-FD | Apache-2.0 / Apache-2.0 | 69 美元 |
| ODrive S1 / Pro | 20–40 A / 80–100 A | CAN 2.0B | 闭源 / 闭源 | 149 / 229 美元 |
| SimpleFOC Mini | 最大 8 A | 无 | MIT / MIT | 12 欧元,缺货 |
- 硬件和固件全都完全开源,且至今仍在更新。 调查时,moteus 仓库的最后一次 push 是 2026-09-27。ODrive 从 v3.6 开始、Tinymovr 从 v3.1 开始设计已经封闭。 如果发生同样的事情,我们的设计将无法被他人复现。
- 通过单个 CAN-FD 总线将所有轴连接在一起。 位置限制、电流限制、看门狗等安全设置将被整合到一个系统中。
- SimpleFOC 适用于低电流手腕和教育场景,但不适合横轴大电流(30–50 A)。
7. 眼睛:相机 fps 与延迟
当前乒乓球计分板功能所使用的相机是 30 fps。作为机器人的眼睛,这还远远不够。
- 时速 3 m/s 的球在一帧内移动 10 cm,8 m/s 的球移动 27 cm。
- 如果 USB3 相机在缓冲区中缓存了 3 到 4 帧,在 30 fps 下会产生 100–133 ms 的延迟(基于相机制造商常见问题解答)。仅这一点就超过了 0.2 秒决策预算的一半。 如果同样的 3 到 4 帧在 200 fps 下,则是 15–20 ms(计算得出)。
- 为了查看击球点的三维位置和旋转,需要两个或更多同步相机(立体视觉)。DeepMind 使用了两个 125 Hz 的相机。
| 相机 | 传感器 | 最高 fps | 接口 | 价格 |
|---|---|---|---|---|
| Basler dart daA720-520uc | IMX287 | 523(720×540) | USB3 | 245 美元 |
| FLIR BFS-U3-04S2M-CS | IMX287 | 522 | USB3 | 541.50 美元 |
| OAK-D S2(立体视觉一体式) | OV9282 | 255 (400p) | USB | 329 美元 |
| Raspberry Pi Global Shutter | IMX296 | 60 | CSI | 50 美元 |
第一阶段之后,建议以 200–250 fps 的速度使用两台 Basler dart 相机。目前尚未确认是否可以通过硬件触发同步这两台相机(未确认)。 总延迟(从照片到电机指令)的目标设定在 50 ms 以下,击球时间误差约为 ±10 ms(球 3 m/s × 10 ms = 3 cm,小于球拍半径,估算值)。
8. 成本(含估算)
| 组件 | 内容 | 金额 |
|---|---|---|
| 驱动(官方价) | D6374 119,moteus-n1 149,mj5208 74,moteus r4.11 94,CAN-FD 适配器 39 美元 | 475 美元 |
| 相机(官方价) | 2台 Basler dart | 490 美元 |
| 机械结构(估算) | 线性导轨、框架、皮带轮、滑块与摆臂、球拍 | 410–1,150 美元 |
| 电源与安全(估算) | 36–44 V 电源及再生制动对策、急停开关·接触器·限位开关、防护网 | 300–750 美元 |
| 镜头·线缆·三脚架(估算) | 130–300 美元 | |
| 发球机与球(估算) | 开源设计 AIMY 一台,练习球 100 个 | 530–960 美元 |
| 第一阶段总计 | 约 2,300–4,100 美元 | |
| 第二、三阶段追加(含估算) | 深度轴、手腕两轴 | 900–1,600 美元 |
| 总体 | 约 3,200–5,800 美元 |
如果将相机更换为两台低成本 USB2 相机,可减少 350–450 美元;如果由人手抛球代替发球机,可减少 500–900 美元。相比之下,仅 OpenArm 双臂就需要 6,500 美元。
9. 第一阶段原型规格
- 横向导轨 1 轴:行程 1.7–1.8 m,速度 3 m/s,加速度 30–40 m/s²,移动质量 2 kg 以下
- 摆动 1 轴:手臂 0.25–0.30 m,球拍尖端最大 5 m/s,旋转轴位于球台上方约 0.25–0.30 m 处、边缘线上方
- 眼睛:全局快门 200 fps 以上立体视觉,决策时间 0.2 s 以下
- 球:通过开源设计发球机(AIMY)实现 3–8 m/s 的速度,从低旋转开始
- 达标标准:每种发球机设置击打 100 球,接触率 80% 以上,对方回球率 50% 以上。此目标值尚无依据。结果将与研究用气动机械臂的回球率(75–77%)并列记录。
- 安全:2 kg 的滑块以 3 m/s 运动时,动能为 9 J。在所调查的控制器中,没有产品标榜官方认证的 STO(Safe Torque Off),因此急停通过外部电路(蘑菇头按钮 → 直流接触器)实现, 并在控制器中叠加位置、电流、速度限制以及看门狗。操作人员位于防护网后方。
10. 许可证:不附加 NC 的原因
TT Lab 是一个非营利项目,但我们公开的成果不会附加非营利(NC)条件。开源硬件协会(OSHWA)的 1.0 定义 禁止按用途进行歧视(第 8 条),并规定不得阻止将其用于商业用途。如果附加 NC,则无法被认可为开源硬件。 “我们是非营利”这一事实仅意味着可以使用他人的 NC 材料,并不意味着要把我们的成果锁死在 NC 中。
| 产出物 | 许可证 | 原因 |
|---|---|---|
| 机械 CAD(可编辑原版)、接线图、PCB | CERN-OHL-S-2.0 | 通过强交互性确保改进版本也得以公开。OpenArm 也做了相同的选择。 |
| 固件、控制、视觉代码 | Apache-2.0 | 与 moteus、DeepMind 公开代码一致,便于混合使用。 |
| 文档、照片、测量数据 | CC BY-SA 4.0 | 与硬件的 S(交互性)保持一致。 |
同时承担所引入材料的义务。发球机 AIMY 的 CAD 和代码采用 BSD-3(保留版权声明),AIMY 旋转轨迹数据采用 DL-DE-BY-2.0(署名), DeepMind 球状态采用 CC BY 4.0(署名)。对于没有许可证的公开仓库,不复制文件,仅参考其构思。
本文所用数据的署名。 第 2–3 节的计算使用了 Google DeepMind 的 competitive_robot_table_tennis 仓库中公开的初始球状态(rallies.json, serves.json, © 2025 Google LLC)作为 输入。该数据采用 CC BY 4.0,同一仓库的代码采用 Apache-2.0。我们筛选出飞向机器人方向的球(vel_y < 0)并通过简易物理模型进行模拟, 数据本身不重新分发,仅刊载计算结果。
11. 局限性
- 第 2–3 节采用的是简易物理模型。拖拽力、马格努斯效应、球台反弹和摩擦力全都是假设,因此使用两套系数进行运算并以范围形式记录。 第 2 篇中将通过 MuJoCo 测量进行再次确认。
- 结果主要针对除发球外的拉力球,且 DeepMind 的数据是由从初学者到高级水平的人类击打的球。其中不包含职业选手的扣球分布。
- 球拍反弹系数、电机的转子惯量、导轨·框架·电源的价格均为估算值。两台相机的同步、CAN-FD 多轴循环的实际周期、从相机到电机的实际延迟尚未得到确认。
12. 进入下一篇
下一步是在 MuJoCo 中首先构建该配置。将导轨和摆动轴连接到球模型上,通过模拟器决定手臂长度、旋转轴高度以及第二阶段轴(深度对高度)。 机器人手臂的坐标系与逆运动学等基础知识将在「乒乓球机械臂基础」系列(目录)中一同探讨。 作为该系列的下一篇文章, 第 4 篇将暂时离开乒乓球,探讨以相同方式在吊舱中飞行 PX4 无人机的实验。
TT 一言: 脚步出发得早就可以慢一点,手臂短而快地挥舞即可。机器人如果也能这样分工,就能比昂贵单臂花更少钱制造出来。不过眼睛必须要快!
参考
所有链接均已于 2026-10-18 验证可正常打开。其中一个商家页面阻止了自动访问,故本次未能重新打开,其价格采用同一天调查文档中的数值。
- DeepMind 公开数据: https://github.com/google-deepmind/competitive_robot_table_tennis(初始球状态 CC BY 4.0,代码 Apache-2.0),论文: https://arxiv.org/abs/2408.03906, https://arxiv.org/abs/2309.03315
- 气动肌肉臂(回球率·扣球速度): https://arxiv.org/abs/2006.05935,PAMY2 设计: https://github.com/intelligent-soft-robots/pamy2
- 轻量化 5 自由度机械臂: https://arxiv.org/abs/2505.01617
- 发球机 AIMY: https://arxiv.org/abs/2210.06048,CAD: https://github.com/intelligent-soft-robots/ball_launcher_hardware
- moteus: https://github.com/mjbots/moteus, https://mjbots.com/products/moteus-r4-11, https://mjbots.com/products/mj5208
- SO-101: https://github.com/TheRobotStudio/SO-ARM100,OpenArm 2.0 电机: https://docs.openarm.dev/hardware/openarm-2.0/motor
- 相机:Basler daA720-520uc https://www.baslerweb.com/en-us/shop/daa720-520uc-cs-mount/(本次确认时自动访问受阻),相机延迟常见问题解答 https://support.stereolabs.com/hc/en-us/articles/206918319-What-is-the-latency-of-the-ZED-camera
- 许可证:OSHWA 开源硬件定义 1.0 https://www.oshwa.org/definition/,CERN-OHL v2 https://cern-ohl.web.cern.ch/,CC BY 4.0 https://creativecommons.org/licenses/by/4.0/