7. Control de modo deslizante basado en el método de momento calculado
El método de cálculo de par es un método más comúnmente utilizado en el control de robots, este método se basa en los valores estimados de cada elemento en el modelo de robot para diseñar la ley de control.
7.1 Descripción del sistema
El modelo del robot manipulador es:
7,20 (
Entre ellos se encuentra la matriz de inercia de masa definida positiva, la fuerza de Coriolis , la fuerza centrífuga y la gravedad.
7.2 Diseño de la ley de control
Cuando no se conocen los parámetros inerciales del robot, según el método de momento calculado, la ley de control se toma como
(7.21)
Donde , y es la estimación del parámetro de inercia calculada y el valor estimado.
Entonces, la ecuación del sistema de circuito cerrado (7.20) es
(7.22)
cual es
(7.23)
Entre ellos .
Si el valor estimado del parámetro de inercia se hace reversible, la ecuación del sistema de lazo cerrado (7.23) se puede escribir como
7,24 (
definición
Entre ellos .
Toma la superficie deslizante
Entre ellos , se encuentra la matriz diagonal. luego
tomar
(7.25)
¿Dónde está el vector a diseñar? luego
(7.26)
Seleccione
7,27 (
Entre ellos . luego
De la ecuación (7.21) y la ecuación (7.25), la ley de control del modo deslizante es
7,28)
Entre ellos .
De la ecuación de la ley de control (7.28), se puede ver que si la estimación del parámetro es más precisa, cuanto más pequeña y más pequeña, más pequeña es la vibración generada por el control de la membrana sinovial.
7.3 Ejemplo de simulación
Elija el sistema de brazo de fuerza del robot de dos articulaciones, y su modelo dinámico es:
Lo cual , . tomar
Entre ellos .
Los valores reales de los parámetros físicos del brazo robótico se muestran en la Tabla 7-1.
Tabla 7-1 Parámetros físicos de brazos robóticos duales
1 kilogramo |
1 m | El 1/2 m | 1/12 kg | 3 kg | 1 m | 2/5 kg | 0 | -7/12 | 9,81 |
Se adopta la ley de control del modo deslizante (7.28) y los comandos de posición son respectivamente . Los resultados de la simulación se muestran en las Figuras 7-9 y 7-10.
Figura 7.9 Seguimiento de posición de brazos de doble fuerza
Figura 7.10 Entrada de control de brazo de fuerza doble
Programa de simulación:
Programa principal de Simulink: chap7_4sim.mdl
Subrutina de ley de control: chap7_4ctrl.m
function [sys, x0,str,ts]= chap7_1ctrl(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
global nmn
nmn = 25*eye(2);
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 2;
sizes.NumInputs = 6;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 =[];
str =[];
ts = [0 0];
function sys = mdlOutputs(t,x,u)
global nmn
qd1 = u(1);
dqd1 = -pi*sin(pi*t);
ddqd1 = -pi^2*cos(pi*t);
qd2 = u(2);
dqd2 = pi*cos(pi*t);
ddqd2 = -pi^2*sin(pi*t)
ddqd = [ddqd1;ddqd2];
dqd = [dqd1;dqd2];
ddqd = [ddqd1;ddqd2];
q1=u(3);dq1=u(4);
q2=u(5);dq2=u(6);
dq=[dq1;dq2];
e1 = qd1-q1;
e2 = qd2-q2;
e=[e1;e2];
de1 = dqd1 - dq1;
de2 = dqd2 - dq2;
de = [de1;de2];
alfa = 6.7;beta = 3.4;
epc = 3.0;eta = 0;
m1 = 1;l1 = 1;
lc1 = 1/2;I1 = 1/12;
g = 9.8;
e1 = m1*l1*lc1-I1-m1*l1^2;
e2 = g/l1;
M = [alfa+2*epc*cos(q2)+2*eta*sin(q2),beta+epc*cos(q2)+eta*sin(q2);
beta+epc*cos(q2)+eta*sin(q2),beta];
C = [(-2*epc*sin(q2)+2*eta*cos(q2))*dq2,(-epc*sin(q2)+eta*cos(q2))*dq2;
(epc*sin(q2) - eta*cos(q2))*dq1,0];
G = [ epc*e2*cos(q1+q2)+eta*e2*sin(q1+q2)+(alfa-beta+e1)*e2*cos(q1);
epc*e2*cos(q1+q2)+eta*e2*sin(q1+q2)];
M0 = 0.6*M;
C0 = 0.6*C;
G0 = 0.6*G;
s = de+nmn*e;
d_up = 30;
xite = 0.10;
d = (d_up+xite)*sign(s);
v = ddqd +nmn*de+d;
tol = M0*v+C0*dq+G0;
sys(1) =tol(1);
sys(2) =tol(2);
Subrutina de objeto controlado: chap7_4plant.m
function [sys, x0,str,ts]= chap7_1plant(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 = 4;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 4;
sizes.NumInputs = 2;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 0;
sys = simsizes(sizes);
x0 =[0;0;0;0];
str =[];
ts = [];
function sys = mdlDerivatives(t,x,u)
q1 = x(1);dq1 = x(2);
q2 = x(3);dq2 = x(4);
dq = [dq1;dq2];
% The model is given by Slotine and Weiping Li(MIT 1987)
alfa = 6.7;beta = 3.4;
epc = 3.0;eta = 0;
m1 = 1;l1 = 1;
lc1 = 1/2; I1=1/12;
g = 9.8;
e1 = m1*l1*lc1-I1-m1*l1^2;
e2 = g/l1;
M = [alfa+2*epc*cos(q2)+2*eta*sin(q2),beta+epc*cos(q2)+eta*sin(q2);
beta+epc*cos(q2)+eta*sin(q2),beta];
C = [(-2*epc*sin(q2)+2*eta*cos(q2))*dq2,(-epc*sin(q2)+eta*cos(q2))*dq2;
(epc*sin(q2) - eta*cos(q2))*dq1,0];
G = [ epc*e2*cos(q1+q2)+eta*e2*sin(q1+q2)+(alfa-beta+e1)*e2*cos(q1);
epc*e2*cos(q1+q2)+eta*e2*sin(q1+q2)];
tol(1)=u(1);
tol(2)=u(2);
ddq = inv( M )*( tol'-C*dq-G );
sys(1) =x(2);
sys(2) =ddq(1);
sys(3) =x(4);
sys(4) =ddq(2);
function sys = mdlOutputs(t,x,u)
sys(1) = x(1);
sys(2) = x(2);
sys(3) = x(3);
sys(4) = x(4);
Subrutina de dibujo: chap7_4plot.m
close all;
t = out.t.Data;
y1 = out.y1.Data;
y2 = out.y2.Data;
tol = out.tol.Data;
figure(1);
subplot(211);
plot(t,y1(:,1),'r',t,y1(:,2),'b','linewidth',2);
xlabel('time(s)');ylabel('Angle tracking of joint 1');
subplot(212);
plot(t,y2(:,1),'r',t,y2(:,2),'b','linewidth',2);
xlabel('time(s)');ylabel('Angle tracking of joint 2');
figure(2);
subplot(211);
plot(t,tol(:,1),'r','linewidth',2);
xlabel('time(s)');ylabel('Control input 1');
subplot(212);
plot(t,tol(:,2),'r','linewidth',2);
xlabel('time(s)');ylabel('Control input 2');