0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解S型加減速曲線(xiàn)規(guī)劃算法總結(jié)

strongerHuang ? 來(lái)源:小麥大叔 ? 作者:小麥大叔 ? 2021-04-09 17:18 ? 次閱讀

做過(guò)運(yùn)動(dòng)控制的小伙伴都知道,S曲線(xiàn)很重要,下面一張動(dòng)圖對(duì)比一下,你就知道S曲線(xiàn)的好處:

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

下面分享一下S曲線(xiàn)的內(nèi)容:

1 前言

S形加減速的最重要特征是該算法的加速度/減速度曲線(xiàn)的形狀如字母 S。S形加減速的速度曲線(xiàn)平滑 ,從而能夠減少對(duì)控制過(guò)程中的沖擊,并使插補(bǔ)過(guò)程具有柔性 [^1]。由于T形曲線(xiàn)在加速到勻速的切換過(guò)程中,實(shí)際中存在較大過(guò)沖,因此這里對(duì)比一下T曲線(xiàn)和7段S曲線(xiàn)的實(shí)際過(guò)程;

T形:加速 -》 勻速 -》 減速

S形:加加速() -》 勻加速() -》 減加速()-》 勻速()-》 加減速()-》 勻減速()-》 減減速()

上文在加速這塊的文字描述可能讀起來(lái)起來(lái)有點(diǎn)繞,下面看圖:

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

2 理論

分析由于S曲線(xiàn)在加減速的過(guò)程中,其加速度是變化的,因此這里引入了新的一個(gè)變量 ,即加加速度。

因此對(duì)應(yīng)上圖的7段S速度曲線(xiàn)中,規(guī)定最大加速為,最小加速度為,則加速度的關(guān)系;

加加速():逐漸增大;

此時(shí)

勻加速():達(dá)到最大;

此時(shí)

減加速():逐漸減?。?/p>

此時(shí)

勻速():不變化;

此時(shí)

加減速(): 逐漸增大;

此時(shí)

勻減速(): 達(dá)到最大;

此時(shí)

減減速(): 逐漸減??;

此時(shí)

“為加速度的絕對(duì)值;其中

所以通常需要確定三個(gè)最基本的系統(tǒng)參數(shù) :系統(tǒng)最大速度 ,最大加速度a_{max} ,加加速度,就可以可確定整個(gè)運(yùn)行過(guò)程[^2] ;

最大速度:反映了系統(tǒng)的最大運(yùn)行能力 ;

最大加速度:反映了系統(tǒng)的最大加減速能力 ;

加加速度:反映了系統(tǒng)的柔性;

柔性越大,過(guò)沖越大,運(yùn)行時(shí)間越短;

柔性越小,過(guò)沖越小,運(yùn)行時(shí)間越長(zhǎng);

2.1 加速度時(shí)間關(guān)系方程

整個(gè)加速度變化的過(guò)程具體如下圖所示;

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

再次強(qiáng)調(diào)一下 和 的關(guān)系,另外這里再引入變量 ,

比如,當(dāng)前時(shí)刻 ,即 位于區(qū)間 ,則如果將 作為初始點(diǎn),則 為 相對(duì)于時(shí)刻的時(shí)間,則有:

下面可以得到加速度與時(shí)間的關(guān)系函數(shù),具體如下:

根據(jù) ① 式,將 代入 ② 式可以得到:

上式中 ;

2.2 速度時(shí)間關(guān)系方程

速度和加速度滿(mǎn)足 ;加加速度和速度的關(guān)系滿(mǎn)足:

結(jié)合加速度時(shí)間關(guān)系并結(jié)合② 式可以得到速度曲線(xiàn)關(guān)系,具體關(guān)系如下圖所示;

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

進(jìn)一步簡(jiǎn)化可以得到:

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

2.3 位移時(shí)間關(guān)系方程

位移 和加加速度 直接滿(mǎn)足關(guān)系如下:

簡(jiǎn)單推導(dǎo)

因此可以得到:

“積分忘的差不多了,回去再?gòu)?fù)習(xí)一下;

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

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

3 程序?qū)崿F(xiàn)的思路

正如前面所提到的,S曲線(xiàn)規(guī)劃需要確定三個(gè)最基本的系統(tǒng)參數(shù) :系統(tǒng)最大速度 ,最大加速度a_{max} ,加加速度,這樣就可以確定這個(gè)運(yùn)行過(guò)程。這里有一個(gè)隱性的條件,就是在運(yùn)行的過(guò)程中可以達(dá)到最大速度,這樣才是完整的7段S曲線(xiàn),另外這里還有一些中間參數(shù):

,因此有 ;

加加速度 ;

;

,用戶(hù)給定整個(gè)運(yùn)行過(guò)程所需要的時(shí)間;

但是通常實(shí)際過(guò)程中關(guān)心,,;

3.1 推導(dǎo)

理想狀態(tài)假設(shè)存在 和,則推導(dǎo)過(guò)程如下:

因此可以得到:

簡(jiǎn)化之后得到:

根據(jù)②式可知:

最終得到:

下面可以根據(jù)位移時(shí)間關(guān)系方程進(jìn)行離散化的程序編寫(xiě)。

假設(shè)可以到達(dá)最大速度,且用戶(hù)給定了整個(gè)過(guò)程運(yùn)行時(shí)間,則 的推導(dǎo)如下:

簡(jiǎn)化上式可以得到:

根據(jù) 代入上式可得:

3.2 的推導(dǎo)

這時(shí)候還剩下需要計(jì)算,通過(guò)已量 可以推導(dǎo)出來(lái);首先位移之間滿(mǎn)足關(guān)系如下:

其中加速區(qū)長(zhǎng)度為 ;其中減速區(qū)長(zhǎng)度為 ;

具體推導(dǎo);[^2]前面提到過(guò),,因此在=0的時(shí)候,則

這里簡(jiǎn)單推導(dǎo)一下:

根據(jù)④,⑤最終簡(jiǎn)化得到:

“:為運(yùn)行的總時(shí)間:為運(yùn)行的總路程

詳細(xì)推導(dǎo)過(guò)程如下:

因?yàn)椋?/p>

因?yàn)椋?/p>

所以,簡(jiǎn)化得到:

所以可以得到:

因?yàn)椋?/p>

將其代入可以得到:

簡(jiǎn)化得到最終結(jié)果:

4 matlab

程序matlab程序親測(cè)可以運(yùn)行,做了簡(jiǎn)單的修改,因?yàn)檫@里直接給定了整個(gè)運(yùn)行過(guò)程的時(shí)間,所以需要在SCurvePara函數(shù)中求出加加速度 的值,路程為 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);

% 根據(jù)T2和T4判斷S曲線(xiàn)的類(lèi)型

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

測(cè)試的代碼如下:TEST

%%

N = 500;

ThetaStart = 0; %起始位置

ThetaEnd = 90; %最終位置

VTheta = 90; %1 速度

ATheta = 135; %1.5 加速度

Tf = 1.8; % 總行程時(shí)間

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(‘位置曲線(xiàn)’);

subplot(3,1,2);

plot(t,sd);

legend(‘速度’);

xlabel(‘t’);

title(‘速度曲線(xiàn)’);

subplot(3,1,3);

plot(t,sdd);

legend(‘加速度’);

xlabel(‘t’);

title(‘加速度曲線(xiàn)’);

看到最終仿真結(jié)果和預(yù)期相同;

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

最后再看一下T形和S形速度曲線(xiàn)規(guī)劃的效果對(duì)比:

5 總結(jié)

本文只對(duì)7段的S曲線(xiàn)規(guī)劃做了詳細(xì)的推導(dǎo)和介紹,matlab中的程序?qū)τ?段和5段都有做實(shí)現(xiàn),很多是在理想情況下進(jìn)行推導(dǎo)的,初始速度默認(rèn)為0,終止速度也為0,并且假設(shè)加減速區(qū)域相互對(duì)稱(chēng)。最終運(yùn)行結(jié)果符合預(yù)期效果。

“文中難免有錯(cuò)誤和紕漏之處,請(qǐng)大佬們不吝賜教創(chuàng)作不易,如果本文幫到了您;

6 參考

[^1]:陳友東 魏洪興 王琦魁。數(shù)控系統(tǒng)的直線(xiàn)和 S 形加減速離散算法[D]。北京:中國(guó)機(jī)械工程,2010.

[^2]:郭新貴 李從心 S 曲線(xiàn)加減速算法研究 上海交通大學(xué)國(guó)家模具 CAD 工程研究中心 , 200030
編輯:lyn

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • matlab
    +關(guān)注

    關(guān)注

    185

    文章

    2980

    瀏覽量

    230733
  • 運(yùn)動(dòng)控制
    +關(guān)注

    關(guān)注

    4

    文章

    585

    瀏覽量

    32915

原文標(biāo)題:硬核 | S速度曲線(xiàn)規(guī)劃算法總結(jié)

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何選擇合適的AWG線(xiàn)規(guī)

    在電氣工程和電子制造中,線(xiàn)規(guī)的選擇是一個(gè)關(guān)鍵因素,它直接影響到系統(tǒng)的安全性、效率和成本。AWG(美國(guó)線(xiàn)規(guī))是一種廣泛使用的線(xiàn)規(guī)系統(tǒng),它根據(jù)導(dǎo)線(xiàn)的直徑來(lái)分類(lèi)。選擇合適的AWG線(xiàn)規(guī)需要考慮
    的頭像 發(fā)表于 01-13 16:36 ?256次閱讀

    ZMC600E運(yùn)動(dòng)控制器T、S速度規(guī)劃詳解

    導(dǎo)讀想深入了解ZMC600E運(yùn)動(dòng)控制器的速度規(guī)劃嗎?T線(xiàn)性加減速簡(jiǎn)潔高效,S過(guò)渡自然減震,避免沖擊。通過(guò)合理的
    的頭像 發(fā)表于 12-30 11:40 ?143次閱讀
    ZMC600E運(yùn)動(dòng)控制器T<b class='flag-5'>型</b>、<b class='flag-5'>S</b><b class='flag-5'>型</b>速度<b class='flag-5'>規(guī)劃</b><b class='flag-5'>詳解</b>

    減速電機(jī)概述了解多少?

    減速電機(jī)的工作原理是通過(guò)把電動(dòng)機(jī)的動(dòng)力通過(guò)齒輪(或者蝸輪蝸桿)減速機(jī),大大降低轉(zhuǎn)速,從而增加減速電機(jī)的輸出扭矩,以滿(mǎn)足機(jī)械設(shè)備工作的需要。此動(dòng)力傳動(dòng)設(shè)備有個(gè)不可忽視的核心——“增力減速
    發(fā)表于 12-23 15:16

    多臺(tái)倉(cāng)儲(chǔ)AGV協(xié)作全局路徑規(guī)劃算法的研究

    多AGV動(dòng)態(tài)路徑規(guī)劃需解決沖突避免,核心在整體協(xié)調(diào)最優(yōu)。規(guī)劃時(shí)考慮道路設(shè)計(jì)、擁堵、最短路徑和交通管制,用A*算法避免重復(fù)路徑和轉(zhuǎn)彎,同時(shí)需交通管制防相撞。創(chuàng)新響應(yīng)需求是關(guān)鍵,良好路徑規(guī)劃
    的頭像 發(fā)表于 10-28 17:38 ?328次閱讀
    多臺(tái)倉(cāng)儲(chǔ)AGV協(xié)作全局路徑<b class='flag-5'>規(guī)劃算法</b>的研究

    步進(jìn)電機(jī)如何在加減速過(guò)程中控制技術(shù)?

    步進(jìn)電機(jī)是一種將電脈沖信號(hào)轉(zhuǎn)換為角位移或線(xiàn)位移的電機(jī),廣泛應(yīng)用于各種自動(dòng)化控制系統(tǒng)中。在加減速過(guò)程中,步進(jìn)電機(jī)的控制技術(shù)至關(guān)重要,以確保系統(tǒng)的穩(wěn)定性和精確性。 加減速控制原理 步進(jìn)電機(jī)的加減速控制
    的頭像 發(fā)表于 10-23 10:02 ?456次閱讀

    伺服電機(jī)加減速機(jī)慣量怎么計(jì)算

    伺服電機(jī)加減速機(jī)系統(tǒng)是現(xiàn)代工業(yè)自動(dòng)化領(lǐng)域中常見(jiàn)的一種傳動(dòng)裝置,它通過(guò)將伺服電機(jī)的高速旋轉(zhuǎn)轉(zhuǎn)化為減速機(jī)的低速大扭矩輸出,實(shí)現(xiàn)對(duì)負(fù)載的精確控制。在設(shè)計(jì)和使用伺服電機(jī)加減速機(jī)系統(tǒng)時(shí),了解其慣量特性是非
    的頭像 發(fā)表于 06-14 10:54 ?3499次閱讀

    stm32控制步進(jìn)電機(jī)加減速的穩(wěn)定性?

    ,加減速的時(shí)候,在固定的時(shí)間內(nèi)增加或者減少固定的轉(zhuǎn)速。網(wǎng)上看了s曲線(xiàn)或者梯形加減速的一些介紹,也仿照s
    發(fā)表于 05-06 07:21

    STM32的電機(jī)庫(kù)適合用來(lái)做步進(jìn)電機(jī)嗎? 里面包含有加減速算法沒(méi)呢?

    STM32 的電機(jī)庫(kù) 適合用來(lái)做步進(jìn)電機(jī)嗎? 里面包含有加減速算法沒(méi)呢?
    發(fā)表于 05-06 07:02

    如何用stm32f103zet6控制伺服電機(jī)的加減速運(yùn)動(dòng)?

    想用stm32f103zet6控制伺服電機(jī)的加減速運(yùn)動(dòng),不知該怎么做,請(qǐng)大神指教。具體情況是有個(gè)機(jī)械凸輪,有一根頂桿頂著凸輪邊沿,隨著凸輪轉(zhuǎn)動(dòng)及其外徑的變化,水平頂桿會(huì)沿水平方向作直線(xiàn)運(yùn)動(dòng)?,F(xiàn)在可以
    發(fā)表于 04-30 08:00

    基于FPGA的常見(jiàn)的圖像算法模塊總結(jié)

    意在給大家補(bǔ)充一下基于FPGA的圖像算法基礎(chǔ),于是講解了一下常見(jiàn)的圖像算法模塊,經(jīng)過(guò)個(gè)人的總結(jié),將知識(shí)點(diǎn)分布如下所示。
    的頭像 發(fā)表于 04-28 11:45 ?628次閱讀
    基于FPGA的常見(jiàn)的圖像<b class='flag-5'>算法</b>模塊<b class='flag-5'>總結(jié)</b>

    什么是伺服減速電機(jī)?松下伺服減速電機(jī)選型怎么選?

    伺服減速電機(jī),又稱(chēng)減速伺服電機(jī),一般是指伺服電機(jī)減速機(jī),安裝在伺服電機(jī)上,用來(lái)降低轉(zhuǎn)速,提升扭矩,匹配慣量,具有高剛性、高精度、高扭矩、免維護(hù)等特點(diǎn)。 什么是伺服減速電機(jī)?伺服
    的頭像 發(fā)表于 03-05 08:43 ?950次閱讀
    什么是伺服<b class='flag-5'>減速</b>電機(jī)?松下伺服<b class='flag-5'>減速</b>電機(jī)選型怎么選?

    如何理解ABB低壓斷路器的保護(hù)曲線(xiàn)

    是否能夠及時(shí)保護(hù)電氣設(shè)備免受故障電流的損害。 首先,我們來(lái)了解一下ABB低壓斷路器的保護(hù)曲線(xiàn)的分類(lèi)。根據(jù)國(guó)際標(biāo)準(zhǔn),ABB低壓斷路器的保護(hù)曲線(xiàn)分為B、C和D三種類(lèi)型。B曲線(xiàn)適用于保護(hù)電
    的頭像 發(fā)表于 02-04 16:18 ?1431次閱讀

    諧波減速機(jī)和行星減速機(jī)區(qū)別是什么?

    諧波減速機(jī)和行星減速機(jī)區(qū)別是什么? 諧波減速機(jī)和行星減速機(jī)是兩種常見(jiàn)的減速器類(lèi)型,它們?cè)诮Y(jié)構(gòu)、工作原理以及應(yīng)用領(lǐng)域上存在一些顯著的區(qū)別。 首
    的頭像 發(fā)表于 01-26 14:56 ?2049次閱讀

    沖壓自動(dòng)線(xiàn)規(guī)劃的幾點(diǎn)考慮

    在制造業(yè)中,沖壓自動(dòng)線(xiàn)規(guī)劃是確保高效生產(chǎn)和卓越質(zhì)量的關(guān)鍵環(huán)節(jié)。成功的規(guī)劃需要綜合考慮多個(gè)因素,以滿(mǎn)足產(chǎn)品設(shè)計(jì)、生產(chǎn)能力和質(zhì)量標(biāo)準(zhǔn)等方面的要求。本文將圍繞沖壓自動(dòng)線(xiàn)規(guī)劃的幾個(gè)關(guān)鍵考慮因素提出阿童木
    的頭像 發(fā)表于 01-22 14:58 ?394次閱讀
    沖壓自動(dòng)<b class='flag-5'>線(xiàn)規(guī)劃</b>的幾點(diǎn)考慮

    解析四次位移曲線(xiàn)的CNC數(shù)控系統(tǒng)的研究

    加減速控制是CNC 系統(tǒng)的關(guān)鍵技術(shù)之一,也是實(shí)現(xiàn)數(shù)控系統(tǒng)高實(shí)時(shí)性的瓶頸。在CNC裝置中,為了保證機(jī)床在啟動(dòng)或停止時(shí)不產(chǎn)生沖擊、失步、超程或振蕩,必須對(duì)進(jìn)給電機(jī)的脈沖頻率或電壓進(jìn)行加減速控制。
    發(fā)表于 01-19 15:02 ?420次閱讀
    解析四次位移<b class='flag-5'>曲線(xiàn)</b>的CNC數(shù)控系統(tǒng)的研究