TIPE- créer une simulation de l'influence du PID sur des mesures sur Python

Messages : 0

Inscription : 21 oct. 2017 15:12

Profil de l'utilisateur : Élève de lycée

TIPE- créer une simulation de l'influence du PID sur des mesures sur Python

Message par jurouv » 21 oct. 2017 15:53

Bonjour, alors le sujet de mon TIPE est d'asservir en altitude un drone et qu'il puisse s'adapter aux conditions climatiques(vent principalement) et corriger automatiquement sa trajectoire. Mon problème est que mes professeurs m'ont conseillé de créer un programme simulant la correction du drone (sur la vitesse de rotation de ses moteurs) via le PID(Proportionnel, Intégral, Dérivé), j'ai comme vous pouvez le voir une fonction de mon système je sais que je peux la résoudre avec l'algorithme d’Euler, mais je n'y arrive pas j'ai des résultats de courbe incohérents je ne comprends pas... Sachant que j'utilise pour simuler l'influence du PID des mesures aléatoires, est ce ça le problème?... si vous pouvez m'aider, merci d'avance :)

-->F(Sk,Ck)= Sk(tho-h/tho)+Ck(h/tho) où Sk est le signal de sortie et Ck la commande du PID; Ck=Kp*(consigne-mesure)+Ki*(intégrale des erreurs)+Kd*(erreur-erreurprécédente)


-->import matplotlib.pyplot as plt
def Euler(F,t0,tf,y0,n) :
t=t0
y=y0
h=(tf-t0)/float(n)
temps=[t0]
fonction=[y0]
for i in range(n) :
y=y+h*F(t,y)
t=t+h
temps.append(t)
fonction.append(y)
plt.plot(temps,fonction)
return fonction

Messages : 9679

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

Re: TIPE- créer une simulation de l'influence du PID sur des mesures sur Python

Message par fakbill » 23 oct. 2017 13:31

Sans se taper tout le détail de ton code on ne peut pas trop savoir où ça merdouille.
Tu modélises une trajectoire d’un drone. Ok. Est-ce que la modélisation donne déjà des résultats cohérents **avant d’essayer d’asservir** je ne sais quoi ?
Ensuite :
Ton modèle sors, disons, une altitude à chaque pas de temps en fonction de la puissance moteur et de je ne sais quoi. Tu essaies de l’asservir. Bon…PID…mouais…PID c’est le machin standard qu’on utilise quand on ne sait pas trop quoi faire et parce que tout le monde enseigne cette relique des temps analogiques mais soit PID. Commence par ne mettre que du P. Quand altitude est plus haute que la consigne, est ce que le P tente de la réduire ? si oui, alors continue…

« que j'utilise pour simuler l'influence du PID des mesures aléatoires »
De quoi ?? donc tu n’as pas de modèle physique ? tu as juste une fonction random qui te sort une valeur que tu appelles « altitude » et tu essayes de l’asservir ??? mais quels sont alors les paramètres sur lesquels tu fermes la boucle ????
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Messages : 0

Inscription : 21 oct. 2017 15:12

Profil de l'utilisateur : Élève de lycée

Re: TIPE- créer une simulation de l'influence du PID sur des mesures sur Python

Message par jurouv » 23 oct. 2017 18:33

Le problème est que je n'arrive pas à insérer de photo pour montrer le programme... donc on va faire par texte:
"import random
consigne=10
r=0
Mesures=[]
Erreur=[]
while r<10:
Mesures=Mesures+[random.randint(5,15)]
Erreur=Erreur+[consigne-Mesures[r]]
r=r+1

def integrer(L,h):
S=0
for i in range (1,len(L)):
S= S+L
return (S+(L[0]+L[-1])/2)*h

Somme=integrer(Erreur,0.1)
Kp=10
Kd=0
Ki=0
Commande=[]
erreurpre=0
s=0
while s<10:
Commande=Commande+[Kp*Erreur[s]+Ki*Somme+Kd*(Erreur[s]-erreurpre)]
erreurpre=Erreur[s]
s=s+1

tho=1
Te=0.1
def f(M,C,k):
return (M[k]*(tho-Te)/tho) + C[k]*Te/tho

import matplotlib.pyplot as plt

def Euler(F,t0,y0,h,n) :
t=t0
y=y0
temps=[t0]
Sortie=[y0]
for i in range(n) :
y=y+h*f(Mesures,Commande,i)
t=t+h
temps.append(t)
Sortie.append(y)
return temps,Sortie

Temps,Sortie=Euler(f,0,0,0.1,10)
plt.plot(Temps,Sortie)
plt.show()"

En fait mon collègue essaie en parallèle de faire fonctionner le drone manuellement et essaie d'obtenir les vitesses de rotation de nos moteur à l'aide d'un accéléromètre, donc tant qu'il n'arrive pas à faire fonctionner le drone manuellement je ne pourrais pas obtenir des mesures concrètes, de plus ce programme est destiné à être retranscrit sur Arduino afin "d'asservir" la vitesse des moteurs et donc l'altitude...
Et non quand j'augmente le P j'ai juste une droite affine...
Mais que ce soient des valeurs aléatoires ou de réelles mesures, de toute manière vu qu'on est sur python les mesures sont "fixes" non?

Messages : 9679

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

Re: TIPE- créer une simulation de l'influence du PID sur des mesures sur Python

Message par fakbill » 24 oct. 2017 20:16

on ne va pas lire du code comme ça.
Un PID ça a un sens pour asservir un système physique. Sur des valeurs random ça n'a pas de sens.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Messages : 0

Inscription : 21 oct. 2017 15:12

Profil de l'utilisateur : Élève de lycée

Re: TIPE- créer une simulation de l'influence du PID sur des mesures sur Python

Message par jurouv » 25 oct. 2017 12:56

En fait le but est de recréer un gif comme on voit sur Google (une idée des profs), ce qui est intéressant de faire via python donc j'essaie de me débrouiller comme je peux sur un cours que je n'ai toujours pas eu, j'ai juste besoin d'une indication je suis là dessus depuis trop de temps et c'est quelque chose d'important pour essayer d'avoir une note sympa aux oraux, je ne pense pas que pour recréer un gif on ait besoin de faire avec de vraies valeurs, donc si vous avez un conseil je suis preneuse.

Messages : 0

Inscription : 21 oct. 2017 15:12

Profil de l'utilisateur : Élève de lycée

Re: TIPE- créer une simulation de l'influence du PID sur des mesures sur Python

Message par jurouv » 25 oct. 2017 13:08

J'aimais juste l'idée d'utiliser python dans le sens où ça aurait pu plaire aux examinateurs, leur montrer en réel l'influence des 3 paramètres sur une courbe de mesure mais si c'est juste impossible et bien autant prendre le gif et ne pas m'embêter, pourtant j'imagine qu'il doit y avoir un moyen pour y parvenir non?

Messages : 9679

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

Re: TIPE- créer une simulation de l'influence du PID sur des mesures sur Python

Message par fakbill » 25 oct. 2017 17:00

"En fait le but est de recréer un gif comme on voit sur Google (une idée des profs)," dequoi?? gni??
il est possible que mon proxy filtre ton gif.
Non mais on ne fait pas du python "pour faire plaisir".
Si tu as un modèle physique qui montre comment l'altitude de ton drome régait à je ne sais quoi (la puissance moteur par exemple), alors tu peux reboucler tout ça avec un PID et tenter d'asservir l'altitude en rebouclant sur la puissance moteur.
Un PID c'est fait de base pour asservir un système qui réagit linéairement aux changement de la valeur d'entrée. Si tu veux simuler un asservissement, encore une fois, il faut commencer par simuler comment ton système réagit en boucle ouverte. faire ça sur des valeurs random n'apporte rien. Tu peux ensuite *rajouter du bruit* dans la simu de ton système asservi et voir comment l'asservissement se comporte...mais pas uniquement essayer d'asservir un vecteur random.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Répondre