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
    +关注

    关注

    181

    文章

    2960

    浏览量

    230007
  • 运动控制
    +关注

    关注

    4

    文章

    563

    浏览量

    32792

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

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

收藏 人收藏

    评论

    相关推荐

    多台仓储AGV协作全局路径规划算法的研究

    多AGV动态路径规划需解决冲突避免,核心在整体协调最优。规划时考虑道路设计、拥堵、最短路径和交通管制,用A*算法避免重复路径和转弯,同时需交通管制防相撞。创新响应需求是关键,良好路径规划
    的头像 发表于 10-28 17:38 149次阅读
    多台仓储AGV协作全局路径<b class='flag-5'>规划算法</b>的研究

    步进电机如何在加减速过程中控制技术?

    步进电机是一种将电脉冲信号转换为角位移或线位移的电机,广泛应用于各种自动化控制系统中。在加减速过程中,步进电机的控制技术至关重要,以确保系统的稳定性和精确性。 加减速控制原理 步进电机的加减速控制
    的头像 发表于 10-23 10:02 137次阅读

    伺服电机加减速机惯量怎么计算

    伺服电机加减速机系统是现代工业自动化领域中常见的一种传动装置,它通过将伺服电机的高速旋转转化为减速机的低速大扭矩输出,实现对负载的精确控制。在设计和使用伺服电机加减速机系统时,了解其惯量特性是非
    的头像 发表于 06-14 10:54 2665次阅读

    stm32控制步进电机加减速的稳定性?

    加减速的时候,在固定的时间内增加或者减少固定的转速。网上看了s曲线或者梯形加减速的一些介绍,也仿照s
    发表于 05-06 07:21

    STM32的电机库适合用来做步进电机吗? 里面包含有加减速算法没呢?

    STM32 的电机库 适合用来做步进电机吗? 里面包含有加减速算法没呢?
    发表于 05-06 07:02

    如何用stm32f103zet6控制伺服电机的加减速运动?

    想用stm32f103zet6控制伺服电机的加减速运动,不知该怎么做,请大神指教。具体情况是有个机械凸轮,有一根顶杆顶着凸轮边沿,随着凸轮转动及其外径的变化,水平顶杆会沿水平方向作直线运动。现在可以
    发表于 04-30 08:00

    基于FPGA的常见的图像算法模块总结

    意在给大家补充一下基于FPGA的图像算法基础,于是讲解了一下常见的图像算法模块,经过个人的总结,将知识点分布如下所示。
    的头像 发表于 04-28 11:45 508次阅读
    基于FPGA的常见的图像<b class='flag-5'>算法</b>模块<b class='flag-5'>总结</b>

    冲压自动线规划的几点考虑

    在制造业中,冲压自动线规划是确保高效生产和卓越质量的关键环节。成功的规划需要综合考虑多个因素,以满足产品设计、生产能力和质量标准等方面的要求。本文将围绕冲压自动线规划的几个关键考虑因素提出阿童木
    的头像 发表于 01-22 14:58 319次阅读
    冲压自动<b class='flag-5'>线规划</b>的几点考虑

    解析四次位移曲线的CNC数控系统的研究

    加减速控制是CNC 系统的关键技术之一,也是实现数控系统高实时性的瓶颈。在CNC装置中,为了保证机床在启动或停止时不产生冲击、失步、超程或振荡,必须对进给电机的脉冲频率或电压进行加减速控制。
    发表于 01-19 15:02 299次阅读
    解析四次位移<b class='flag-5'>曲线</b>的CNC数控系统的研究

    汇川变频器加减速时间设置参数

    汇川变频器是一种广泛应用于工业控制领域的电气设备,用于控制电动机的转速和运行状态。在使用汇川变频器时,加减速时间设置参数是非常重要的,它决定了电动机在启动和停止过程中的速度变化情况。本文将详细介绍汇
    的头像 发表于 01-11 14:19 6428次阅读

    NMOS管的特性曲线(一)— 输出特性曲线详解

    输出特性曲线:固定VGS值,且数值大于阈值电压时,MOS晶体管的源漏电流IDS随VDS的变化曲线
    的头像 发表于 12-01 14:13 1.2w次阅读
    NMOS管的特性<b class='flag-5'>曲线</b>(一)— 输出特性<b class='flag-5'>曲线</b><b class='flag-5'>详解</b>

    全局路径规划RRT算法原理

    通往目的地的安全和无碰撞的路径。 路径规划问题可以分为两个方面: (一)全局路径规划:全局路径规划算法属于静态规划算法,根据已有的地图信息(SLAM)为基础进行路径
    的头像 发表于 11-24 15:57 950次阅读

    机器人路径基于采样的规划

    路径规划算法主要可分成两种,一种是基于搜索结果的规划,另一类便是本文中将要提及的基于采样的规划。 一般而言,基于搜索的规划(如Astar)通常是运行在栅格地图上的。当栅格的分辨率越大时
    的头像 发表于 11-16 15:45 456次阅读
    机器人路径基于采样的<b class='flag-5'>规划</b>

    拐角减速设置技术揭秘

    拐角减速应用范围: 在点胶、CNC、激光加工运动规划中,拐角减速可优化路径规划和运动轨迹,提高效率和加工品质。 技术优势: 平滑运动过渡:拐角减速
    发表于 11-14 16:14

    机器人梯形加减速轨迹时间缩放

    基于上面的原理,不管是q(t)是何种加减速算法生成,都可以使用上面的时间缩放法进行时间同步,下面以梯形减速为例进行说明,流程如下图所示。 从流程图中可以看出,只需在插补环节对时间较小的轨迹进行
    的头像 发表于 11-10 16:56 523次阅读
    机器人梯形<b class='flag-5'>加减速</b>轨迹时间缩放