状态:草稿 (2026-10-18),实测。 数据使用笔记本电脑(Apple M1 Max,macOS 26.5)上的 Python 3.9.6 与 numpy 2.0.2 直接计算得出。原始数据与代码:工作目录
measure/robot-arm-basics/中的m08_traj.py,out/m08_traj.json。关节速度、加速度极限和转动惯量均为假设值,并非使用实际电机测得的数据(未进行硬件实测)。参考资料查阅于 2026-10-18。编写规则:实测数据为基本原则,未测出的标记为“未实测”,未确认的标记为“未确认”。
目录
1. 直觉:就像开车
从一个红绿灯到下一个红绿灯有多种走法。如果把油门踩到底并在最后急刹车,到达得最快,但乘客会向前倾斜。如果轻轻踩下又轻轻松开会很舒适,但会稍微慢一些。机器人关节也是如此。即使以相同的时间移动相同的距离,根据速度形状的不同,电机需要提供的最高速度、扭矩以及手臂受到的冲击也会有所不同。
乒乓球机器人的轨迹还有一个特殊要求: 它到达的不是静止的位置,而是必须在指定的时间以指定的速度通过 。因为必须在击打瞬间产生第7部分中设定的球拍速度。
2. 图表:速度的形状
3. 计算
3.1 多项式时间缩放
当单个关节从 q0 移动到 q1 用时 T 时,通过使用 τ = t/T,将其写作 q(t) = q0 + (q1 − q0)·s(τ)。其中 s 是从 0 到 1 的函数。
3차: s = 3τ² − 2τ³ 끝점 조건: 위치·속도 (4개)
5차: s = 10τ³ − 15τ⁴ + 6τ⁵ 끝점 조건: 위치·속도·가속도 (6개)
《Modern Robotics》9.2.2.1 节指出,3次多项式的最高速度为 (3/2)·Δ/T(在中间),最高加速度为 6·Δ/T²(在两端)。由于3次多项式的出发瞬间加速度从 0 突变为 6Δ/T²,因此该瞬间的加加速度(jerk,加速度的变化率)为无穷大,该节解释说这可能会引起振动。5次多项式将终点加速度也设为 0,从而消除了这个问题。5次多项式的最高速度 15/8·Δ/T 和最高加速度 10/√3·Δ/T² 并非留在书的正文中而是作为练习题,因此我们进行了直接计算,并在第4节中通过数值进行了确认。
3.2 最小加加速度与最小加速度
5次多项式还有一个名字。在所有从静止到静止的光滑轨迹中,它是 加加速度平方的积分最小的轨迹。从变分法来看,使 ∫(q⃛)² 最小化的函数满足 q⁽⁶⁾ = 0,因此它是5次多项式,而6个终点条件唯一确定了系数(由我们推导)。Flash 和 Hogan (1985) 报告称,人类手部的运动可以很好地用手部加加速度平方积分最小化的模型来解释(在摘要中确认,正文中未确认)。
根据同样的逻辑,如果最小化 加速度平方的积分,则由于 q⁽⁴⁾ = 0,从而得出3次多项式。Koç 等人于 2018 年的乒乓球机器人以此标准优化了每个关节的3次多项式轨迹。加速度的平方与扭矩的平方成正比,即与电机的铜损(发热)成正比,因此这是从能量角度出发的选择。
3.3 梯形、S形曲线与时间最优
当只有速度极限 v_max 和加速度极限 a_max 时,最快的运动是“最大加速度加速 → 保持最高速度 → 最大减速度减速”。由于速度曲线呈梯形,因此被称为梯形轮廓;如果距离太短而无法达到最高速度,则会变成三角形(bang-bang)轮廓。
Δ ≤ v_max²/a_max: T_opt = 2·√(Δ / a_max) (삼각형)
그 밖: T_opt = Δ / v_max + v_max / a_max (사다리꼴)
梯形轮廓的加速度也像阶梯一样变化,导致加加速度为无穷大。如果连加速度的变化也加以限制,加速段就会再次被分为三段,从而变成7段 S 形曲线(《Modern Robotics》9.2.2.3 节)。
3.4 击打轨迹:末端速度不为 0
乒乓球机器人的关节轨迹分为两段。
- 挥拍: 从当前状态(静止)到击打时刻 T 时达到 (q_h, q̇_h, q̈ = 0)。如果在击打瞬间将加速度设为 0,则在接触的极短时间内球拍速度几乎保持恒定。
- 停止(随动): 从该状态再次回到静止。
由于5次多项式的6个终点条件可以赋予任意值,因此这两段都可以用相同的函数来构造。只需进行一次 6×6 线性联立方程求解即可得出系数,该计算耗时 7.2 µs。Mülling 等人于 2013 年将动态运动原语(DMP)的目标移动替换为5次多项式,连同终点速度和加速度一起匹配,也是出于同样的原因(第3.2节,公式 8)。
def quintic_coeffs(q0, v0, a0, q1, v1, a1, T):
A = [[1, 0, 0, 0, 0, 0 ],
[0, 1, 0, 0, 0, 0 ],
[0, 0, 2, 0, 0, 0 ],
[1, T, T**2, T**3, T**4, T**5 ],
[0, 1, 2*T, 3*T**2, 4*T**3, 5*T**4 ],
[0, 0, 2, 6*T, 12*T**2, 20*T**3]]
return np.linalg.solve(A, [q0, v0, a0, q1, v1, a1]) # q(t) = Σ c_k t^k
当球的预测被修正时,只需将当前状态(位置、速度、加速度)作为新的出发点,针对剩余时间重新求解即可。由于连出发点的加速度也进行了衔接,因此在修正时加速度也不会发生跳变。
4. 实测
4.1 相同的距离,相同的时间,不同的形状
对以 T = 0.3 s 移动 Δ = 1 rad 的四种轨迹进行了 100,001 个点的采样并进行了数值微分。
| 轨迹 | 最高速度 | 最高加速度 | 出发瞬间加速度 | 最高加加速度(内部) | ∫加速度² dt |
|---|---|---|---|---|---|
| 3次 | 5.00 rad/s | 66.7 rad/s² | 66.7 | 457 rad/s³ | 444 |
| 5次(最小加加速度) | 6.25 | 64.2 | 0.01 | 2,262 | 635 |
| 梯形(各占 1/3) | 5.00 | 50.0 | 50.0 | (阶梯) | 500 |
| S形曲线(加加速度段 10%) | 5.00 | 71.4 | 0.03 | 2,385 | 612 |
公式值分别为:3次 5.0·66.7,5次 6.25·64.15·2222(加加速度),梯形 5.0·50.0。数值微分结果与公式相符(5次加加速度由于差分误差大 2%)。
- 平滑性是有代价的。 5次多项式虽然将出发加速度降为 0,但最高速度比3次多项式高出 25%。
- ∫加速度² 最小的是3次多项式。 正如第3.2节所述:若要节省扭矩(热量),选3次多项式;若要减少振动,选5次多项式。
- 如果换成转动惯量为 0.03 kg·m² 的关节,最高扭矩分别为:3次 2.0、5次 1.9、梯形 1.5、S形曲线 2.1 N·m。就最高扭矩而言,梯形是最轻的。
4.2 在极限内能走多快
在给定关节极限(v_max, a_max)的情况下,比较了各轨迹的最短时间。
| 极限 | Δ | 时间最优 | 5次 | 3次 | 5次 ÷ 最优 |
|---|---|---|---|---|---|
| 20 rad/s, 300 rad/s² | 0.2 rad | 0.052 s | 0.062 s | 0.063 s | 1.20 |
| 20 rad/s, 300 rad/s² | 1.0 rad | 0.115 s | 0.139 s | 0.141 s | 1.20 |
| 20 rad/s, 300 rad/s² | 2.0 rad | 0.167 s | 0.196 s | 0.200 s | 1.18 |
| 10 rad/s, 100 rad/s² | 1.0 rad | 0.200 s | 0.240 s | 0.245 s | 1.20 |
| 10 rad/s, 100 rad/s² | 2.0 rad | 0.300 s | 0.375 s | 0.346 s | 1.25 |
5次多项式通常比时间最优 慢 20%的人民币或时间。在受限于加速度极限的短距离移动中,该比例保持恒定为 √(10/√3 ÷ 4) = 1.20(由我们计算得出)。对于第1部分中时间预算紧张的快球来说,这 20% 的时间非常宝贵。因此,应使用接近时间最优的轨迹(梯形、S形曲线,或将极限作为约束的优化方法),并通过 S 形曲线的加加速度限制来保证平滑性。
4.3 击打轨迹的最短时间
在速度极限 20 rad/s 和加速度极限 300·600 rad/s² 的范围内,创建了从静止出发、经过 Δ 的瞬间达到 q̇_h 的最短时间轨迹。对于5次多项式,通过二分法找到了最短的 T;对于时间最优,则从“最大加速度 →(如有必要)以最大减速度达到 q̇_h”的形式中找到。
| Δ | q̇_h | a_max | 5次 T | 时间最优 T | 停下所需的额外转动角度与时间 |
|---|---|---|---|---|---|
| 0.3 rad | 10 rad/s | 300 | 0.054 s | 0.046 s | 0.17 rad, 33 ms |
| 0.6 rad | 10 rad/s | 300 | 0.082 s | 0.068 s | 0.17 rad, 33 ms |
| 0.6 rad | 10 rad/s | 600 | 0.062 s | 0.051 s | 0.08 rad, 17 ms |
| 0.6 rad | 15 rad/s | 300 | 0.076 s | 0.064 s | 0.38 rad, 50 ms |
| 1.0 rad | 15 rad/s | 300 | 0.102 s | 0.085 s | 0.38 rad, 50 ms |
- 即使是相同的 0.6 rad, 末端速度较快的轨迹(15 rad/s)比较慢的轨迹(10 rad/s)花费的时间更短。 因为只需从静止出发不断加速即可。相反,如果想以较慢的速度通过,则中途必须减速。
- 必须在工作空间中预先留出击打后停下所需的角度 q̇_h²/(2·a_max)。在 15 rad/s 时为 0.38 rad(22°)。如果在接近关节极限的地方进行击打,就会没有地方停下来。
- 结合第1部分的时间预算,挥拍需要 0.05~0.1 秒。如果将加速度极限从 300 提高到 600 rad/s²(加倍),时间将缩短约 25%。连同第5部分的速度极限在内, 加速度极限(即扭矩 ÷ 转动惯量)是电机选型的第二个关键数字。
4.4 通过点:停下,还是继续
当关节必须通过多个通过点时,比较了两种方法:(a) 在每个通过点停下的5次多项式段,(b) 在通过点不停下的3次样条曲线(两端速度为 0)。样条曲线分别采用了平分段时间和与移动距离平方根成正比分段这两种方法,并通过二分法找到了极限(20 rad/s, 300 rad/s²)内的最小总时间。
| 通过点 (rad) | 停下的5次多项式 | 样条曲线(等间隔) | 样条曲线(与 √距离 成正比) |
|---|---|---|---|
| 0 → 0.3 → 0.7 → 1.0(单向) | 0.240 s | 0.170 s | 0.184 s |
| 0 → 0.6 → 0.2 → 1.0(折返) | 0.319 s | 0.357 s | 0.325 s |
在单向路径中,不停车的速度快了 29%,但在需要变向的路径中,由于无论如何速度都要降为 0,反而使停车的 5 次方多项式 更快。样条曲线总是更快的直觉可能是错的, 如何划分区间时间与形状同样重要(《Modern Robotics》第 9.3 节讨论了途径点多项式)。
5. 局限性
- 对各个关节分别进行了规划。若要使多个关节在同一时刻对齐,需将其余关节拉长以匹配最慢的关节(同步)。本文未涉及此内容。
- 将极限设为了常数。实际的力矩极限随姿态(重力、惯性耦合)和速度(电机力矩-速度曲线)而变化。第 9 篇将测量 2 连杆手臂的动力学 最大力矩。
- 仅处理了关节空间轨迹。若要使球拍在空间中绘制直线,工作空间轨迹必须每时每刻求解逆运动学,且可能会穿过奇异点(未实测)。
6. 总结
- 3 次方多项式的出发加速度会突变,而 5 次方多项式(最小加加速度)虽然平滑,但最高速度高出 25%。3 次方多项式最小化 ∫加速度²(热量),而 5 次方多项式最小化 ∫加加速度²(振动)。
- 在极限范围内,5 次方多项式比时间最优慢约 20%。
- 乒乓球的关节轨迹分为“在规定时刻以规定速度通过” + “停止”两段,用一个 5 次方多项式即可同时实现这两点。如果预测发生变化, 则会根据当前状态重新求解。
- 决定挥拍时间和停止位置的是加速度极限。
TT 的一句话。 挥拍不是为了停在某个地方,而是为了朝要通过的地方挥去。而且击球之后必须留出停下来的位置。否则手臂会撞到墙上!
参考资料
所有资料查阅于 2026-10-18。
- Lynch, Park, Modern Robotics, 2017, 公开预印本,第 9 章(9.2.2.1 多项式,9.2.2.2 梯形,9.2.2.3 S 形曲线,9.3 途径点,9.4 时间最优)。
- Flash, Hogan, The coordination of arm movements: an experimentally confirmed mathematical model, J. Neuroscience 5(7) (1985) 1688–1703, 摘要(Europe PMC).
- Koç, Maeda, Peters, Online optimal trajectory generation for robot table tennis, RAS 105 (2018), 作者公开版.
- Mülling 等, Learning to select and generalize striking movements in robot table tennis, IJRR 32(3) (2013), 作者公开版,第 3.2 节。