状态:草稿(2026-10-18),实际测量。 数字是通过笔记本(Apple M1 Max, macOS 26.5)上的 Python 3.9.6 和 numpy 2.0.2 直接计算得出的。 原始数据与代码:工作目录
measure/robot-arm-basics/中的arm.py,m05_speed.py,out/m05_speed.json(所需速度参见第 7 篇的out/m07_hit.json)。 关节速度极限为假设值,并非实际电机的测量值(未进行硬件实测)。参考资料查阅于 2026-10-18。 撰写规则:以实测数据为基础,无法测量标为“未实测”,无法确认标为“未确认”。
目录
1. 直觉:杠杆的长度
以相同的角速度挥动时,长棍末端的速度比短棍末端快。如果以 1 rad/s 的速度旋转肩膀,距离 0.75 m 的手腕移动速度为 0.75 m/s,距离 0.4 m 的手肘移动速度为 0.4 m/s。如果有多个关节,则将每个关节产生的速度相加为向量。这种“关节速度 → 球拍速度”的转换表就是雅可比矩阵(Jacobian)。由于杠杆的长度和方向会根据关节角度而变化,因此雅可比矩阵也因姿态而异。
选择电机时提出的第一个问题就源于此。 关节需要达到多少 rad/s 才能让球拍有足够的速度击回球?
2. 计算
2.1 几何雅可比矩阵
当旋转关节 i 的轴为单位向量 z_i 且轴上的一点为 o_i 时,如果仅该关节以 1 rad/s 旋转,球拍中心 p 将以 z_i × (p − o_i) 的速度移动,并且球拍以 z_i 为中心以 1 rad/s 旋转。将这些按列堆叠起来的 6×6 矩阵就是几何雅可比矩阵。
def jacobian(q):
Ts = frames_dh(q) # 바닥, 관절 1..6 의 좌표계(3편)
pe = Ts[6][:3, 3] # 라켓 중심
J = np.zeros((6, 6))
for i in range(6):
z, o = Ts[i][:3, 2], Ts[i][:3, 3]
J[:3, i] = np.cross(z, pe - o) # 선속도 부분 J_v
J[3:, i] = z # 각속도 부분 J_w
return J
球拍中心的速度为 v = J_v q̇,球拍的角速度为 ω = J_w q̇。由于球拍面上其余的点(距离中心为 r 的点)以 v + ω × r 的速度移动,如果球击中面部的边缘,它将获得与中心速度不同的速度。
2.2 速度极限之内的最大速度
每个关节都有 |q̇_i| ≤ q̇max_i 的限制。为了以单位方向 d 最快地移动球拍,只需选择使 dᵀ J_v q̇ 最大化的 q̇。由于目标函数是线性的,且允许范围是一个长方体(box),因此最大值出现在长方体的顶点处,只需匹配每个关节的符号即可。
v_max(d) = Σ_i |dᵀ J_v,i| · q̇max_i (J_v,i 는 J_v 의 i 번째 열)
这个公式是一个不需要求解线性规划问题的闭式解。在代码中,我们代入了 6 轴的所有 2⁶ = 64 个顶点,以验证是否得出相同的值(第 4 节)。
需要注意的一点是。这个最大值是 在允许球拍角速度自由变化时的值。由于上述公式中的 q̇ 会让包括手腕在内的所有部分都以最大速度旋转,因此球拍面也会快速旋转。如果击球瞬间球拍面的方向必须固定(第 7 篇),就会为此付出相应的代价。下面我们将对这两种情况进行综合测量。
2.3 可操作性与奇异点
可操作性(manipulability)w = √det(J Jᵀ) 表示球拍能够在各个方向上均匀移动的程度。对于 2 连杆平面手臂,由于 w = L1·L2·|sin q2|,当手肘弯曲成直角时最大,当手臂完全伸直或完全折叠时变为 0。第 4 篇中的奇异点正是这个 0。伸直的手臂无法再沿手臂长度方向推动球拍。
| 肘部角度 q2 | 0° | 30° | 60° | 90° | 120° | 150° |
|---|---|---|---|---|---|---|
| w = L1·L2·|sin q2| | 0 | 0.070 | 0.121 | 0.140 | 0.121 | 0.070 |
| 肩到端的距离 (m) | 0.75 | 0.72 | 0.65 | 0.53 | 0.38 | 0.20 |
为了用力击球,必须伸展手臂以加长杠杆,但完全伸展就是奇异点。这与人类“几乎”伸直手臂击球的原因是相同的权衡关系。
3. 图表:关节速度极限与球拍速度
4. 实测
4.1 击球姿态与测量方法
以手臂底部为基准,将 +x 设为朝向对手的方向(球台方向)。在球拍中心位于 x 0.40~0.65 m、y −0.35~0.35 m、z 0.0~0.35 m 的长方体中随机抽取,并将球拍法线从 +x 向上倾斜 0~20°,侧向倾斜 ±20°。用第 4 篇的解析解求解 400 个姿态,并使用了 8 个解中所有关节都在 ±170° 以内的解。由此获得的关节姿态共有 2,134 个。64 个顶点全数验算与闭式解的最大差值为 3.6×10⁻¹⁵ m/s。
4.2 不同关节速度极限下的最大球拍速度
| 关节速度极限 (rad/s) | +x 方向 5% / 中位数 / 95% (m/s) | 球拍法线方向中位数 (m/s) |
|---|---|---|
| 全部 5 | 2.1 / 2.8 / 3.7 | 2.8 |
| 全部 10 | 4.3 / 5.7 / 7.5 | 5.7 |
| 全部 20 | 8.5 / 11.3 / 15.0 | 11.4 |
| 全部 30 | 12.8 / 17.0 / 22.5 | 17.1 |
| 肩·肘 8,手腕 20 | 3.8 / 5.1 / 6.7 | 4.6 |
即使在相同的极限下,根据姿态的不同,第 5 百分位数和第 95 百分位数也会相差 1.7 倍。几乎伸直手臂击球的姿态较快,而折叠手臂的姿态较慢。因此, 在决定“在哪里击球”时,还必须一并考虑在该姿态下能产生的速度 。第 7 篇的击球决策将此表用作约束条件。
最后一行是减速比较大的肩·肘与轻量手腕混合的配置。无论手腕转得多么快,由于杠杆(d6 = 0.15 m)较短,收益很小,最终肩·肘的速度决定了球拍的速度。
4.3 相反地:要想达到 5 m/s,关节速度需要达到多少 rad/s
利用伪逆矩阵计算了将球拍中心以 5 m/s 沿 +x 方向移动所需的关节速度,并记录了六个关节中最快关节的速度。
| 条件 | 5% | 中位数 | 95% |
|---|---|---|---|
| 球拍面不旋转(角速度 0) | 10.7 | 14.1 | 18.0 rad/s |
| 球拍面旋转自由(仅匹配位置速度) | 11.9 | 14.7 | 17.8 rad/s |
原本以为放开旋转会减少所需速度,但中位数反而略有增加。因为伪逆矩阵给出的是使关节速度的 平方和最小化的解, 而不是使 最快关节最小化的解。如果关节极限是个问题,则必须将其作为最小化最大范数的线性规划问题来求解(未实测)。位置部分雅可比矩阵 J_v 的最小奇异值在姿态中位数为 0.26 m/rad。这意味着“在最迟钝的方向上,关节 1 rad/s 对应球拍 0.26 m/s”。
4.4 与所需速度的比较
在第 7 篇中,我们求解了接收 200 个实际击球并以规定的飞行时间将其回击到目标点(对方半场 x = 0.3, y = 0.9 m)所需的球拍速度。在此提前引用该结果。
| 回击时的飞行时间 | 出球速度中位数 | 所需的球拍法向速度 5% / 中位数 / 95% |
|---|---|---|
| 0.80 s(慢速回击) | 5.5 m/s | 1.4 / 1.9 / 2.1 m/s |
| 0.60 s | 5.7 m/s | 1.5 / 2.0 / 2.2 m/s |
| 0.45 s | 6.9 m/s | 2.1 / 2.6 / 2.9 m/s |
| 0.35 s(快速回击) | 8.7 m/s | 3.1 / 3.6 / 4.0 m/s |
由于球是从球拍上弹飞出去的,所以球拍可以比球慢得多(假设恢复系数为 0.8)。 如果所有关节为 10 rad/s,则在大多数姿态下都可以进行快速回击,而如果为 5 rad/s,则只能进行慢速回击。
与人类相比,差距很大。Bańkosz 和 Winiarski(2018)通过 120 Hz 动作捕捉测量了 10 名波兰精英女子青年选手,报道称正手强力上旋球在与球接触瞬间的球拍速度平均为 13.0~14.6 m/s。人类将速度用于 制造旋转并大力击球 ,而不是“回击”球。如果这个示例机械臂要达到该水平,以中位数标准来看,所有关节的速度必须在 25 rad/s 左右(介于 20 rad/s 时的 11.3 和 30 rad/s 时的 17.0 m/s 之间)。
4.5 龙门架 + 手腕
对于 2 轴龙门架之上的手腕,计算更为简单。球拍的最大速度是由皮带轴的线速度加上手腕角速度乘以从手腕到球拍的距离得到的。
| 皮带轴 (m/s) | 手腕 (rad/s) | 手腕~球拍 0.15 m | 0.25 m |
|---|---|---|---|
| 1 | 20 | 4.0 | 6.0 |
| 2 | 20 | 5.0 | 7.0 |
| 3 | 20 | 6.0 | 8.0 |
| 5 | 20 | 8.0 | 10.0 |
由于此表是加法运算,与其说是实测,不如说是计算。作为参考,Google 的 2023 系统将龙门架的最大速度记为 2 m/s(arXiv:2309.03315 II-A 节)。龙门架无论姿态如何都能产生相同的速度,但由于皮带轴移动的是大质量物体,因此会另外施加加速度限制(第 8 篇)。
5. 局限性
- 这里只查看了速度极限。实际上,加速度和扭矩极限往往会先受限,并且在挥动之前必须有足够的距离和时间来加速到该速度(第 8 篇)。
- 电机的速度极限由电源电压和反电动势决定,扭矩越大速度越小(转矩-速度曲线)。本文将其简化为常数极限。
- 球拍法向的最大值(表格右列)也是在球拍面旋转自由的情况下计算得出的。
6. 总结
- 雅可比矩阵是因姿态而异的“关节速度 → 球拍速度”转换表。其中一列代表一个关节的贡献。
- 关节速度极限内的最大球拍速度是一个闭式解:Σ |dᵀ J_v,i| q̇max_i。
- 在示例机械臂中,关节速度 10 rad/s 对应约 5.7 m/s 的球拍速度,20 rad/s 对应约 11.3 m/s。回击球 10 rad/s 就足够了,但要像人类那样大力击球,则需要大约 25 rad/s 左右。
- 即使在相同的极限下,由于姿态不同也会产生 1.7 倍的差异,因此选择击球位置和速度规划不能分开发生。
Titi 的小贴士。 即使关节只转动 10 rad/s 也能把球击回!不过,要想像运动员那样以 14 m/s 的速度挥拍,速度需要快上两三倍,所以初次制作的机器人还是把“回击球”作为目标吧!
参考资料
所有资料查阅于 2026-10-18。
- Lynch, Park, Modern Robotics, 2017, 开源预印本,第 5 章(5.1 雅可比矩阵,5.3 奇异点,5.4 可操作性)。
- Bańkosz, Winiarski, Correlations between Angular Velocities in Selected Joints and Velocity of Table Tennis Racket during Topspin Forehand and Backhand, J. Sports Sci. Med. 17 (2018) 330–338, 原文, 表 1.
- D'Ambrosio 等, Robotic Table Tennis: A Case Study into a High Speed Learning System, arXiv:2309.03315, II-A 节。