Asservissement en position
Objectif
Obtenir du PAMI qu’il atteigne la position souhaitée, exprimée dans le repère du terrain.
Pré-requis
Vous avez suivi avec succès les parties :
- Loi de commande
- Se localiser avec les codeurs
Vous avez compris le principe de l’asservissement décrit dans « l’asservissement des moteurs en vitesse »
Principe
À partir des deux modules précédents, il est possible de réaliser un asservissement en position. La consigne est la position désirée dans le référentiel du terrain, avec deux composantes : x et y.
Comme retour du capteur, nous utiliserons la position obtenue en traitant le signal des codeurs avec la fonction « Localisation » vue dans la partie précédente. L’erreur se calcule en deux temps. Tout d’abord, en calculant les écarts en X et en Y dans le référentiel du terrain. Ensuite, en adaptant cette erreur à votre loi de commande.
Si vous avez opté pour la version simple de la loi de commande, ses arguments sont une avance et une rotation. Vous utiliserez alors un asservissement dit « Polaire ». Dans le cas contraire, vous commanderez une vitesse en X et une vitesse en Y. Dans les deux cas, il est important de garder à l’esprit que la loi de commande s’exprime dans le référentiel du robot.
Asservissement polaire
#Ref : Devoirs de vacances de RCVA
L’asservissement polaire consiste à asservir le robot en fonction d’une erreur de cap et d’une erreur de distance.
#SCHEMA
L’erreur de cap est l’écart entre l’orientation que doit avoir le robot pour atteindre son point en ligne droite et l’orientation actuelle du robot.
delta_orientation_rad = atan2f(delta_y, delta_x) – orientation
L’erreur de distance est la distance entre le robot et le point consigne
delta_distance = sqrtf(delta_x * delta_x + delta_y * delta_y)
Ceci peut paraître contre-intuitif, car si le robot n’est pas bien orienté vers son but, en avançant il augmente l’erreur de cap ou même l’erreur de distance, créant un système qui diverge.
Il est possible de régler finement les gains des correcteurs pour avoir une correction de l’erreur de cap forte par rapport à la correction en distance. Il est également possible de saturer la correction en distance pour s’assurer que la correction du cap prenne le dessus. Mais nous ne ferons pas cela.
Nous nous assurerons, en construisant la consigne, que les erreurs de cap et de d’orientation restent faibles. Voir les « cas d’utilisations » plus bas.
La difficulté de l’asservissement polaire
L’asservissement polaire est très efficace, il présente cependant un inconvénient. Lorsque le PAMI s’approche de sa consigne l’erreur d’orientation peut s’accroître subitement causant un comportement du robot à la fois impressionnant et non désiré. La méthode que nous recommandons consiste à désactiver la correction de cap si l’erreur de distance est inférieure à un certain seuil et dans ce cas, considérer que l’erreur en distance est négative si l’erreur de cap est supérieure à 90° (ou inférieur à -90°).
Asservissement en distance X et Y
Dans le cas où vous commandez votre robot en X et en Y, vous avec déjà calculé l’erreur. Tant que vous pensez à exprimer erreurs dans le repère du robot, il n’y a pas de difficulté particulière.
Cas d’utilisation
Soit vous considérez qu’avec ce module vous avez terminé votre travail. Vous prévoyez de donner comme consigne le point destination de votre robot. Auquel cas, vous devrez limiter votre accélération d’une manière ou d’une autre afin de limiter le glissement des roues. Votre asservissement travaillera avec des erreurs grandes.
Mais de ceci, nous n’en parlerons point.
Soit vous construisez une trajectoire et vous ferez progresser le point consigne le long de cette trajectoire en tenant compte de l’accélération et de la décélération du robot. Ainsi, la consigne de position varie de manière continue et progressive. Auquel cas, votre asservissement travaillera avec des erreurs faibles.
En fonction de votre cas d’utilisation, le réglage des gains de l’asservissement sera bien différent.
Correcteur
Comme pour la vitesse des moteurs, nous utiliserons un correcteur de type PID. Ou plus précisément de type P car celui-ci nous a satisfait. Notez bien qu’il faut une correction pour chaque argument de la loi de commande, avec un réglage de gain différent pour chacune des corrections.
Structure du code
Ce module n’a pas besoin de fonction d’initialisation. La fonction de gestion de l’asservissement doit être appelée régulièrement, après chaque mise à jour de la position du robot et de la position consigne.
Si vous utilisez un asservissement polaire, vous aurez besoin de deux fonctions. L’une qui asservit le robot dans le cas général que nous venons de décrire, l’autre qui asservit le robot dans le cas d’une rotation sur lui-même. Cette seconde fonction prendra le cap désiré comme argument.
- Asser_Position()
- Calcule l’erreur de position
- Détermine l’erreur en distance est en cap
- Corrige avec un correcteur P
- Appel la fonction de la loi de commande
- Asser_Cap()
- Calcul de l’erreur de cap
- Corrige avec un correcteur P
- Appel la fonction de la loi de commande
Code de démonstration
Le code de démonstration doit servir à régler les gains du correcteur. Pour cela, générons une trajectoire avec une variation progressive de la vitesse au cours du temps. Voici le profil de vitesse que nous vous proposons
#IMG
Le même type de consigne peut-être générée pour commande la rotation du PAMI.
De manière itérative, augmentez l’accélération, la vitesse maximale et le gain jusqu’à trouver les limites de votre PAMI.
Pistes de débogage
En cas de soucis, superposez les courbes des grandeurs mesurées avec les courbes des consignes. Vous aurez souvent des pistes pour comprendre les soucis.
Le point sournois que vous pourriez rater, c’est d’envoyer une consigne non-atteignable au PAMI. Si en baissant la vitesse ou l’accélération le PAMI se comporte mieux, regardez ce qui se passe au niveau des vitesses de moteurs (consigne et mesure). Vous observez peut-être que la mesure ne rattrape pas la consigne.