网易首页 > 网易号 > 正文 申请入驻

干货 | 速度曲线规划算法总结

0
分享至

“ 之前有介绍过T形曲线,本文将在原先的基础上进行进一步扩展,另外由于介绍速度曲线的论文较多,本文会在具体引用的地方给出原文出处;先对比一下两者的差别;

1 前言

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

  • T形加速 -> 匀速 -> 减速

  • S形加加速( ) -> 匀加速( ) -> 减加速( )-> 匀速( )-> 加减速( )-> 匀减速( )-> 减减速( )

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

2 理论分析

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

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

  • 加加速( ): 逐渐增大;

    • 此时

  • 匀加速( ): 达到最大;

    • 此时

  • 减加速( ): 逐渐减小;

    • 此时

  • 匀速( ): 不变化;

    • 此时

  • 加减速( ): 逐渐增大;

    • 此时

  • 匀减速( ): 达到最大;

    • 此时

  • 减减速( ): 逐渐减小;

    • 此时

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

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

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

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

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

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

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

2.1 加速度时间关系方程

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

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

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

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

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

上式中 ;

2.2 速度时间关系方程

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

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

进一步简化可以得到:
2.3 位移时间关系方程

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

简单推导

因此可以得到:


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

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

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('加速度曲线');

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

5 总结

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

推荐阅读

干货 | 揭秘肖特基二极管有什么特别之处?

干货|一文搞懂仪表放大器的特性与工作电压配置方法

干货 | 工程师必读开关电源MOS的8大损耗

干货 | 常见的四类恒流源电路分析及应用

在公众号内回复您想搜索的任意内容,如问题关键字、技术名词、bug代码等,就能轻松获得与之相关的专业技术内容反馈。快去试试吧!

由于微信公众号近期改变了推送规则,如果您想经常看到我们的文章,可以在每次阅读后,在页面下方点一个「赞」或「在看」,这样每次推送的文章才会第一时间出现在您的订阅列表里。

或将我们的公众号设为星标。进入公众号主页后点击右上角「三个小点」,点击「设为星标」,我们公众号名称旁边就会出现一个黄色的五角星(Android 和 iOS 用户操作相同)。

聚焦行业热点, 了解最新前沿

敬请关注EEWorld电子头条

http://www.eeworld.com.cn/mp/wap

复制此链接至浏览器或长按下方二维码浏览

以下微信公众号均属于

EEWorld(www.eeworld.com.cn)

EEWorld订阅号:电子工程世界

EEWorld服务号:电子工程世界福利社

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
被苹果、华为干倒的诺基亚,又杀回来了!

被苹果、华为干倒的诺基亚,又杀回来了!

大佬灼见
2026-04-19 10:28:53
山东客场2-1逆转津门虎,泽卡破门+中框,谢蒂内助攻+丢点

山东客场2-1逆转津门虎,泽卡破门+中框,谢蒂内助攻+丢点

懂球帝
2026-04-21 22:04:08
解决掉提问的人,问题就解决了?北师大“神操作”火了

解决掉提问的人,问题就解决了?北师大“神操作”火了

虔青
2026-04-20 14:07:53
成本5亿积压7年,院线都没上直接免费网播,这电影就是个笑话!

成本5亿积压7年,院线都没上直接免费网播,这电影就是个笑话!

得得电影
2026-04-20 23:05:09
严打来了,5月起8种行为直接入刑,退休老人需格外注意!

严打来了,5月起8种行为直接入刑,退休老人需格外注意!

小谈食刻美食
2026-04-21 07:52:09
1-4到5-4!小特上半场逆转3冠王,对轰破百,小将4轰50+仍落后!

1-4到5-4!小特上半场逆转3冠王,对轰破百,小将4轰50+仍落后!

刘姚尧的文字城堡
2026-04-21 21:46:07
龙珠,日本男子花160万还原布尔玛19,简直太绝了!

龙珠,日本男子花160万还原布尔玛19,简直太绝了!

动漫心世界
2026-04-21 17:33:31
姚晨发文怒斥深圳违规私转患者救护车:如此草菅人命的急救车,肯定是极少数,家中至亲曾突发急症叫过急救车,为家人抢回黄金急救时间

姚晨发文怒斥深圳违规私转患者救护车:如此草菅人命的急救车,肯定是极少数,家中至亲曾突发急症叫过急救车,为家人抢回黄金急救时间

大风新闻
2026-04-21 18:33:25
伊朗方面称霍尔木兹海峡进出通道仍处于封锁状态 任何船只都无权通行

伊朗方面称霍尔木兹海峡进出通道仍处于封锁状态 任何船只都无权通行

财联社
2026-04-21 19:33:20
湖北松滋市教育局通报“某学校要求走读生将背包改为透明书袋”:已责令涉事学校立即纠正、认真整改

湖北松滋市教育局通报“某学校要求走读生将背包改为透明书袋”:已责令涉事学校立即纠正、认真整改

环球网资讯
2026-04-21 12:17:57
4月21日俄乌最新:俄罗斯创造的神话

4月21日俄乌最新:俄罗斯创造的神话

西楼饮月
2026-04-21 20:24:18
最新!江苏人均可支配收入公布

最新!江苏人均可支配收入公布

江南晚报
2026-04-21 19:53:14
伊朗军舰军演返航曾遭美军击沉87人死亡,幸存船员讲述:毫无预警,他们的目标是杀人

伊朗军舰军演返航曾遭美军击沉87人死亡,幸存船员讲述:毫无预警,他们的目标是杀人

红星新闻
2026-04-21 18:27:32
重庆一大叔火车上崩溃大哭,同车男子买盒饭转账500元:他赶回老家见大儿子最后一面

重庆一大叔火车上崩溃大哭,同车男子买盒饭转账500元:他赶回老家见大儿子最后一面

潇湘晨报
2026-04-21 13:00:15
拼多多暴力抗法震惊全网,市值万亿巨头为何如此嚣张

拼多多暴力抗法震惊全网,市值万亿巨头为何如此嚣张

燕梳楼频道
2026-04-20 21:12:04
三国取消飞航许可,赖清德无法窜访斯威士兰

三国取消飞航许可,赖清德无法窜访斯威士兰

参考消息
2026-04-21 21:20:14
29999元!华为非凡大师女表一分钟全部售罄:供不应求

29999元!华为非凡大师女表一分钟全部售罄:供不应求

快科技
2026-04-20 22:20:13
津鲁大战争议判罚!格劳手球逃点,阿尔瓦罗飞铲送点,主裁获赞

津鲁大战争议判罚!格劳手球逃点,阿尔瓦罗飞铲送点,主裁获赞

奥拜尔
2026-04-21 21:42:50
左手幻觉,右手投毒,普通人凭什么相信AI?

左手幻觉,右手投毒,普通人凭什么相信AI?

果壳
2026-04-20 20:09:40
注意!6月1日起大医院不再随意接诊,看病不按规矩可能白跑

注意!6月1日起大医院不再随意接诊,看病不按规矩可能白跑

夜深爱杂谈
2026-04-21 07:45:20
2026-04-21 22:47:00
芯观察01
芯观察01
抢先了解最新数码、电子圈资讯
4775文章数 11547关注度
往期回顾 全部

科技要闻

创造4万亿帝国、访华20次,库克留下了什么

头条要闻

商家网售"宣威火腿"被诉侵权:我就是宣威人为何不能卖

头条要闻

商家网售"宣威火腿"被诉侵权:我就是宣威人为何不能卖

体育要闻

一到NBA季后赛,四届DPOY就成了主角

娱乐要闻

宋承炫晒宝宝B超照,宣布老婆怀孕

财经要闻

现实是最大的荒诞:千亿平台的冲突始末

汽车要闻

全新坦克700正式上市 售价42.8万-50.8万元

态度原创

手机
艺术
游戏
公开课
军事航空

手机要闻

一加Ace 6至尊版新配色公布,游戏体验持续升级

艺术要闻

任伯年写竹,真带劲

《洛奇英雄传:反抗命运》试玩体验:无愧于“洛奇英雄传”之名

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

特朗普公开对伊开战真正原因

无障碍浏览 进入关怀版