Correcteur de vitesse moteur drone pour stabilité

Bonjour à tous,
Je finalise un drone DIY fait a partir d'un Genuino 101 et à ce stade tout fonctionne sauf ma correction angulaire. Je l'avais fait au pif en faisant une correction proportionelle à un facteur que je voulais trouver par hasard. Le fait est que je n'arrive pas du tout à trouver de valeur correcte pour ce facteur.
En réfléchissant je me suis dit qu'une correction exponentielle pourrait faire l'affaire (de la forme vitesse_moteur = vitesse demander + erreur^facteur)
Mais en cherchant sur internet j'ai surtout trouver des systèmes PID Voir l'explication.

Qu'en pensez-vous ? une correction exponentielle pourrait aider ? Un PID est il absolument nécessaire ? Est-ce normal que je n'arrive pas du tout a faire décoller le drone proprement avec une simple correction proportionelle ?

Pour info voilà mon code (enfin la partie correction angulaire :slight_smile: avec speed 1 2 3 et 4 les vitesses moteurs)

    // détermination des vitesses necessaires
    // par rapport au throttle et à l'avancement
    speed1 = vitesseWish + (tangagenorme - tangage)*sensi;
    speed2 = vitesseWish + (tangagenorme - tangage)*sensi;
    speed3 = vitesseWish - (tangagenorme - tangage)*sensi;
    speed4 = vitesseWish - (tangagenorme - tangage)*sensi;



  
    // correction pour la stabilite

      speed1 = speed1 - (roulisnorme - roulis)*sensi;
      speed2 = speed2 + (roulisnorme - roulis)*sensi;
      speed3 = speed3 + (roulisnorme - roulis)*sensi;
      speed4 = speed4 - (roulisnorme - roulis)*sensi;

Bonjour,

Oui, un PID est un minimum. Une correction exponentielle ne fonctionnera jamais.

Merci 3Sigma , quant au fait qu'en proportionelle je n'atteigne jamais la stabilité ? manque de patience de ma part ou potentiellement problème de code ?
(ceci-dit il ne fait que 300 petites lignes, je doute qu'il soit assez long pour ralentir les calculs)

Pas évident de faire un cours sur les asservissements en quelques lignes :wink:
Ce n'est ni un manque de patience ni un problème dans le code, c'est juste que ce n'est physiquement pas possible.

Merci, je pars sur un PID alors, je reposterais mon résultat :slight_smile:

Bonsoir,

Je suis moi-même en train de réaliser un quadricoptère dont j'aurai à régler les asservissements autour des axes de cap, roulis et tangage (je vais faire cela avec un Arduino Mega2560). Pour ce qui me concerne, ayant fait de l'automatisme tout au long de ma carrière, j'aurai une approche plutôt mathématique. Pour autant, l'approche "physique" n'est pas mauvaise et pour tout dire, au final, j'y aurai certainement recours.

En ce qui concerne des corrections exponentielles ou toute autre fonction mathématique non linéaire, cela n'a de sens que si dans la boucle vous avez sa fonction réciproque. Par exemple, si la poussée d'une hélice est proportionnelle au carré de la vitesse de rotation, il faudra appliquer une fonction "racine carrée" dans la commande.

Dans les systèmes qui nous intéressent, c'est cette fonction (poussée = f(vitesse)) qui s'éloigne le plus d'une fonction linéaire. Pour autant, elle ne s'en éloigne pas assez pour nécessiter une fonction de correction réciproque.

L'article que vous donnez en lien est une bonne approche des réglages physiques. Mais attention, il va falloir être patient et ne pas se laisser débouter par des résultats peu concluants au départ. En effet, les asservissements à réaliser ne sont pas des asservissements de vitesse, mais des asservissements de position et c'est beaucoup plus délicat car cela a une tendance naturelle à l'instabilité. De plus, vous avez trois boucles (cap, roulis, tangage) qui ne demandent qu'à se mordre la queue (couplage d'axes).

Le problème est que pour régler ces asservissements, il faut que l'engin soit en vol et pour qu'il vole, il faut que les asservissements aient déjà un semblant de stabilité : passionnant :slight_smile: . Je ne sais pas trop comment je vais me débrouiller de tout cela.

Cordialement.

Pierre

Voir (si ce n'est déjà fait) le tutoriel de Brett Beauregard sur les calculs de PID:

http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/