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 ??
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.
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 ?
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
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
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
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é
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
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.
Ah merci ! Ca m'a beaucoup aidé ! Merci de ton aide !
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 ! ^^
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.
Mes ESC répondent très bien aux commandes que je leurs passées lors de mes tests mais merci quand même
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.
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...
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 !!
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 ^^)
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
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
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.