Notas de estudio de control y dinámica del robot (8) ———— Control de modo deslizante de un solo manipulador basado en el observador de perturbaciones

8. Control de modo deslizante de brazo robótico único basado en observador de interferencia

8.1 Modelo de brazo robótico único

        Al introducir un observador de perturbaciones, la incertidumbre del objeto controlado y la perturbación externa se pueden estimar con precisión, reduciendo así la ganancia en el control del modo deslizante \ tiny k_ {1}y reduciendo efectivamente la vibración.

        La ecuación dinámica del brazo robótico único incierto es

                                            \ 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)

Entre ellos \ pequeño \ thetaes el ángulo de salida del sistema, \ I pequeño = \ frac {4} {3} ml ^ {2}es el momento de inercia, \ pequeña mges la gravedad, \ pequeña ues la entrada de control, \ small f_ {c} \ left (\ dot {\ theta}, u \ right)es la fricción no lineal desconocida, es el centro de masa del centro de rotación de la \ pequeño lvarilla de conexión, es la fricción viscosa del movimiento de la barra de conexión \ pequeña d, \ pequeño \ Delta Iy \ pequeño \ Delta des la incertidumbre del parámetro correspondiente El valor \ pequeño \ delta _ {0}es el coeficiente de fricción elástica.

        Cambie la fórmula (8.25) por

                                          \ 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)

        Entonces, el brazo robótico único incierto puede describirse mediante la ecuación diferencial de segundo orden:

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

        Donde \ small b = \ frac {d} {I}> 0, \ small a = \ frac {1} {I}> 0, \ pequeño ay \ pequeña blos valores son conocidos, \ pequeña frepresentativas de las incertidumbres, la suma de la expresión de la gravedad, y un término de fricción, 

                                                   \ 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 Diseño y análisis de controlador de modo deslizante para modelo de manipulador único

        La superficie de deslizamiento está diseñada como

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

Entre ellos \ pequeña e = r- \ theta, \ pequeño restá la ubicación.

        Apuntando a la fórmula del objeto controlado (8.26), la ley de control del modo deslizante de diseño es                                                     

                                                           \ 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)

Entre ellos se \ pequeño \ sombrero {f}encuentra \ pequeña fel valor estimado del término a través del observador de interferencia, y \ pequeño \ sombrero {f}es \ pequeña fel error estimado del término.

        El factor de ganancia de conmutación está \ small k_ {f}diseñado como

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

        La función de Lyapunov es

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

        debido a

                                                      \ 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

        Sustituyendo la ecuación de la ley de control (8.28) en la ecuación anterior, obtenemos:

                     \ 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) \ derecha) + f = f-k_ {1} sgn \ left (s \ right)

luego

                                                                   \ punto \ pequeño {V} _ {1} = s \ punto {s} = s \ tilde {f} -k_ {1} \ left |  s \ right | <0

        Puede verse que para estar satisfecho \ small \ dot {V} _ {1} <0, necesita estar satisfecho \ small k_ {f}> \ left |  \ tilde {f} \ right |. Si \ pequeña fel error de estimación del término \ pequeña \ tilde {f}es lo suficientemente pequeño, el coeficiente de ganancia de conmutación \ small k_ {f}puede diseñarse para que sea un valor pequeño, reduciendo así eficazmente la vibración.

8.3 Diseño de observador de interferencia

         Para observar el \ pequeña ftérmino de interferencia , el observador está diseñado como

                                               \ 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 (

Cuál \ pequeño \ sombrero {f}es la \ pequeña festimación de interferencia , \ pequeño \ sombrero {x}para la \ small \ dot {e}estimación \ pequeña \ tilde {x} = \ punto {e} - \ sombrero {x}, \ small k_ {1}y \ small k_ {2}ganancia configurada por el polo.

        La fórmula del observador de interferencia (9.30) se expresa como:

                                                                           \ 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 Ejemplo de simulación

        Suponiendo que la ecuación dinámica de un solo brazo robótico es

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

Entre ellos \ pequeño a = 5, b = 15.

        Entre los acusados, tómalo \ pequeña f = 5 + 0.15sint. La ley de control es (8.28), \ pequeño c = 3,0y el observador de interferencia toma la fórmula (8.31) y la fórmula (8.32), que se toma \ small k_ {1} = 1500, k_ {2} = 200. Tome \ pequeño M = 1, sin utilizar el observador de interferencia, para superar el \ pequeña ftérmino, se necesita un diseño \ small k_ {f} = 6.0, y los resultados de la simulación se muestran en la figura y la figura. Tome \ pequeño M = 2, use el observador de interferencia, tome \ small k_ {f} = 0,15, el resultado de la simulación se muestra como en la imagen.

                                                       Figura 9.1 Señal de entrada de control (M = 2) 

                                                   Figura 9.2 Seguimiento de posición y error de seguimiento (M = 2)

                                                   Figura 9.3 Interferencia y sus resultados de observación (M = 2) 

Programa de simulación:

programa principal de simulink: chap9_5sim.mdl

Función del controlador 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;

Función del observador de perturbaciones 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);

Función del objeto controlado 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;

Programa de dibujo: 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');

        El diagrama de simulación de Simulink y el archivo m de la función de función S correspondiente se han empaquetado y cargado en el recurso. El código se ha modificado ligeramente. Descárguelo si es necesario.

Supongo que te gusta

Origin blog.csdn.net/weixin_38452841/article/details/108787164
Recomendado
Clasificación