第四节:速度规划与加减速控制
各位工程师朋友,今天我们来聊聊运动控制里最基础也最要命的一环——速度规划。说白了,就是让电机怎么跑得又快又稳,还不抖。
我刚开始做运动控制那会儿,觉得速度规划不就是给个加速度、减速度嘛,简单。结果第一次调试龙门架,电机一启动,整个架子都在抖,工件直接飞出去了。嗯,从那以后,我再也不敢小看加减速控制了。
4.1 梯形速度曲线:简单但粗暴
梯形速度曲线,顾名思义,速度曲线像个梯形。分为三个阶段:匀加速、匀速、匀减速。
它的数学表达很简单:
// 梯形速度规划伪代码
if (t < t_acc) {
v(t) = v0 + a * t; // 加速段
} else if (t < t_acc + t_const) {
v(t) = v_max; // 匀速段
} else {
v(t) = v_max - a * (t - t_acc - t_const); // 减速段
}
优点很明显:计算量小,实时性好。我在做低端点胶机的时候,就用梯形曲线,跑得挺欢。
但缺点也很致命——加速度在拐点处突变。你想想看,加速度从0瞬间跳到a,再瞬间回到0,这相当于给机械系统一个冲击力。我见过一个案例,某厂用梯形曲线跑高速传送带,半年换了三套联轴器。
4.2 S型速度曲线:平滑才是王道
S型曲线,说白了就是把梯形曲线的尖角磨圆了。它引入了加加速度(Jerk)的概念,让加速度也平滑变化。
S型曲线通常分7段:加加速、匀加速、减加速、匀速、加减速、匀减速、减减速。听着复杂,但核心思想就一个——让速度的二阶导数连续。
我习惯用这种分段方式:
// S型曲线7段规划
// 参数:v0, v_max, a_max, j_max (加加速度)
// 第1段:加加速段
t1 = a_max / j_max;
v1 = v0 + 0.5 * j_max * t1^2;
// 第2段:匀加速段
t2 = (v_max - 2*v1) / a_max;
// 第3段:减加速段
t3 = t1;
// ... 后续段类似
4.3 Jerk控制:被忽视的关键参数
Jerk,加加速度,就是加速度的变化率。单位是m/s³。很多人只关注加速度,忽略了Jerk,这是大忌。
为什么Jerk重要?因为机械系统有弹性。你加速度变化太快,相当于给机械结构一个冲击波。这个波会在机构里来回反射,造成振动。
我做过一个实验:同样的运动轨迹,Jerk=1000 m/s³时,末端振动幅度0.5mm;Jerk=100 m/s³时,振动幅度降到0.05mm。差了10倍!
| Jerk值 (m/s³) | 加速度变化 | 机械冲击 | 适用场景 |
|---|---|---|---|
| > 10000 | 剧烈 | 大 | 低精度搬运 |
| 1000 ~ 10000 | 中等 | 中 | 通用工业 |
| 100 ~ 1000 | 平滑 | 小 | 精密定位 |
| < 100 | 极平滑 | 极小 | 晶圆搬运、医疗 |
4.4 实时速度规划:应对不确定性的利器
前面讲的都是离线规划——提前算好速度曲线。但实际中,很多情况需要实时调整速度。比如视觉引导的抓取,目标位置随时在变。
实时速度规划的核心是:在运动过程中,根据当前状态和目标,动态计算剩余路径的速度曲线。
我常用的方法是「前瞻+重规划」:
- 前瞻窗口:提前看未来N个插补周期的路径
- 约束检查:检查当前速度能否在窗口内安全减速
- 速度修正:如果发现减速距离不够,立即降低当前速度
// 实时速度规划核心逻辑
void RealtimeSpeedPlan(float current_pos, float current_v,
float target_pos, float max_a) {
// 计算剩余距离
float remain_dist = target_pos - current_pos;
// 计算安全减速距离
float decel_dist = current_v^2 / (2 * max_a);
// 如果减速距离不够,立即降速
if (decel_dist > remain_dist) {
float safe_v = sqrt(2 * max_a * remain_dist);
current_v = min(current_v, safe_v);
}
// 正常加速/匀速/减速判断
// ...
}
4.5 知识体系总览
下面这张图,是我自己总结的速度规划知识框架。你看一眼,心里就有谱了。
这张图把四个核心模块串起来了。你从左上角开始看,梯形是最基础的,S型是升级版,Jerk控制是精细调节,实时规划是应对变化。实际项目中,我通常这样选型:
- 普通搬运:梯形曲线 + 固定加减速
- 精密装配:S型曲线 + Jerk限制
- 视觉跟踪:实时规划 + 前瞻窗口
最后说一句,速度规划没有银弹。每个项目都要根据负载、精度、速度要求来权衡。我见过有人非要在低速设备上用7段S型曲线,结果计算周期太长,反而影响了性能。合适才是最好的。
公众号:蓝海资料掘金营,微信deep3321