ロボットダイナミクスと制御研究ノート(8)————外乱オブザーバーに基づくシングルマニピュレータースライディングモード制御

8.干渉オブザーバーに基づく単一のロボットアームスライドモード制御

8.1シングルロボットアームモデル

        外乱オブザーバを導入することにより、制御対象物の不確実性や外乱を正確に推定することができ、スライディングモード制御のゲインを低減し、\ tiny k_ {1}チャタリングを効果的に低減します。

        不確実な単一のロボットアームの動的方程式は次のとおりです。

                                            \ small \ left(I + \ Delta I \ right)\ ddot {\ theta} + \ left(d + \ Delta d \ right)\ dot {\ theta} + \ delta _ {0} \ theta + mglcos \ theta = u -f_ {c} \ left(\ dot {\ theta}、u \ right)                    (8.25)

これらの中で\ small \ theta、システム出力角度である\ small I = \ frac {4} {3} ml ^ {2}慣性モーメントであり、\ small mg重力は、\ small u制御入力であり、\ small f_ {c} \ left(\ dot {\ theta}、u \ right)未知の非線形摩擦は、回転中心からの質量の中心である\ small lコネクティングロッド、コネクティングロッドの動きの粘性摩擦であり\ small d\ small \ Delta Iそして\ small \ Delta d対応するパラメータの不確実性であります値\ small \ delta _ {0}は弾性摩擦係数です。

        式(8.25)をに変更します

                                          \ small \ ddot {\ theta} = \ frac {1} {I} u- \ frac {d} {I} \ dot {\ theta}-\ frac {\ Delta I} {I} \ ddot {\ theta} -\ frac {\ Delta d} {I} \ dot {\ theta}-\ frac {\ delta _ {0}} {I} {\ theta}-\ frac {1} {I} mglcos \ theta- \ frac {1} {I} f_ {c} \ left(\ dot {\ theta}、u \ right)

        次に、不確実な単一のロボットアームは、2次微分方程式で表すことができます。

                                                                       \ small \ ddot {\ theta} = -b \ dot {\ theta} + au-f                                                 (8.26)

\ small b = \ frac {d} {I}> 0\ small a = \ frac {1} {I}> 0\ small a\ small b知られている値は、\ small f不確実性を表す、重力項の和、及び摩擦用語、 

                                                   \ small f = \ frac {\ Delta I} {I} \ ddot {\ theta} + \ frac {\ Delta d} {I} \ dot {\ theta} + \ frac {\ delta _ {0}} {I } \ theta + \ frac {1} {I} mglcos \ theta + \ frac {1} {I} f_ {c} \ left(\ hat {\ theta}、u \ right) 

8.2シングルマニピュレータモデル用のスライディングモードコントローラの設計と分析

        滑り面は次のように設計されています

                                                                           \ small s = ce + \ dot {e}、c> 0                                               (8.27)

その中\ small e = r- \ theta\ small r、場所です。

        制御対象式(8.26)を目指して、設計スライディングモード制御則は                                                     

                                                           \ small u(t)= \ frac {1} {a} \ left(c \ dot {e} + \ ddot {r} + b \ dot {\ theta} + \ hat {f} + k_ {1} sgn \ left(s \ right)\ right)                              (8.28)

その中に\ small \ hat {f}\ small f干渉オブザーバーによる項の推定値と、の推定誤差\ small \ hat {f}があり\ small fます。

        スイッチングゲイン係数は次の\ small k_ {f}ように設計されています

                                                                            \ small k_ {f}> \ left |  \ tilde {f} \ right |                                                          (8.29)

        リャプノフ関数は

                                                                            \ small V_ {1} = \ frac {1} {2} s ^ {2}

        のため

                                                      \ small \ dot {s} = c \ dot {e} + \ ddot {e} = c \ dot {e} + \ ddot {r}-\ ddot {\ theta} = c \ dot {e} + \ ddot {r} + b \ dot {\ theta} -au + f

        制御法則の式(8.28)を上記の式に代入すると、次のようになります。

                     \ tiny \ dot {s} = c \ dot {e} + \ ddot {r} + b \ dot {\ theta}-\ left(c \ dot {e} + \ ddot {r} + b \ dot {\ theta} + \ hat {f} + k_ {f} sgn \ left(s \ right)\ right)+ f =-\ left(\ hat {f} + k_ {1} sgn \ left(s \ right)\右)+ f = f-k_ {1} sgn \ left(s \ right)

その後

                                                                   \ small \ dot {V} _ {1} = s \ dot {s} = s \ tilde {f} -k_ {1} \ left |  s \ right | <0

        満たされるためには\ small \ dot {V} _ {1} <0、満たされる必要があることがわかり\ small k_ {f}> \ left |  \ tilde {f} \ right |ます。\ small fの推定誤差\ small \ tilde {f}十分に小さい場合、スイッチングゲイン係数\ small k_ {f}を小さい値に設計することで、チャタリングを効果的に低減できます。

8.3干渉オブザーバーの設計

         干渉\ small fを観察するために、オブザーバーは次のように設計されています。

                                               \ small \ begin {bmatrix} \ dot {\ hat {f}} \\ \ dot {\ hat {x}} \ end {bmatrix} = \ begin {bmatrix} 0&0 \\ 1&0 \ end {bmatrix } \ begin {bmatrix} \ hat {f} \\ \ hat {x} \ end {bmatrix} + \ begin {bmatrix} 0 \\ 1 \ end {bmatrix} \ left(\ ddot {r} + b \ dot {\ theta} \ right)+ \ begin {bmatrix} 0 \\ -a \ end {bmatrix} u + \ begin {bmatrix} k_ {1} \\ k_ {2} \ end {bmatrix} \ left [\ dot { e}-\ hat {x} \ right]              (8.30)

これ\ small \ hat {f}は、\ small f推定\ small \ hat {x}の干渉推定\ small \ dot {e}\ small \ tilde {x} = \ dot {e}-\ hat {x}\ small k_ {1}あり\ small k_ {2}、極によって構成されたゲインです。

        干渉オブザーバーの式(9.30)は次のように表されます。

                                                                           \ small \ dot {\ hat {f}} = k_ {1} \ tilde {x}                                                          (8.31)

                                                              \ small \ dot {\ hat {x}} = \ hat {f} -au + k_ {2} \ tilde {x} + \ ddot {r} + b \ dot {\ theta}                                            (8.32)

8.4シミュレーション例

        単一のロボットアームの動的方程式が

                                                                   \ small \ ddot {\ theta} = -b \ dot {\ theta} + au-f                                                   (8.33)                            

それらの中で\ small a = 5、b = 15

        被告人の中で、それを取る\ small f = 5 + 0.15sint制御則は(8.28)で\ small c = 3.0あり、干渉オブザーバーは式(8.31)と式(8.32)を取り\ small k_ {1} = 1500、k_ {2} = 200ます。テイク\ small M = 1克服するために、干渉オブザーバを使用せずに、\ small f用語を、設計が必要とされ\ small k_ {f} = 6.0、およびシミュレーション結果を図と図に示しています。テイク\ small M = 2、干渉オブザーバーを採用、テイク\ small k_ {f} = 0.15シミュレーション結果は写真のように表示されます。

                                                       図9.1制御入力信号(M = 2) 

                                                   図9.2位置追跡と追跡エラー(M = 2)

                                                   図9.3干渉とその観測結果(M = 2) 

シミュレーションプログラム:

simulinkメインプログラム:chap9_5sim.mdl

コントローラSの機能:chap9_5ctrl.m

function [sys,x0,str,ts]=spacemodel(t,x,u,flag)
switch flag,
case 0,
      [sys, x0,str,ts] = mdlInitializeSizes;
case 3,
      sys = mdlOutputs(t,x,u);
case{2,4,9}
      sys = [];
otherwise
      error(['Unhandled flag = ',num2str(flag)]);
end 

function [sys,x0,str,ts] = mdlInitializeSizes
sizes = simsizes;
sizes.NumOutputs       =1;
sizes.NumInputs        =5;
sizes.DirFeedthrough   =1;
sizes.NumSampleTimes   =1;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [0 0];

function sys = mdlOutputs(t,x,u)
r = u(1);
dr = cos(t);
ddr = -sin(t);
th = u(2);
dth = u(3);
fp = u(5);

e = r-th;
de = dr - dth;
c = 3;
s = de+c*e;

b = 15;
a = 5;

M = 2;
if M ==1             %  Traditional with SMC 
    Kf = 6;
%     Kf = 0.15;
    ut = 1/a*(c*de+ddr+b*dth+Kf*sign(s));
elseif M ==2         % SMC with observer
    Kf = 0.15;
    ut = 1/a*(c*de+ddr+b*dth+1*fp+Kf*sign(s));
end
sys(1) = ut;

外乱オブザーバーS関数:chap9_5obv.m

function [sys,x0,str,ts]=s_function(t,x,u,flag)
switch flag,
case 0,
      [sys, x0,str,ts] = mdlInitializeSizes;
case 1,
      sys = mdlDerivatives(t,x,u);
case 3,
      sys = mdlOutputs(t,x,u);
case{2,4,9}
      sys = [];
otherwise
      error(['Unhandled flag = ',num2str(flag)]);
end 

function [sys,x0,str,ts] = mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates    =2;
sizes.NumDiscStates    =0;
sizes.NumOutputs       =1;
sizes.NumInputs        =4;
sizes.DirFeedthrough   =0;
sizes.NumSampleTimes   =0;
sys = simsizes(sizes);
x0 = [0;0];
str = [];
ts = [];

function sys = mdlDerivatives(t,x,u)
r = sin(t);
dr = cos(t);
ddr = -sin(t);

ut = u(1);
dth = u(3);
x2 = dr - dth;
K1 = 1500;
K2 = 200;
a =5;b = 15;
sys(1) = K1*(x2-x(2));
sys(2) = x(1)-b*x(2)-a*ut+K2*(x2-x(2))+ddr+b*dth+b*x(2);
function sys = mdlOutputs(t,x,u)


sys(1) = x(1);

制御対象オブジェクトS関数:chap9_5plant.m

function [sys,x0,str,ts] = s_function(t,x,u,flag)
switch flag,
case 0,
      [sys,x0,str,ts] = mdlInitializesSizes;
case 1,
      sys = mdlDerivatives(t,x,u);
case 3,
      sys = mdlOutputs(t,x,u);
case{2,4,9}
      sys = [];
otnerwise
      error(['Unhandled flag = ',num2str(flag)]);
end 

function [sys,x0,str,ts] = mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates    =2;
sizes.NumDiscStates    =0;
sizes.NumOutputs       =3;
sizes.NumInputs        =1;
sizes.DirFeedthrough   =0;
sizes.NumSampleTimes   =0;
sys = simsizes(sizes);
x0 = [0;0];
str = [];
ts = [];

function sys = mdlDerivatives(t,x,u)
ut = u(1);
b = 15;
a = 5;

f = 5+0.15*sin(t);
ddth = -b*x(2)+a*ut-f;

sys(1)=x(2);
sys(2)=ddth;
function sys = mdlOutputs(t,x,u)
f = 5+0.15*sin(t);
sys(1) = x(1);
sys(2) = x(2);
sys(3) = f;

描画プログラム:chap9_5plot.m

close all;

figure(1);
subplot(211);
plot(t,y(:,1),'r',y(:,2),'b');
xlabel('time(s)');
ylabel('Position tracking');
subplot(212);
plot(t,y(:,1)-y(:,2),'r');
xlabel('time(s)');
ylabel('Position tracking error');

figure(2);
plot(t,ut(:,1),'r');
xlabel('time(s)');
ylabel('Control input');

figure(3);
plot(t,f(:,3),'r',t,f(:,4),'b');
xlabel('time(s)');
ylabel('f and fp');

        Simulinkシミュレーションダイアグラムと対応するS-Function関数のmファイルがパッケージ化され、リソースにアップロードされています。コードが少し変更されています。必要に応じてダウンロードしてください。

おすすめ

転載: blog.csdn.net/weixin_38452841/article/details/108787164