TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

是否可以用开源硬件打造一台乒乓球机器人:导轨、挥拍轴、相机与许可证

状态:草案(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 秒内的事情

在 DeepMind 数据的初始球状态(13,088 个多拍回合,2,704 个发球)中,我们用简易物理模型模拟了飞向机器人方向的 14,703 个球。 在机器人一侧球台上弹跳一次的球,在系数 A 下为 11,723 个,在系数 B 下为 10,431 个(发球的第一跳在对方一侧,因此大多很快)。

상대가 친 뒤 1초 안에 일어나는 일 막대는 공의 5–95% 범위, 굵은 눈금은 중앙값(계수 A, 간이 물리). 내 쪽 첫 바운드: 0.32–0.62 s, 중앙 0.45 s 타격면(y = −1.6 m) 도착: 0.54–1.00 s, 중앙 0.73 s 결정 시각 0.2 s 카메라 버퍼 3–4 프레임이 만드는 지연 30 fps: 100–133 ms 200 fps: 15–20 ms 0.0 0.2 0.4 0.6 0.8 1.0
图:对手击球后的第一次弹跳、到达击球面时间和相机缓冲区延迟
项目(第 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 类球,横向和高度两个轴都必须按时触及才算成功。)

결정이 늦을수록 가로 축이 빨라야 합니다 제때 닿는 공의 비율(%), 계수 A(마그누스 있음) 기준 60 70 80 90 100 0.1 s 0.2 s 0.3 s 결정 시각(상대가 친 뒤) 1.5 m/s·10 m/s² 2 m/s·20 m/s² 3 m/s·20 m/s² 3 m/s·40 m/s² 5 m/s·40 m/s² 3 m/s·40 m/s², 0.2 s: 99.7% 계수 B(마그누스 없음)와의 차이는 모든 칸에서 1.6%p 이하입니다.
图:根据决策时间和轴规格的到达比例

决策时间每延迟 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개를 차례로 보냅니다(3배 느리게). ▶ 누르면 재생 네트 타격면 y = −1.6 m 의 가로 레일 상대 쪽 1 2 3 4 5 공을 기다리는 가로 축 3 m/s·40 m/s² 1.5 m/s·10 m/s² 라켓 반지름 7.5 cm 두 축 모두 상대가 친 뒤 0.2 s(결정 시각)에 출발합니다. 공 1/5타격면 도착 0.89 s가로 위치 +0.13 m3 m/s: 0.27 s 제때1.5 m/s: 0.34 s 제때 공 2/5타격면 도착 0.70 s가로 위치 -0.38 m3 m/s: 0.38 s 제때1.5 m/s: 0.55 s 제때 공 3/5타격면 도착 0.96 s가로 위치 +0.58 m3 m/s: 0.44 s 제때1.5 m/s: 0.68 s 제때 공 4/5타격면 도착 0.74 s가로 위치 -0.74 m3 m/s: 0.50 s 제때1.5 m/s: 0.79 s 늦음 공 5/5타격면 도착 0.81 s가로 위치 +0.90 m3 m/s: 0.55 s 제때1.5 m/s: 0.90 s 늦음 공의 길은 DeepMind 공개 초기 상태(CC BY 4.0)를 간이 물리로 날린 계산입니다. × 는 첫 바운드. 가로 축만 그렸고 높이 축은 생략했습니다.
图:导轨上的两种规格滑块前往等待 5 个球的运动轨迹

图中的 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。如果用这个要求来换算末端速度,低端机械臂是达不到的。

相反,如果用长度 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。

还计算了轴的尺寸(转子惯量为估计值)。

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 欧元,缺货

7. 眼睛:相机 fps 与延迟

当前乒乓球计分板功能所使用的相机是 30 fps。作为机器人的眼睛,这还远远不够。

相机 传感器 最高 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. 第一阶段原型规格

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. 局限性

12. 进入下一篇

下一步是在 MuJoCo 中首先构建该配置。将导轨和摆动轴连接到球模型上,通过模拟器决定手臂长度、旋转轴高度以及第二阶段轴(深度对高度)。 机器人手臂的坐标系与逆运动学等基础知识将在「乒乓球机械臂基础」系列(目录)中一同探讨。 作为该系列的下一篇文章, 第 4 篇将暂时离开乒乓球,探讨以相同方式在吊舱中飞行 PX4 无人机的实验。

TT 一言: 脚步出发得早就可以慢一点,手臂短而快地挥舞即可。机器人如果也能这样分工,就能比昂贵单臂花更少钱制造出来。不过眼睛必须要快!

参考

所有链接均已于 2026-10-18 验证可正常打开。其中一个商家页面阻止了自动访问,故本次未能重新打开,其价格采用同一天调查文档中的数值。

登录后即可点赞

评论

还没有评论。

登录后即可发表评论