0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详解S型加减速曲线规划算法总结

strongerHuang 来源:小麦大叔 作者:小麦大叔 2021-04-09 17:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

做过运动控制的小伙伴都知道,S曲线很重要,下面一张动图对比一下,你就知道S曲线的好处:

f9d22f2c-9910-11eb-8b86-12bb97331649.gif

下面分享一下S曲线的内容:

1 前言

S形加减速的最重要特征是该算法的加速度/减速度曲线的形状如字母 S。S形加减速的速度曲线平滑 ,从而能够减少对控制过程中的冲击,并使插补过程具有柔性 [^1]。由于T形曲线在加速到匀速的切换过程中,实际中存在较大过冲,因此这里对比一下T曲线和7段S曲线的实际过程;

T形:加速 -》 匀速 -》 减速

S形:加加速() -》 匀加速() -》 减加速()-》 匀速()-》 加减速()-》 匀减速()-》 减减速()

上文在加速这块的文字描述可能读起来起来有点绕,下面看图:

fa688bf2-9910-11eb-8b86-12bb97331649.png

2 理论

分析由于S曲线在加减速的过程中,其加速度是变化的,因此这里引入了新的一个变量 ,即加加速度。

因此对应上图的7段S速度曲线中,规定最大加速为,最小加速度为,则加速度的关系;

加加速():逐渐增大;

此时

匀加速():达到最大;

此时

减加速():逐渐减小;

此时

匀速():不变化;

此时

加减速(): 逐渐增大;

此时

匀减速(): 达到最大;

此时

减减速(): 逐渐减小;

此时

“为加速度的绝对值;其中

所以通常需要确定三个最基本的系统参数 :系统最大速度 ,最大加速度a_{max} ,加加速度,就可以可确定整个运行过程[^2] ;

最大速度:反映了系统的最大运行能力 ;

最大加速度:反映了系统的最大加减速能力 ;

加加速度:反映了系统的柔性;

柔性越大,过冲越大,运行时间越短;

柔性越小,过冲越小,运行时间越长;

2.1 加速度时间关系方程

整个加速度变化的过程具体如下图所示;

fd6f8756-9910-11eb-8b86-12bb97331649.png

再次强调一下 和 的关系,另外这里再引入变量 ,

比如,当前时刻 ,即 位于区间 ,则如果将 作为初始点,则 为 相对于时刻的时间,则有:

下面可以得到加速度与时间的关系函数,具体如下:

根据 ① 式,将 代入 ② 式可以得到:

上式中 ;

2.2 速度时间关系方程

速度和加速度满足 ;加加速度和速度的关系满足:

结合加速度时间关系并结合② 式可以得到速度曲线关系,具体关系如下图所示;

fd8a7a20-9910-11eb-8b86-12bb97331649.png

进一步简化可以得到:

fdd9a776-9910-11eb-8b86-12bb97331649.png

2.3 位移时间关系方程

位移 和加加速度 直接满足关系如下:

简单推导

因此可以得到:

“积分忘的差不多了,回去再复习一下;

最终位移的方程如下所示;

fdfa85f4-9910-11eb-8b86-12bb97331649.png

3 程序实现的思路

正如前面所提到的,S曲线规划需要确定三个最基本的系统参数 :系统最大速度 ,最大加速度a_{max} ,加加速度,这样就可以确定这个运行过程。这里有一个隐性的条件,就是在运行的过程中可以达到最大速度,这样才是完整的7段S曲线,另外这里还有一些中间参数:

,因此有 ;

加加速度 ;

,用户给定整个运行过程所需要的时间;

但是通常实际过程中关心,,;

3.1 推导

理想状态假设存在 和,则推导过程如下:

因此可以得到:

简化之后得到:

根据②式可知:

最终得到:

下面可以根据位移时间关系方程进行离散化的程序编写。

假设可以到达最大速度,且用户给定了整个过程运行时间,则 的推导如下:

简化上式可以得到:

根据 代入上式可得:

3.2 的推导

这时候还剩下需要计算,通过已量 可以推导出来;首先位移之间满足关系如下:

其中加速区长度为 ;其中减速区长度为 ;

具体推导;[^2]前面提到过,,因此在=0的时候,则

这里简单推导一下:

根据④,⑤最终简化得到:

“:为运行的总时间:为运行的总路程

详细推导过程如下:

因为:

因为:

所以,简化得到:

所以可以得到:

因为:

将其代入可以得到:

简化得到最终结果:

4 matlab

程序matlab程序亲测可以运行,做了简单的修改,因为这里直接给定了整个运行过程的时间,所以需要在SCurvePara函数中求出加加速度 的值,路程为 1:

SCurvePara

function [Tf1,V,A,J,T] = SCurvePara(Tf, v, a)

T = zeros(1,7);

for i=1:1000

% 加加速度 J

J = (a^2 * v) / (Tf*v*a - v^2 - a);

% Tk

T(1) = a / J;

T(2) = v / a - a / J; % t2 = v / a - t1;

T(3) = T(1);

T(4) = Tf - 2 * a / J - 2 * v / a; % t4 = Tf - 4*t1 - 2*t2;

T(5) = T(3);

T(6) = T(2);

T(7) = T(1);

% 根据T2和T4判断S曲线的类型

if T(2) 《 -1e-6

a = sqrt(v*J);

display(‘t2《0’);

elseif T(4) 《 -1e-6

v = Tf*a/2 - a*a/J;

display(‘t4《0’);

elseif J 《 -1e-6

Tf = (v^2 + a) / (v*a) + 1e-1;

display(‘J《0’);

else

break;

end

end

A = a;

V = v;

Tf1 = Tf;

end

SCurveScaling

function s = SCurveScaling(t,V,A,J,T,Tf)

% J = (A^2 * V) / (Tf*V*A - V^2 - A);

% T(1) = A / J;

% T(2) = V / A - A / J; % T(2) = V / A - T(1);

% T(3) = T(1);

% T(4) = Tf - 2 * A / J - 2 * V / A; % T(4) = Tf - 4*T(1) - 2*T(2);

% T(5) = T(3);

% T(6) = T(2);

% T(7) = T(1);

%%

if (t 》= 0 && t 《= T(1))

s = 1/6 * J * t^3;

elseif ( t 》 T(1) && t 《= T(1)+T(2) )

dt = t - T(1);

s = 1/2 * A * dt^2 + A^2/(2*J) * dt.。.

+ A^3/(6*J^2);

elseif ( t 》 T(1)+T(2) && t 《= T(1)+T(2)+T(3) )

dt = t - T(1) - T(2);

s = -1/6*J*dt^3 + 1/2*A*dt^2 + (A*T(2) + A^2/(2*J))*dt 。..

+ 1/2*A*T(2)^2 + A^2/(2*J)*T(2) + A^3/(6*J^2);

elseif ( t 》 T(1)+T(2)+T(3) && t 《= T(1)+T(2)+T(3)+T(4) )

dt = t - T(1) - T(2) - T(3);

s = V*dt 。..

+ (-1/6*J*T(3)^3) + 1/2*A*T(3)^2 + (A*T(2) + A^2/(2*J))*T(3) + 1/2*A*T(2)^2 + A^2/(2*J)*T(2) + A^3/(6*J^2);

elseif ( t 》 T(1)+T(2)+T(3)+T(4) && t 《= T(1)+T(2)+T(3)+T(4)+T(5) )

t_temp = Tf - t;

dt = t_temp - T(1) - T(2);

s = -1/6*J*dt^3 + 1/2*A*dt^2 + (A*T(2) + A^2/(2*J))*dt 。..

+ 1/2*A*T(2)^2 + A^2/(2*J)*T(2) + A^3/(6*J^2);

s = 1 - s;

elseif ( t 》 T(1)+T(2)+T(3)+T(4)+T(5) && t 《= T(1)+T(2)+T(3)+T(4)+T(5)+T(6) )

t_temp = Tf - t;

dt = t_temp - T(1);

s = 1/2 * A * dt^2 + A^2/(2*J) * dt + A^3/(6*J^2);

s = 1 - s;

elseif ( t 》 T(1)+T(2)+T(3)+T(4)+T(5)+T(6) && t 《= T(1)+T(2)+T(3)+T(4)+T(5)+T(6)+T(7) + 1e5 )

t_temp = Tf - t;

s = 1/6 * J * t_temp^3;

s = 1 - s;

end

end

测试的代码如下:TEST

%%

N = 500;

ThetaStart = 0; %起始位置

ThetaEnd = 90; %最终位置

VTheta = 90; %1 速度

ATheta = 135; %1.5 加速度

Tf = 1.8; % 总行程时间

v = VTheta/(ThetaEnd - ThetaStart);

a = ATheta/(ThetaEnd - ThetaStart);

v = abs(v);

a = abs(a);

Theta = zeros(1,N);

s = zeros(1,N);

sd = zeros(1,N);

sdd = zeros(1,N);

[TF,V,A,J,T] = SCurvePara(Tf, v, a);

display(J, ‘J:’);

display(TF,‘Tf:’);

display(V,‘v:’);

display(A, ‘da:’);

display(TF-Tf,‘dTf:’);

display(V-v,‘dv:’);

display(A-a, ‘da:’);

t=linspace(0,TF,N);

dt = t(2) - t(1);

for i = 1:N

if i == N

a = a;

end

s(i) = SCurveScaling(t(i),V,A,J,T,TF);

Theta(i) = ThetaStart + s(i) * (ThetaEnd - ThetaStart);

if i》1

sd(i-1) = (s(i) - s(i-1)) / dt;

end

if i》2

sdd(i-2) = (sd(i-1) - sd(i-2)) / dt;

end

end

subplot(3,1,1);

legend(‘Theta’);

xlabel(‘t’);

subplot(3,1,1);

plot(t,s)

legend(‘位移’);

xlabel(‘t’);

title(‘位置曲线’);

subplot(3,1,2);

plot(t,sd);

legend(‘速度’);

xlabel(‘t’);

title(‘速度曲线’);

subplot(3,1,3);

plot(t,sdd);

legend(‘加速度’);

xlabel(‘t’);

title(‘加速度曲线’);

看到最终仿真结果和预期相同;

fe0f71da-9910-11eb-8b86-12bb97331649.jpg

最后再看一下T形和S形速度曲线规划的效果对比:

5 总结

本文只对7段的S曲线规划做了详细的推导和介绍,matlab中的程序对于4段和5段都有做实现,很多是在理想情况下进行推导的,初始速度默认为0,终止速度也为0,并且假设加减速区域相互对称。最终运行结果符合预期效果。

“文中难免有错误和纰漏之处,请大佬们不吝赐教创作不易,如果本文帮到了您;

6 参考

[^1]:陈友东 魏洪兴 王琦魁。数控系统的直线和 S 形加减速离散算法[D]。北京:中国机械工程,2010.

[^2]:郭新贵 李从心 S 曲线加减速算法研究 上海交通大学国家模具 CAD 工程研究中心 , 200030
编辑:lyn

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    189

    文章

    3029

    浏览量

    239193
  • 运动控制
    +关注

    关注

    5

    文章

    838

    浏览量

    34665

原文标题:硬核 | S速度曲线规划算法总结

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    普通减速机与行星减速机:如何根据工况选型不踩坑?

    减速机作为机械传动系统的核心部件,其性能直接影响设备的运行效率与稳定性。行星减速机与普通减速机因结构差异,在传动效率、承载能力、体积及适用场景上各有优劣。 1、 传动效率差异显著:行星减速
    发表于 04-16 10:59

    24V供电,3A输出,S曲线:TMCM-3351三轴电机控制模块

    的多轴驱动板常常在接口数量、电流能力或闭环支持上有所取舍。TMCM-3351把这三个需求放在了一起:24V供电、每轴3ARMS输出、支持S加减速和编码器闭环,同时
    的头像 发表于 04-08 18:27 1624次阅读
    24V供电,3A输出,<b class='flag-5'>S</b>形<b class='flag-5'>曲线</b>:TMCM-3351三轴电机控制模块

    变频器加减速时对容量有哪些影响

    变频器在加减速过程中,对容量的影响主要体现在瞬时过载能力、制动能力以及热积累效应三个方面。简单来说,加减速越频繁、负载惯性越大、加减速时间设定得越短,对变频器的容量要求就越高。
    的头像 发表于 04-05 17:14 1154次阅读
    变频器<b class='flag-5'>加减速</b>时对容量有哪些影响

    变频器在加减速过程中报主回路过电压故障如何处理

    变频器在加减速时报主回路过电压,本质上是因为电机处于“发电”状态,回馈的能量超过了变频器自身的消耗能力,导致直流母线电压飙升。
    的头像 发表于 04-05 07:13 276次阅读
    变频器在<b class='flag-5'>加减速</b>过程中报主回路过电压故障如何处理

    变频调速器的加减速方式

    变频调速器的加减速方式,核心是解决电机自身惯性与快速启停需求之间的矛盾 。设置的目标是在 不引起过流或过压跳闸的前提下,尽可能缩短加减速时间  。 主要包含以下两个方面: 加减速模式(曲线
    的头像 发表于 03-20 07:42 439次阅读
    变频调速器的<b class='flag-5'>加减速</b>方式

    电机加减速曲线控制的选择

    电机加减速曲线的选择,本质上是在 平滑性、响应速度和系统复杂性 之间做权衡。没有一种曲线是万能的,最合适的取决于你的负载特性和性能要求。 下面是三种主流加减速
    的头像 发表于 03-16 16:41 313次阅读
    电机<b class='flag-5'>加减速</b><b class='flag-5'>曲线</b>控制的选择

    减速机与变频器区别,在哪种情况下可以互换?

    啮合实现速比转换,典型结构包含行星轮系和摆线针轮。 转矩放大特性:输出转速降低时转矩呈线性增长,如1:10减速比可使转矩放大至10倍。 效率曲线:机械效率通常在85%-95%之间,高负载时效率保持稳定。 2. 变频器(以矢量控制
    的头像 发表于 02-13 07:38 220次阅读
    <b class='flag-5'>减速</b>机与变频器区别,在哪种情况下可以互换?

    TMCM-1316:S 加减速 + 256 微步 步进控制更精准

    一款在运动控制细节上表现突出的模块——TMCM-1316StepRocker,看看它是如何通过S加减速曲线与最高256微步细分技术,让步进电机的运动控制迈向新台
    的头像 发表于 02-09 16:45 1068次阅读
    TMCM-1316:<b class='flag-5'>S</b> <b class='flag-5'>型</b><b class='flag-5'>加减速</b> + 256 微步 步进控制更精准

    蚊子翅膀不用喷金也能看?聊聊扫描电镜用“镜筒内加减速”死磕低电压成像

    问题进行了底层优化。今天,我们就从技术角度,拆解一下这次升级的含金量。 1、镜筒内加减速:低电压下的无损观测 这是本次升级最大的亮点之一。我们在镜筒设计上引入了镜筒内加减速技术,并配合复合透镜设计。简单
    发表于 12-09 17:42

    三坐标测量机路径规划与补偿技术:核心算法解析

    三坐标测量的微米级精度背后,是精密的路径规划算法与实时补偿技术在保驾护航。三坐标测量机的智能避撞算法保障了测量的安全与高效;温度补偿技术消除了环境的无形干扰;点云智能处理则让海量数据蜕变为精准的工程
    的头像 发表于 08-01 14:15 1800次阅读
    三坐标测量机路径<b class='flag-5'>规划</b>与补偿技术:核心<b class='flag-5'>算法</b>解析

    只是加减速和转弯,为啥自动驾驶这么难实现?

    并不是那么容易?自动驾驶汽车为何发展这么多年,还是没有实现L5?今天智驾最前沿就来和大家聊聊这个话题。 车辆的运行轨迹看似简单,但并不是简单地“往前跑”或“停下来”那么简单。任何一次加减速,都与车辆的质量、轮胎与
    的头像 发表于 06-27 12:20 741次阅读
    只是<b class='flag-5'>加减速</b>和转弯,为啥自动驾驶这么难实现?

    AGV小车中的动态路径规划算法揭秘

    并非一成不变时,动态路径规划能力就显得至关重要。本文将深入探讨几种主流的动态路径规划算法(如A、Dijkstra、RRT等),并解析它们如何在AGV行业中大显身手。 为何需要动态路径规划? 1.简介 传统的静态路径
    的头像 发表于 06-17 15:54 1988次阅读
    AGV小车中的动态路径<b class='flag-5'>规划算法</b>揭秘

    升降速曲线对直线电机系统性能影响的研究

    摘要:对一次速度曲线升降速,二次速度曲线升降速,三次速度曲线升降速以及三角函数速度曲线升降速曲线进行了分析,并对后3种升降速
    发表于 06-17 08:48

    时源芯微 PCB 布线规详解

    PCB 布线规详解 走线方向控制规则 相邻布线层的走线方向应采用正交结构,避免不同信号线在相邻层沿同一方向走线,以此降低不必要的层间串扰。若因 PCB 板结构限制(例如部分背板)难以避免该情况
    的头像 发表于 05-20 16:28 1057次阅读

    线性模组为什么会限定一个加减速时间?

    在工业自动化领域,线性模组作为精密传动系统的核心部件,其加减速时间的设定直接影响设备性能与寿命。通过对运动控制原理的深入分析可以发现,加减速时间的限定是机械结构强度、电机特性、运动精度、能耗管理等
    的头像 发表于 05-11 17:04 1369次阅读
    线性模组为什么会限定一个<b class='flag-5'>加减速</b>时间?