S曲线加减速算法 VS 梯形加减速算法

本文探讨了S曲线加减速算法与传统梯形算法在控制机械运动中的区别,通过日常生活中的驾驶例子说明S曲线如何提供更平滑的运动,降低振动,延长有效传输时间。重点讲解了如何编程S曲线并优化负载平顺性,以及影响因素如过渡时间和最大加速度比例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计运动控制系统很多年,突然有人问我S曲线加减速算法跟梯形加减速算法的区别,我竟然拼凑了很多语言都没能讲清楚。作为一个技术男怎能善罢甘休,但介于个人能力有限只能借用网上大牛的讲解搞清楚。苦苦搜索了三天终于找到了一篇像样的文章,由于是英文资料,我就在这里按照自己的方式将文章内容分享一下。(注:本人英文能力有限仅供参考)

首先举个生活中的例子

在这里插入图片描述
在我们平时开车的过程中就存在 S 曲线与梯形加减速运动的经历。想象一下,当你控制汽车减速停止时不将脚从刹车踏板上移开,你将会以某个恒定速率减速,直到汽车停下。在汽车完成减速的那一刻,它会向后倾斜并摆动几次,然后再稳定下来。假如换一种方式,当你控制汽车减速停止时以恒定速度制动汽车,但在汽车完全停止之前你轻轻地将脚从刹车踏板上抬起,这是我们大多数人(优秀的司机)为了避免撞到乘客而自动做的事情。使用这种方法,汽车不会摆动。

在汽车运动结束时让脚离开刹车踏板类似于执行 S 曲线算法。它产生了从恒定减速到零减速的过渡阶段。这种简单的变化导致负载振荡低得多。

S曲线运动方式如何影响机器性能

类似于上面优秀司机的做法,在控制机器运动过程中使用S曲线算法也会大大优化机器的性能。

S曲线加速度通过将加速度渐变的方式消除了加速度突变的情况,从而使机器运动更平滑。除了提供更平滑的运动之外,你还可以根据负载调整S 曲线的参数从而提高机器运行的速度,例如龙门架、皮带驱动系统、XYZ 工作台、分度器、刺绣、机器人机制等。

S 曲线算法将“过渡”段添加到传统的 3 相梯形曲线(加速、滑行、减速),从而产生 7 相曲线。如图 1 所示。
图 1:S 曲线和梯形曲线的速度曲线
图 1:S 曲线和梯形曲线的速度曲线

使 S 曲线算法如此强大的原因在于,它们向连接机构和负载注入的振动能量显着减少。无论使用的驱动电机是伺服电机还是步进电机,都是如此。同样重要的是,与梯形曲线相比,S 曲线提供了一种额外的控制机制,通过调整曲线过渡阶段与恒定加速度阶段的比率来抵消负载中的振荡。

这两个功能一起会对有效传输时间产生巨大影响。有效转移时间是从负载开始移动到最终真正稳定下来的时间。对于高速点对点移动,调整的 S 曲线可以将有效传输时间减少 25% 甚至 33%,具体取决于被控制机构的性质。

定义加速度变化的运动特性称为“急动”。在梯形曲线中,相变处的加加速度是无限的,而在 S 曲线曲线中,加加速度是一个常数值,将变化分布在非零时间段内。对于给定的负载,加加速度越大,在系统中显示为不需要的振动的能量就越大,并且这种引起振动的能量的频谱将越宽。如图 2 所示。
图 2:来自 S 曲线和梯形轮廓的振动
比较梯形剖面与 S 曲线剖面产生的振动能量的数量和类型,我们看到梯形剖面——由于其加速度的瞬时变化——向系统注入了相对大量的振动能量,而这种振动能量分布在很宽的频率范围内。S 曲线运动曲线向负载注入较少的振动能量,同样重要的是,这些振动的范围在较高频率下会迅速切断。

让 S 曲线发挥作用

既然我们了解了所涉及的原理,那么如何编程 S 曲线,以及哪些因素会影响实际负载的平滑度和传递时间?

为给定应用寻找最佳 S 曲线形式是平衡从零加速度过渡到最大加速度(阶段 I 和 III)所花费的时间与最大加速度(阶段 II)所花费时间的百分比的问题。

一方面,如果我们几乎将所有时间都花在过渡(阶段 I 和 III)上,而在最大加速度(阶段 II)上花费很少的时间,则运动将非常平滑,但移动的总时间会增加。这是因为,在阶段 I 期间,S 曲线轮廓仅行进很短的距离,因此,此处花费的时间越长,总传输时间将增加。

另一方面,如果我们只在阶段 I 和 III 中花费一小部分时间,那么总移动的时间将被最小化,但是,轮廓将不会那么平滑,并可能导致负载发生不必要的振动。令人高兴的是,有一个警告,因为即使是相对简短的阶段 I 和 III 阶段也可能导致负载引起的振荡显着减少。不要忘记,您正在比较大的急动值(对于 S 曲线轮廓)与无限的急动值(梯形轮廓),因此即使是一点点过渡也比没有过渡要好得多。

事实上,对于给定的机制,S 曲线相位比通常有一个“神奇”值。虽然过渡时间过短会注入过多的振动能量,但令人惊讶的是,过渡时间过长也会产生类似的影响。通常有一个特定的 jerk 值,它“坚持着陆”并显着或完全减少移动结束时的稳定振荡。找到该值是 S 曲线调整过程的目标。

实际上,除非负载的重量永远不会改变,或者除非负载的重量完全已知,否则您可能会调整 S 曲线形状以实现平均负载的点对点传输。但即使是平均优化的值也会对有效的点对点传输时间产生很大的影响。

### 三段 S 型曲线加减速算法实现及原理 #### 定义与特点 S 曲线加减速算法相较于传统梯形加减速,在加速和减速阶段引入了额外的过渡段,使得整个运动过程更加平滑。对于三段 S 型曲线而言,其主要分为三个部分:初始加速、匀速运行以及最终减速。 - **初始加速阶段**:此阶段内物体逐渐增加速度直到达到设定的最大速度值。在此期间,不仅存在常规意义上的正向加速度,还特别设计了一段由零至最大加速度的变化区间来减少冲击力。 - **匀速运行阶段**:一旦达到了预定最高速度之后便进入恒定速率前进的状态,此时既无明显增减趋势也不存在方向改变的情况发生。 - **最终减速阶段**:临近目标位置前开始降低移动速率直至完全停止;同样地,在这一过程中会经历从峰值回到起点水平的一系列渐变处理以确保平稳着陆[^1]。 #### 数学模型构建 为了描述上述各个时期的动态特性并据此制定相应的控制策略,则需建立一套完整的数学表达式体系: 设总时间为 \( T \),起始时刻为 t=0 ,结束时刻为 t=T 。令 v(t) 表示任意给定点处的速度函数,a(t) 则对应于瞬时加速度变化规律。那么可以按照如下方式定义各分量的具体形式: ##### 加速期 (t ∈ [0,T/8]) ```python def acceleration_phase(t, vmax, amax): """ 计算加速期内的速度 参数: t : 当前时间 vmax : 最大速度 amax : 最大加速度 返回: float: 对应的时间点上的速度 """ if t <= T / 8: return ((vmax * math.pi / 2) / (T * amax)) * \ (-math.cos(4 * amax * t / vmax) + 1) ``` ##### 减速期 (t ∈ [7T/8,T]) ```python def deceleration_phase(t, vmax, amax): """ 计算减速期内的速度 参数同上... 返回同上... """ if t >= 7*T / 8 and t < T: return ((vmax * math.pi / 2) / (T * amax)) * \ (math.sin(math.pi + 4 * amax * t / vmax)) ``` ##### 中间稳定区 (t ∈ [T/8,7T/8]) 中间区域保持常数速度 `vmax` 不变即可满足需求。 综上所述,通过组合这些片段就能得到完整的 S 形轨迹方程组用于指导实际操作中的参数调整工作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值