+スターの公開アカウントをフォローして、エキサイティングなコンテンツを見逃さないようにしましょう
より転載|小麦おじさん
モーターやモーションの制御に携わったことがある方は、S 字カーブが非常に重要であることを知っているはずです。次のアニメーション画像を見比べると、S 字カーブの利点がわかるでしょう。
今日は、S 速度曲線計画アルゴリズムについて説明します。
1 はじめに
S 字加減速の最も重要な特徴は、アルゴリズムの加減速曲線が文字 S のような形状であることです。S 字加減速の速度曲線が滑らかであるため、制御処理への影響が軽減され、補間処理が柔軟になります[ ^1]。実際のT字カーブは加速から定速に切り替わる過程で大きなオーバーシュートがあるため、実際のT字カーブと7分割S字カーブの過程を比較してみます。
T字型:加速→定速→減速
S字:加速度()→等加速度()→減速度()→等速( )→加速度()→等減速度()→減速度()
加速に関する上記の説明は少し複雑で読みにくいかもしれません。以下の図を参照してください。
2 理論的分析
S 字カーブの加速度は加減速中に変化するため、ここでは新しい変数gerkを導入します。
したがって、上図に対応する7 セグメント S 速度曲線では、最大加速度が 、最小加速度が と規定され、加速度の関係は次のようになります。
ジャーク(): 徐々に増加します。
現時点では
等加速度(): 最大値に達します。
現時点では
減速度(): 徐々に減少します。
現時点では
均一(): 変更なし。
現時点では
加速/減速(): 徐々に増加します。
現時点では
等速減速度(): 最大値に達します。
現時点では
減少(): 徐々に減少します。
現時点では
「は加速度の絶対値です。
したがって、通常は、システムの最大速度、最大加速度 a_{max}、およびジャークという 3 つの最も基本的なシステム パラメーターを決定する必要があります。そうすれば、全体の動作プロセスを決定できます [^2]。
最大速度: システムの最大動作能力を反映します。
最大加速度: システムの最大加速および減速能力を反映します。
Jerk : システムの柔軟性を反映します。
柔軟性が高いほど、オーバーシュートが大きくなり、実行時間が短くなります。
柔軟性が小さいほどオーバーシュートは小さくなり、実行時間は長くなります。
2.1 加速時間関係式
加速度変更プロセス全体を以下の図に具体的に示します。
ここでも、 と の関係を強調し、変数を導入します。
①
たとえば、現在の瞬間が間隔内にある場合、それが初期点として使用され、その瞬間を基準とした時間である場合、次のようになります。
加速度と時間の関係関数は次のように求めることができます。
「」
式①に従って、式②に代入すると、次のようになります。
上の式では;
2.2 速度と時間の関係式
速度と加速度は満たされ、ジャークと速度の関係は次のとおりです。
加速時間の関係と式②を組み合わせると速度曲線の関係が得られ、具体的な関係は下図のようになりますが、
さらに簡略化すると次のようになります。
2.3 変位時間関係式
変位と加加速度は次の関係を直接満たします。
単純な導出
したがって、次のことが得られます。
「ポイントをほとんど忘れてしまったので、戻ったら復習します。
最終的な変位の式を以下に示します。
3 プログラム実施のアイデア
前述したように、S 字カーブ計画では、動作プロセスを決定できるように、システムの最大速度、最大加速度 a_{max}、ジャークという 3 つの最も基本的なシステム パラメーターを決定する必要があります。ここには暗黙の条件があります。つまり、動作中に最大速度に到達できるということです。これは完全な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であり、加速領域と減速領域は対称であると仮定されます。最終的な実行結果は期待どおりです。
6 参考
[1]: Chen Youdong、Wei Honxing、Wang Qikui. CNC システム用の線形および S 字型加速および減速離散アルゴリズム [D]. 北京: 中国機械工学、2010. [2]: Guo Xingui、Li Congxin、研究S 字加減速アルゴリズム、上海交通
大学国立金型 CAD 工学研究センター、200030
------------ 終了 ------------
公式アカウントをフォローして「グループを追加」と返信するとルールに従って技術交流グループに参加でき、「1024」と返信するとさらにコンテンツが閲覧できます。
さらに共有を表示するには、「元のテキストを読む」をクリックしてください。