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

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

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

電機(jī)運(yùn)動控制算法之S速度曲線規(guī)劃算法

strongerHuang ? 來源:小麥大叔 ? 作者:小麥大叔 ? 2023-09-14 09:28 ? 次閱讀

轉(zhuǎn)自| 小麥大叔

搞過電機(jī)或運(yùn)動控制的小伙伴應(yīng)該知道,S曲線很重要,下面一張動圖對比一下,你就知道S曲線的好處。

今天就給大家描述一下S速度曲線規(guī)劃算法

1 前言

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

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

S形:加加速(T1) -> 勻加速(T2) -> 減加速(T3)-> 勻速(T4)-> 加減速(T5)-> 勻減速(T6)-> 減減速(T7)

上文在加速這塊的文字描述可能讀起來起來有點(diǎn)繞,下面看圖:
fe6dc1b4-5294-11ee-a25d-92fbcf53809c.png

2 理論分析

由于S曲線在加減速的過程中,其加速度是變化的,因此這里引入了新的一個(gè)變量 J,即加加速度
image.png

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

image.png

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

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

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

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

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

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

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

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

fe8a3970-5294-11ee-a25d-92fbcf53809c.png

image.png

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

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

結(jié)合加速度時(shí)間關(guān)系并結(jié)合② 式可以得到速度曲線關(guān)系,具體關(guān)系如下圖所示;
fe9930ce-5294-11ee-a25d-92fbcf53809c.png
進(jìn)一步簡化可以得到:
feb4bb5a-5294-11ee-a25d-92fbcf53809c.png

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

image.png

積分忘的差不多了,回去再復(fù)習(xí)一下;

最終位移的方程如下所示;
feca83ea-5294-11ee-a25d-92fbcf53809c.png

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

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

image.png
image.png

image.png

4 matlab 程序

matlab程序親測可以運(yùn)行,做了簡單的修改,因?yàn)檫@里直接給定了整個(gè)運(yùn)行過程的時(shí)間,所以需要在SCurvePara函數(shù)中求出加加速度 的值,路程為 1:

SCurvePara

function[Tf1,V,A,J,T]=SCurvePara(Tf,v,a)
T=zeros(1,7);
fori=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曲線的類型
ifT(2)

SCurveScaling

functions=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;%總行程時(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);
fori=1:N
ifi==N
a=a;
end
s(i)=SCurveScaling(t(i),V,A,J,T,TF);
Theta(i)=ThetaStart+s(i)*(ThetaEnd-ThetaStart);
ifi>1
sd(i-1)=(s(i)-s(i-1))/dt;
end
ifi>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('加速度曲線');

看到最終仿真結(jié)果和預(yù)期相同;fef5f17e-5294-11ee-a25d-92fbcf53809c.jpg

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

5 總結(jié)

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

審核編輯:湯梓紅

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

    關(guān)注

    142

    文章

    9021

    瀏覽量

    145501
  • 運(yùn)動控制
    +關(guān)注

    關(guān)注

    4

    文章

    581

    瀏覽量

    32870
  • 控制算法
    +關(guān)注

    關(guān)注

    4

    文章

    166

    瀏覽量

    21725

原文標(biāo)題:電機(jī)運(yùn)動控制算法總結(jié)

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

收藏 人收藏

    評論

    相關(guān)推薦

    DSP 速度曲線規(guī)劃 電機(jī)

    請教大家,如何做DSP 電機(jī)速度曲線規(guī)劃? eg:做一個(gè)梯形的速度曲線規(guī)劃,有一個(gè)先加速,再勻速,再減速的過程。程序上如何實(shí)現(xiàn)呢?已經(jīng)實(shí)現(xiàn)了位置環(huán)控制。本人想在位置環(huán)內(nèi)
    發(fā)表于 04-25 18:04

    動態(tài)規(guī)劃算法

    動態(tài)規(guī)劃算法資料。
    發(fā)表于 08-30 20:44

    LCS的動態(tài)規(guī)劃算法

    LCS的動態(tài)規(guī)劃算法(自底向上)
    發(fā)表于 05-25 15:06

    步進(jìn)電機(jī)T型與S速度曲線

    一種用于步進(jìn)電機(jī)速度的新算法可以實(shí)現(xiàn)速度曲線的實(shí)時(shí)參數(shù)化和計(jì)算。該算法可以在低端微控制器上運(yùn)行
    發(fā)表于 06-28 10:15

    有什么方法可以實(shí)時(shí)生成步進(jìn)電機(jī)速度曲線

    實(shí)時(shí)生成步進(jìn)電機(jī)速度曲線一種用于步進(jìn)電機(jī)速度的新算法可以實(shí)現(xiàn)速度曲線的實(shí)時(shí)參數(shù)化和計(jì)算。該
    發(fā)表于 07-07 07:18

    步進(jìn)電機(jī)驅(qū)動算法——S形加減速算法原理 精選資料下載

    目錄步進(jìn)電機(jī)S形加減速簡介七段S形加減速算法原理分析五段S形加減速算法實(shí)現(xiàn)
    發(fā)表于 07-08 09:18

    電機(jī)的梯形曲線規(guī)劃的問題

    ??電機(jī)驅(qū)動是很常見的應(yīng)用,在很多系統(tǒng)中我們都會碰到需要改變電機(jī)速度以實(shí)現(xiàn)相應(yīng)的控制功能,這就涉及到電機(jī)
    發(fā)表于 09-03 08:34

    電機(jī)S曲線規(guī)劃的問題

    ??電機(jī)驅(qū)動是很常見的應(yīng)用,在很多系統(tǒng)中我們都會碰到需要改變電機(jī)速度以實(shí)現(xiàn)相應(yīng)的控制功能,這就涉及到電機(jī)
    發(fā)表于 09-03 06:51

    實(shí)時(shí)生成步進(jìn)電機(jī)速度曲線

    步進(jìn)電機(jī)加速的新算法能夠?qū)?b class='flag-5'>速度曲線參數(shù)化并進(jìn)行實(shí)時(shí)計(jì)算。這種算法能在低端微控制器上運(yùn)行,只采用簡單的定點(diǎn)運(yùn)算,沒有數(shù)據(jù)表。它為恒加速和減速線
    發(fā)表于 01-02 11:09 ?206次下載

    工業(yè)機(jī)器人空間曲線實(shí)時(shí)軌跡規(guī)劃算法

    本文設(shè)計(jì)了一種六軸機(jī)械臂沿空間曲線行走的控制算法。算法使機(jī)器人對輸入空間曲線計(jì)算出各關(guān)節(jié)的電機(jī)
    發(fā)表于 02-23 13:52 ?49次下載

    多軸聯(lián)動線性插補(bǔ)及其_S加減規(guī)劃算法

    多軸聯(lián)動線性插補(bǔ)及其_S加減速”規(guī)劃算法
    發(fā)表于 05-03 14:23 ?15次下載

    基于路徑跟蹤方法的路徑規(guī)劃算法

    為解決拖掛式移動機(jī)器人系統(tǒng)路徑規(guī)劃算法精準(zhǔn)性低、穩(wěn)定性差和無法考慮系統(tǒng)間安全性等的問題,提出一種基于路徑跟蹤方法的路徑規(guī)劃算法。該算法融合快速拓展隨機(jī)樹( RRT)基本算法和路徑跟蹤
    發(fā)表于 12-04 14:18 ?6次下載
    基于路徑跟蹤方法的路徑<b class='flag-5'>規(guī)劃算法</b>

    如何使用S曲線進(jìn)行步進(jìn)電機(jī)加減速的控制設(shè)計(jì)資料說明

    針對不同約束條件下步進(jìn)電機(jī)加減速的控制問題,首先分析了 S 曲線算法原理,尋找 S
    發(fā)表于 03-13 08:00 ?0次下載
    如何使用<b class='flag-5'>S</b><b class='flag-5'>曲線</b>進(jìn)行步進(jìn)<b class='flag-5'>電機(jī)</b>加減速的<b class='flag-5'>控制</b>設(shè)計(jì)資料說明

    CNC系統(tǒng)中S曲線加減速規(guī)劃算法的研究實(shí)現(xiàn)

    技術(shù)難題。 優(yōu)良的升降速控制能在很大程度上提高加工精度。 對 S曲線加減速算法進(jìn)行了深入的理論和應(yīng)用研究, 通過該算法使系統(tǒng)的
    發(fā)表于 03-16 17:09 ?18次下載
    CNC系統(tǒng)中<b class='flag-5'>S</b><b class='flag-5'>曲線</b>加減速<b class='flag-5'>規(guī)劃算法</b>的研究實(shí)現(xiàn)

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

    S形加減速的最重要特征是該算法的加速度/減速度曲線的形狀如字母 S。S形加減速的
    的頭像 發(fā)表于 04-09 17:18 ?3.2w次閱讀
    詳解<b class='flag-5'>S</b>型加減速<b class='flag-5'>曲線規(guī)劃算法</b>總結(jié)