7. Steuerung des Gleitmodus basierend auf der Methode des berechneten Moments
Die Methode zur Berechnung des Drehmoments wird in der Robotersteuerung häufiger verwendet. Diese Methode basiert auf den geschätzten Werten der einzelnen Elemente im Robotermodell, um das Steuergesetz zu entwerfen.
7.1 Systembeschreibung
Das Modell des Robotermanipulators lautet:
(7,20)
Darunter befinden sich die positive Trägheitsmatrix der bestimmten Masse, die Coriolis-Kraft, die Zentrifugalkraft und die Schwerkraft.
7.2 Gestaltung des Kontrollgesetzes
Wenn die Trägheitsparameter des Roboters gemäß der Methode des berechneten Moments nicht bekannt sind, wird das Steuergesetz als angenommen
(7.21)
Wobei , und ist die Trägheit Parameterschätzungen berechnet und der geschätzte Wert.
Dann lautet die Systemgleichung (7.20)
(7.22)
welches ist
(7.23)
Unter ihnen .
Wenn der geschätzte Wert des Trägheitsparameters wird aus reversibel, die Closed-Loop - System Gleichung (7.23) kann geschrieben werden als
(7.24)
Definition
Unter ihnen .
Nimm die Gleitfläche
Unter ihnen , die Diagonalmatrix. dann
nehmen
(7,25)
Wo soll der Vektor entworfen werden? dann
(7.26)
Wählen
(7.27)
Unter ihnen . dann
Aus Gleichung (7.21) und Gleichung (7.25) ergibt sich das Gleitmodus-Steuergesetz
(7.28)
Unter ihnen .
Aus der Kontrollgesetzgleichung (7.28) ist ersichtlich, dass das durch die Synovialmembransteuerung erzeugte Rattern umso kleiner ist, je genauer und kleiner der Parameterschätzwert ist, wenn der Parameterschätzwert genauer ist .
7.3 Simulationsbeispiel
Wählen Sie das zweigliedrige Roboter-Momentarmsystem. Das dynamische Modell lautet:
Welches , . nehmen
Unter ihnen .
Die tatsächlichen physikalischen Parameterwerte des Roboterarms sind in Tabelle 7-1 aufgeführt.
Tabelle 7-1 Physikalische Parameter von Doppelroboterarmen
1 kg |
1m | 1 / 2m | 1 / 12kg | 3 kg | 1m | 2 / 5kg | 0 | -7/12 | 9.81 |
Das Gleitmodus-Steuergesetz (7.28) wird übernommen, und die Positionsbefehle sind jeweils . Die Simulationsergebnisse sind in den Abbildungen 7-9 und 7-10 dargestellt.
Abbildung 7.9 Positionsverfolgung von Doppelkraftarmen
Abbildung 7.10 Eingang zur Steuerung des Zweikraftarms
Simulationsprogramm:
Simulink-Hauptprogramm: chap7_4sim.mdl
Kontrollgesetz-Unterprogramm: 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);
Unterprogramm für gesteuertes Objekt: 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);
Unterprogramm Zeichnen: 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');