mercredi 23 janvier 2013

Déplacement de P à PID

Programmation de l'asservissement PID sur le cap à prendre :

Déplacement de P ...
Il y a encore quelques jours, le robot se déplaçait très simplement du point A au point B avec le bloc Avancer tel que décrit ci-dessus.

MODE AVANCE :
- Vmot, la vitesse de consigne des roues motrices, est calculé dans le bloc Calc_Acc&Dec principalement en fonction de la distance entre la position du robot et les coordonnées cibles, mais aussi en fonction de l'adversaire (s'il est devant le robot).
- AlphaRC, la diffèrence entre le cap vers la cible et le cap du robot, est positionné en direct sur le volant du bloc et pilote donc la différence entre les vitesses demandées à chaque roue motrice. Bien entendu, si le volant n'est pas piloté comme on le souhaite, on peut modifier la commande par l'intermediaire d'un coefficient proportionnel que nous appellerons Kp.

MODE ROTATION :
Lorsque AlphaRC est superieur à AlphaRotMax, le robot tourne sur lui même afin de revenir dans le mode avance.

Si l'on applique ce type de programmation à un programme demandant au robot d'aller exactement à droite à 700mm, cela peut donner les résultats suivant :
Le robot est à 90° de sa cible, il tourne donc sur lui même jusqu'à ce que AlphaRC soit inférieur à 50° puis avance vers la cible à 700 mm
 
A Kp = 0,75 concrêtement le robot dérive tellement que le mode Rotation s'active deux fois. Kp n'est donc pas assez fort.

A Kp = 1,5 le robot suit beaucoup mieux le cap mais il n'arrive jamais à s'aligner correctement et le robot n'atteindra jamais exactement la cible. Kp doit encore être augmenté.
A Kp = 3 le robot arrive encore mieux à suivre le cap, on frôle régulièrement AlphaRC=0.
A Kp = 4 le robot alterne d'un côté et de l'autre de l'alignement parfait ce qui fait que le robot ondule vers sa cible. Il parcours un peu plus de distance et arrive donc à sa cible après 6 secondes alors qu'il n'en fallait que 5 secondes pour Kp = 3 ou 1,5.
A Kp = 5 le robot alterne encore de chaque côté du 0 mais ne se stabilise plus contrairement à Kp = 4. Kp est donc trop fort.

On pourrait donc encore faire d'autres essais entre Kp = 3 et 4 car à 3 nous avons un minimum de précision mais on optimise le temps de déplacement, à 4 par contre nous sommes plus précis mais nous perdons en rapidité. Dans ce cas, nous n'avons qu'un asservissement Proportionnel.


... à PID !

L'asservissement PID consiste à rajouter au coefficient Kp proportionnel un coefficient Intégrateur Ki et un coefficient Dérivé Kd. Dans mon cas, je vais suivre les conseils de Gargamel (RCVA) qui invite à ne pas mettre de coefficient Ki puisque cela engendre plus de perturbations qu'autre chose. L'intégrateur a pour fonction de supprimer ou réduire l'erreur résiduelle entre la consigne et le résultat, je vais donc installer le coefficient Dérivé Kd et si je n'ai pas d'erreur, je n'aurais pas besoin de Ki !
En terme de calcul, il me faut donc rajouter à AlphaRC x Kp, le calcul de la dérivé x Kd :
Pour le calcul dérivé, rien de plus simple puisque je prend la diffèrence entre AlphaR (le cap du robot à l'instant t) et AlphaP (le cap du robot à l'instant t-1) à laquelle je multiplie un coefficient Kd.

Reprenons le programme précédent et appliquons une valeur diffèrente de 0 à Kd.
Pour ce cas de figure, j'ai sélectionné Kp à 3,5.
A Kd = 0, on retrouve l'oscillation autour de 0.
A Kd = 7, on voit bien l'influence du coefficient Kd qui amorti l'oscillation jusqu'à rendre presque plate la courbe.
A Kd = 10, Kd est trop fort puisqu'il crée des variations qu'il était censé supprimer.

Prenons donc Kp = 3,5 et Kd = 7 et voyons le résultat sur le comportement du robot durant son déplacement :
 
Il n'y a pas photo, le robot va directement à l'objectif en ligne droite malgré la rotation de 90° ! De plus, le robot parcours la distance dans le meilleur temps obtenu jusque là à Kp = 3.

Conclusion :
Au vu du résultat, je ne vois pas l'intérêt de programmer le coefficient Intégrateur Ki, mais pour être sûr que cela fonctionne correctement je vais appliquer ces réglages sur le programme de début janvier afin de constater la diffèrence sur la table de jeu. Résultat j'espere demain après un petit saut à l'ENSIM ELEC !

2 commentaires:

  1. Excellent cet article, beau travail!!

    RépondreSupprimer
  2. Merci Kabriolin !
    Malheureusement ça n'a pas fonctionné à l'ENSIM, pas comme je voulais en tout cas !
    J'ai fais mes réglages avec les batteries quasiment vides alors après une nuit de rechargement et des batteries pleines le robot avait plus de puissance. Et la puissance on l'a retrouve directement sur le comportement du robot.
    Je vais essayer de vous montrer ça ce soir.

    RépondreSupprimer