J'ai un mini projet pendule inversé commander par la logique flou,
je fait le programmation au matlab,mais j'ai trouvé un problème et au même Temp je sais je ne compris pas ce problème
l'objective de mini projet est
Mettre la consigne à 180° (pendule à la verticale et dirigé vers le haut) et regarder avec
quelle dynamique le système évolue. Proposer et tester des modifications (sur la définition des
ensembles*flous*ou*sur*la*base*de*règles)*afin*d'améliorer*cette*dynamique
je vous donne les étapes de mon travail
j'ai créée mon contrôleur flou est les entrés tetha et tetha point la sortie est la force
2/j'ai créée une fonction pour calculer le modèle mathématique de pendule
3/et en fin mon programme principale qui contient
l'appel de contrôle flou
déclaration des paramètres initiales
et la fonction ode45 pour résoudre la fonction
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 fismat=readfis('invpendulum3.fis'); %Conditions initiales x1=0.3; %theta x2=0.0; %dtheta x3=0.1; %x x4=0.0; %dx h=0.02; T=0; G=10.0; while T < 20 %calcul de la commande force=G*evalfis([x1,x2],fismat); x0=[x1,x2,x3,x4,]; %application de la commande [t,x]=ode45(@invpendmodel,[0,h],x0); n=length(x); x0=x(n,:); x1=x0(1); x2=x0(2); x3=x0(3); x4=x0(4); T=T+h; end forceAidez moi s.v.p
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 function dx=invpendmodel(t,x) m=0.5; M=1; g=9.81; l=0.3; f0.01; k=10; dx1=x(2); force=x(5); dx1=x(2); c=cos(x(3)); s=sin(x(3)); dx2=-(f/M)*x(2)-(m*g/M)*x(3)+(K/M*l)*x(4)+(1/M)*x(5); dx3=x(4); dx4=(f/M*l)*x(2)+(((M+m)*g)/M*l)*x(3)-(((M+m)*K)/(M*m*l*l))*x(4)-(1/M*l)*x(5); dx=[dx1,dx2,dx3,dx4]; return
Partager