Bonjour,
dans le cadre de mon projet de robotique, je dois trouver les équations dynamiques et la fonction de transfert d'un robot à 2 bras, sachant que je vais exercer un régulateur PID dessus, et que je travaille avec les angles des bras du robot (voir image).
Je pense avoir trouver les équations dynamiques en utilisant Lagranges, mais je n'arrive pas à trouver la fonction de transfert afin de la mettre par la suite sur simulink.
Voici mon code actuel concernant ma fonction "dynamics"
Merci d'avance pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % dynamics2: describes the dynamics of the robot, by using the Lagranges %equations %ref: %http://www.wseas.us/e-library/transactions/control/2011/54-210.pdf %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [A,B,D,M]=dynamics(teta_v,teta_a,... l1,l2,teta) %teta = [teta1 teta2] %position vector %teta_v =>veocity matrix %teta_a =>acceleration matrix %equations of dynamics : %[M11 M12;M21 M22]*teta_a' = [V1 V2]' + [W1 W2]' = [tau1 tau2] %with M(teta) is the inertia matrix %with V(teta,teta_v) the centripetal matrix %with W(teta) the gravity vector %tau the generalized force vector g=6.643848*10^(-11); %magnitude of gravitational acceleration m1=1500; m2=1000; %mass of the links, unit: gram ml=5000; %mass of the payload r1=l1/2; %distance between joint 1 and the center of mass of link 1 r2=l2/2; %distance between joint 2 and the center of mass of link 2 J1=(1/12)*m1*l1^2; %moment of inertia of link 1 J2=(1/12)*m2*l2^2; %moment of inertia of link 2 teta1=(teta(1)*pi)/180; %conversion degree/radian teta2=(teta(2)*pi)/180; c1=cos(teta(1)); c2=cos(teta(2)); c12=cos(teta(1)+teta(2)); s1=sin(teta(1)); s2=sin(teta(2)); s12=sin(teta(1)+teta(2)); A=[0 1;0 0]; C=[1 0]; I=eye(2); %Identity matrice 2*2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Inertia matrix %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% M11 = J1 + J2 + m1*r1^2 + m2*l1^2 + m2*r2^2 + 2*m2*l1*r2*c2 + ml*l1^2+... ml*l2^2 + 2*ml*l1*l2*c2; M12 = J2 + m2*r2^2 + 2*m2*l1*r2*c2 + ml*l2^2 + ml*l1*l2*c2; M21 = J2 + m2*r2^2 + m2*l1*r2*c2 + ml*l2^2 + ml*l1*l2*c2; M22 = J2 + m2*r2^2 + ml*l2^2; M = [M11 M12;M21 M22]; det = M11*M22 + M21*M12; %determinant of M if det==0 %calculation of M^-1 error else Minv = (1/det) * [M22 -M12;-M21 M12]; end Minv=Minv'; zero=[0 0;0 0]; B=[zero Minv]'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Coriolis/centripetal matrix %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% V1 = (m2*l1*r2 + ml*l1*l2)*(2*teta_v(1) - teta_v(2)) * teta_v(2) * s2; V2 = (m2*l1*r2 + ml*l1*l2) * teta_v(2) * s2; V = [V1 V2]'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Gravity matrix %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% W1 = (m1*g*r1 + m2*g*l1 + ml*g*l1)*s1 + (m2*g*r2 + ml*g*l2)*s12; W2 = (m2*g*r2 + ml*g*l2)*s12; W = [W1 W2]'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Equations of the dynamics %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% D = [V1 + W1;V2 + W2];
Partager