Régulateur PID

Bonjour à tous.

Je suis actuellement entrain de comprendre les régulateurs PID et je pense avoir compris comment ça marche. Mais il reste un coin d'ombre que je n'arrive pas à éclaircir...

Sur cette image on voit tout le processus de traitement de l'information mais je ne vois pas comment on peut détecter une erreur... Par exemple, je dis "envoie la valeur x pour mes moteurs" les moteurs tournent à une certaine vitesse mais il peut arriver qu'il est des perturbations par exemple 2 moteurs seront à 140 et les deux autres à 110. Eh bien c'est la que je ne comprends pas comment l'algorithme détecte ce non équilibre... Sur le schéma on voit à la fin du processus qu'il y a une mesure mais comment mon arduino est censé mesurer la vitesse de rotation de mon moteur...Enfin comment détecte on ce désequilibre ??

Merci d'avance..

Salut,

Pour faire de l'asservissement ou de la régulation de vitesse, il faut au préalable mesurer la vitesse de rotation du ou des moteur(s), donc passer par des capteurs de vitesses type codeur absolu (disque avec des trous + capteur à fourche), tu auras un signal qui sera l'image de la vitesse de rotation.

Exemple ici :

Encodeur Rotatif

Merci d'avoir répondu si vite :slight_smile:

Je me disais bien qu'il manquait un truc... Mais c'est quoi ce codeur absolu ? Enfaite pour être plus clair c'est pour mon drone qui a 4 moteurs et des ESC...tu penses qu'il y a déjà un logiciel d'encodage dans des ESC ? sinon comment faire pour fixer ça à mes moteurs ?

Salut,

Il n'est pas possible de fixer un codeur sur les moteurs, donc pas de mesure de leurs vitesses de rotation, les ESC sont juste la pour augmenter ou baisser la vitesse de rotation en fonction de la position de la manette sur la radio commande.

Pour stabiliser le drone, il faut passer par un ou des accéléromètres , puis de la programmation , pour faire varier la vitesse de chaque moteur de manière indépendante afin de contrôler le drone.

@+

J'utilise un gyroscope pour stabiliser mon drone...mais je souhaite utiliser le PID pour avoir exactement la même valeur de rotation que j'envoie ...mais ce que tu dis signifie que je dois laisser tomber l'idée du PID...cependant j'ai vu beaucoup de personnes utiliser le PID pour harmoniser les vitesses de rotations de leurs 4 moteurs...

Je sais comment programmer mon gyroscope pour stabiliser mon drone mais étant donnée qu'il n'y a pas la même vitesse de rotation sur mes 4 moteurs alors que je leur envoie tous la même donnée j'en ai conclu qu'il fallait un PID car sinon même avec un gyroscope qui surveille l'équilibre il n'y aura jamais la même vitesse sur mes 4 moteurs....

Il est quasiment impossible de mesurer la vitesse de rotation des moteurs, donc il faut trouver au autre moyen pour avoir la même vitesse de rotation.

Ta chaine de commande est faite comme ça ? :

radio commande --> recepteur radio --->arduino+Gyro --->ESC---> Moteurs.

Une solution que j'avais essayer de mettre en œuvre mais qui n'a pas abouti(trop de variation dans la vitesse des moteurs pour un régime normalement constant) , c'est de mesurer avec un tachymètre optique, sur un banc la vitesse de rotation de chaque moteur avec son hélice, puis dans le programme arduino faire en sorte que tous les moteurs tournent à la même vitesse, en jouant sur la commande envoyé aux différents ESC.

En gros si la commande des gaz est à 50% , faire une mesure de vitesse avec tachymètre, par exemple

M1 : 12000 tr/min
M2 : 12500
M3 : 11900
M4 : 12100

Prendre comme référence M1, puis pour les autres moteurs faire en sorte de rajouter ou supprimer de l'information au niveau des signaux de commande des différents ESC.

hameau:
Il est quasiment impossible de mesurer la vitesse de rotation des moteurs, donc il faut trouver au autre moyen pour avoir la même vitesse de rotation.

Ta chaine de commande est faite comme ça ? :

radio commande --> recepteur radio --->arduino+Gyro --->ESC---> Moteurs.

Oui c'est ça :slight_smile:

hameau:
Une solution que j'avais essayer de mettre en œuvre mais qui n'a pas abouti(trop de variation dans la vitesse des moteurs pour un régime normalement constant) , c'est de mesurer avec un tachymètre optique, sur un banc la vitesse de rotation de chaque moteur avec son hélice, puis dans le programme arduino faire en sorte que tous les moteurs tournent à la même vitesse, en jouant sur la commande envoyé aux différents ESC.

En gros si la commande des gaz est à 50% , faire une mesure de vitesse avec tachymètre, par exemple

M1 : 12000 tr/min
M2 : 12500
M3 : 11900
M4 : 12100

Prendre comme référence M1, puis pour les autres moteurs faire en sorte de rajouter ou supprimer de l'information au niveau des signaux de commande des différents ESC.

J'ai pensé la même chose...dommage que ça n'est pas marché :confused:

Sinon tu dis qu'il est impossible de mesurer une vitesse de rotation mais en es-tu sur ? regarde ça et dis moi ce que tu en penses s'il te plait ? Penses-tu que ce serait réalisable sur un drone ? Genre la roue codeuse fixée à l'arbre de rotation d'un moteur, un de capteur audessus de la roue codeuse ( mais pas sur l'arbre hein ^^ juste en dessous de l'hélice et l'autre capteur sur le chassis au pied du moteur.

Sinon si tout ça n'est pas faisable, je peux stabiliser mon drone avec gyro mais du coup je ne comprends pas à quoi servent les PID à ceux qui font des drones...
regarde ça:
PID exemple

J'aimerais vraiment utiliser le PID ça me parait vraiment sérieux comme système...

Je ne sais pas si ces gens utilisent le PID en entrant des valeurs de leur gyroscope ou bien la vitesse de leur moteur qu'ils auraient mesuré...ça me rends fou :frowning:

Ce n'est pas vraiment impossible de mesurer la vitesse, mais cela ne vas pas être simple au niveau montage installation, déjà trouvé un disque troué pouvant s'adapter sur le rotor , par contre pour le capteur c'est plus simple , car c'est une seule pièce , qui peut se fixer sur le châssis.

Pour le capteur à fourche voici ce qui existe :

-capteur-de-vitesse-de-rotation-par-fourche-optique

Par contre pour le disque, ça existe peut être tout fait, voir sur Ebay ??.

Après il faut voir au niveau de la fréquence sortant du capteur, si celle ci ne sera pas trop rapide pour que l'arduino puisse la traiter.

Pour le PID je regarde ça.

Ah merci ! Ca m'a beaucoup aidé ! :smiley: Merci de ton aide ! :slight_smile:
Par contre ce que tu m'a donné comme lien m'a l'air d'être un capteur fait pour l'arduino donc normalement il ne doit pas y avoir de problème je pense ! ^^

J'ai trouvé un lien qui parle de la calibration des ESC :

http://www.multiwii.com/wiki/index.php?title=ESC_Calibration

Sinon j'ai trouvé du code pour arduino, avec gestion du pid pour un drone, je n'ai pas vue de la gestion de la vitesse des moteurs avec une mesure de vitesse, tout semble passer via le Gyro.

Drone

Sinon voici le genre de disque optique :

/kit-encodeur-simple

Il en existe, avec plus de dents, mais le prix risque d'être +++.

tiens pour t'aider, un petit programme pour comprendre et t'inspirer :slight_smile:
https://github.com/strangedev/Arduino-Quadcopter

Mais bon c'est vrai que c'est assez complexe les sytemes de regulations, PID ect...
mais voila un petit schema de notion

Oui il existe des library deja toute faite, il y a juste a appeler des fonctions, donc ca simplifie la chose

hameau:
J'ai trouvé un lien qui parle de la calibration des ESC :

ESC Calibration - MultiWii

Mes ESC répondent très bien aux commandes que je leurs passées lors de mes tests mais merci quand même :slight_smile:

hameau:
Sinon j'ai trouvé du code pour arduino, avec gestion du pid pour un drone, je n'ai pas vue de la gestion de la vitesse des moteurs avec une mesure de vitesse, tout semble passer via le Gyro.

Drone

Ton lien ne marche pas :s

hameau:
Sinon voici le genre de disque optique :

/kit-encodeur-simple

Il en existe, avec plus de dents, mais le prix risque d'être +++.

J'ai beau retourné mon drone dans tous les sens..je pense qu'il est impossible de monter une roue codeuse sans que l'hélice tape dans le capteur....Je crois que je vais laisser tomber cette histoire de vitesse des moteurs...

hazerty565:
tiens pour t'aider, un petit programme pour comprendre et t'inspirer :slight_smile:
https://github.com/strangedev/Arduino-Quadcopter

Merci beaucoup ! Je l'ai regardé et ça fait mal aux yeux x) Je vais devoir passer pas mal de temps à le décortiquer vu que je ne suis pas encore au top au niveau programmation...

hazerty565:
Mais bon c'est vrai que c'est assez complexe les sytemes de regulations, PID ect...

Ca je ne te le fais pas dire !! :confused:

En tout cas merci à vous deux ! Je sais maintenant que je dois explorer la voie des PID mais plutôt pour traiter mes valeurs d'angles venant de mon gyro... j'espère être sur la bonne voie ^^)

Voici le programme pour un quadcopter

/Quadcopter_Code_Arduino

@+

Merci infiniment ! :smiley:

S'il s'agit de stabiliser un drone y'a pas besoin de mesurer la vitesse des moteurs. La consigne du PID sera celle de la manette, et la donnée mesurée intégrée dans le PID sera l'inclinaison. La régulation des moteurs est sensé se faire automatiquement ensuite.

Mais sur les drones c'est intégrée à une régulation d'altitude, sinon il ne fera que tomber ou monter

arduinopizza:
il est impossible de monter une roue codeuse sans que l'hélice tape dans le capteur

Tu peux coller un capteur à effet Hall sur le flanc du moteur, il verra tourner les champs magnétiques.

B@tto:
S'il s'agit de stabiliser un drone y'a pas besoin de mesurer la vitesse des moteurs. La consigne du PID sera celle de la manette, et la donnée mesurée intégrée dans le PID sera l'inclinaison. La régulation des moteurs est sensé se faire automatiquement ensuite.

Mais sur les drones c'est intégrée à une régulation d'altitude, sinon il ne fera que tomber ou monter

Si tu veux le but c'est de garder le drone vraiment stable et droit lorsque mon joystick n'est pas utilisé...Donc en gros la consigne du PID se serait la valeur de la vitesse des moteurs (pour l'altitude evidemment) ..Je suis vraiment perdu enfaite...parceque j'ai essayé de lire les codes qu'on m'a donné plus haut mais franchement je comprends que dalle :confused:
J'ai compris comment marche les PID mais comment l'intégrer à mon gyro pour stabiliser mon drone..la je sèche...Je ne sais pas ce que mon PID va réguler en faite...Est-ce une valeur d'angle ? Une vitesse ? :o

Justement si tu touche pas a ton joystick, c'est une consigne en soit, la consigne de rien faire, le PID l'interprétera de la manière "Le drone doit être stable"

Après il peut très bien recevoir l'info du gyro qui va transmettre "Le drone est pas stable d'un certain angle" et le régulateur PID va agir en "c'est plus / c'est moins" sur les moteurs jusqu'a ce que le gyro donne un feed back correct.

Jambe:
Justement si tu touche pas a ton joystick, c'est une consigne en soit, la consigne de rien faire, le PID l'interprétera de la manière "Le drone doit être stable"

Après il peut très bien recevoir l'info du gyro qui va transmettre "Le drone est pas stable d'un certain angle" et le régulateur PID va agir en "c'est plus / c'est moins" sur les moteurs jusqu'a ce que le gyro donne un feed back correct.

Bah tu vois ce que tu viens d'écrire c'est exactement ce que je comptais faire mais par exemple disons que mon drone est à à 20 degrés, eh bien moi je pensais faire une sorte d'incrémentation pour stabiliser le drone genre:

for(i=0; i<=90;i++ )
{
int x=i;
moteur1.write(x);
}

Mais ça m'étonnerait que ça marche comme ça...mais si ça ça marche, alors quel est le rôle du PID ? Stabiliser les valeurs d'angles ou les valeurs de vitesse des moteurs ?

Jambe:
Après il peut très bien recevoir l'info du gyro qui va transmettre "Le drone est pas stable d'un certain angle" et le régulateur PID va agir en "c'est plus / c'est moins" sur les moteurs jusqu'a ce que le gyro donne un feed back correct.

D'après ce que tu dis ce serais plutôt le PID qui s'occuperait des vitesses des moteurs et le gyro ne se chargerait que d'envoyer des informations... mais concrètement, je vais devoir écrire un code de conversion des angles en vitesses ou pas ? Enfin je vois pas trop comment dire au PID de changer de vitesse ...A moins de faire des incrémentations et des décrémentations...?

Mmh, quand on dimensionnait des contrôleurs PID, on le faisait à partir d'une équation. ( Si le système n'est pas linéaire, linéariser celui-ci en faisant un petit taylor d'ordre un sur le point de fonctionnement).

Les aspects mathématiques ne sont pas à négliger. ( D'ailleurs je vois pas du tout comment faire un PID sans math :/).

En gros, tu as trois axes ( x,y,z) sur lesquelles ton drone peut pivoter.
Il faudrait ( en fonction de sa masse ) trouver une équation qui régit ces "pivotements".
(et encore s'il y a du vent ... je sais pas trop comment faire)

Pour cela ( là je pense en bidouille, parce que trouver une équation/modèle peut être extrêmement compliqué, je te conseil de chercher sur le net), je trouverais :

  • le centre de masse du drone
  • la force que chaque moteur exerce
  • calculer le moment de force suite du moteur sur le centre de masse
  • Déduire de tout ça une équation vitesse_du_rotor/angle

Avec angle, un angle sur x, y, z. On remarque quand même (si z pointe vers le haut), celui-ci peut directement être mis à 0.

EDIT : Il y a des choses pas mal sur internet :slight_smile:
Celui-ci m'a l'air pas mal ( mais je n'ai fait que survoler) http://www.researchgate.net/publication/230633819_Flight_PID_Controller_Design_for_a_UAV_Quadrotor
Ainsi que celui là
http://www.iaeng.org/publication/WCECS2011/WCECS2011_pp945-950.pdf

Et si tu es allergique à l'anglais :

Ou pour te mettre dans le bain (il est court et je ne l'ai pas lu )
http://tictacserver.gel.usherbrooke.ca/projets_gegi/assets/production/DARIUS.pdf