DesignSpark Electrical Logolinkedin
Ask a Question

Dotez votre robot de la même commande de mobilité qu'un Mars Rover : première partie

Les robots, particulièrement ceux qui sont dotés de roues, peuvent être divisés en deux catégories : ceux qui se déplacent uniquement en détectant et en évitant les obstacles, et ceux qui se déplacent en suivant un chemin prédéterminé en utilisant une carte électronique interne. La plupart des robots mobiles « amateurs » se déplacent en utilisant juste la détection des obstacles. C'est une approche un peu simpliste, basée sur l'idée qu'il est plus facile (et plus amusant) de programmer une course d'obstacles rapide que de programmer des mouvements précis suivant un circuit prédéterminé.

Commande de mobilité

Un robot « professionnel », tel que le Mars Rover Curiosity, a besoin de se déplacer de façon très précise, en évitant les gros rochers et les petits cratères.

Pour vous faire une idée de la complexité du matériel/logiciel requis pour la mobilité des robots, consultez l'article suivant traitant du système de mobilité des prédécesseurs du Curiosity, les robots Mars Exploration Rover Opportunity et Spirit. Le schéma fonctionnel, Figure 2 à la page 3 de l'article, décrit le système de navigation de base : cet article et le suivant décrivent les détails du bloc MOT, et comment (et pourquoi) sa fonctionnalité basée sur l'algorithme PID peut être ajoutée à un robot moins exotique sur Terre.

Commande PID

Le principe de base de la commande PID est très simple et peut être appliqué à tout système impliquant un actionneur électro-mécanique (par exemple un moteur) devant être entraîné à une vitesse définie ou amené à une position exacte. Le matériel supplémentaire requis comprend un capteur qui fournit des données sur la vitesse ou la position exactes de l'actionneur, et un processeur qui exécute l'algorithme de commande. Le processeur compare le résultat mécanique voulu (point de consigne) avec la valeur réelle détectée et génère un signal de commande modifié pour annuler toute différence (erreur). Cet algorithme n'est cependant pas limité aux systèmes mobiles : il peut être tout aussi efficace pour assurer qu'un processus chimique industriel est maintenu à une température donnée, ou qu'un liquide dans un réservoir reste à un certain niveau. Dans le cadre de cet article, je m'intéresse seulement à la commande de moteur.

Pourquoi mon petit robot a-t-il besoin d'une commande de mobilité ?

Les robots de « loisir » prennent souvent la forme d'un buggy, avec deux roues à entraînement indépendant, une de chaque côté du châssis, et une roue pivotante à une ou aux deux extrémités. Prenez par exemple cette exigence fondamentale : un tel robot doit pouvoir rouler sur une distance spécifiée en ligne droite. Vous pensez que rien n'est plus simple ? En réalité, pour y parvenir, il faut deux choses :

  1. Les deux roues doivent tourner à exactement la même vitesse et
  2. Chacune des roues doit être équipée d'un capteur pour fournir des informations sur la distance parcourue

Il n'est pas simple de répondre à ces exigences (1) car deux moteurs en apparence identiques recevant la même puissance tourneront sans doute à des vitesses légèrement différentes. Dans ce cas, votre robot se déplacera selon un arc graduel plutôt qu'en ligne droite. C'est pourquoi nous avons besoin d'un capteur de rotation des roues fonctionnant dans une boucle d'asservissement fermée. Pour notre buggy, une boucle séparée sera requise pour chaque roue. Heureusement, les capteurs montés sur les roues peuvent également fournir des informations permettant de calculer la distance parcourue par chaque roue, ce qui répond à l'exigence (2).

Commande PID - la théorie

PID est l'acronyme de Proportional Integral Derivative (proportionnel intégral dérivé), qui décrit les trois processus mathématiques appliqués à un signal en retour d'erreur dans un système de commande à boucle fermée, produisant un facteur destiné à corriger cette erreur. Examinons cet algorithme sous l'angle du calcul différentiel/intégral :

où le premier terme est le composant de retour proportionnel, le second est l'intégral et le troisième est le dérivé. e(t) est la différence entre le résultat désiré (le point de consigne) et le résultat réel. c(t) est le résultat de commande d'actionneur mis à jour.

Un système de commande à boucle fermée utilisant les trois termes se présente comme ceci (Fig.1) :

Dans l'exemple de mon robot mobile, l'actionneur est un servomoteur à rotation continue et le capteur est une unité de faisceau IR reflété, fonctionnant avec des fentes découpées dans la roue. Souvent connu sous le nom de tachymètre, ce type de capteur retourne les données de vitesse réelle de la roue sous forme de train d'impulsions à taux variable : plus la vitesse est élevée, plus le taux d'impulsions est rapide. Le code du programme de commande compare cette vitesse réelle à la valeur souhaitée ou « point de consigne » et la différence est l'entrée d'erreur e(t) sur l'algorithme PID. Le résultat est une sortie de commande c(t) entraînant le moteur avec une valeur qui réduit cette erreur à zéro (en définitive). Les trois constantes KP, KI et KD reçoivent généralement des valeurs estimées (devinées) initialement, avant d'être optimisées dans un programme de simulation ou sur le matériel système réel, un processus connu sous le nom de « réglage ».

Commande PID - la pratique

J'imagine que vous n'êtes pas ravi à l'idée de coder l'intégration et la différenciation pour le fonctionnement en temps réel. Inutile de paniquer cependant : la formule ci-dessus s'applique au Temps continu, mais comme il s'agit d'une application numérique, nous travaillons avec des données échantillonnées mesurées à des intervalles discrets. Encore mieux, en fonction de la précision du contrôle requis, vous pourrez ignorer un ou les deux termes I et D ! Pour décider combien de l'algorithme PID complet est requis pour une tâche donnée, il est nécessaire de comprendre la contribution de chaque terme.

Le terme proportionnel (ou Gain)

Le terme P est essentiel et est le plus simple à comprendre et à mettre en œuvre : sa contribution au signal de commande est une proportion, définie par KP, de l'erreur captée. Donc KP < 1. Pourquoi ne pas choisir KP= 1 et annuler d'un seul coup toute l'erreur ? Le problème est que l'électronique peut transformer un signal d'erreur en un signal de commande révisé beaucoup plus rapidement que le système mécanique ne peut réagir au changement. Le résultat peut être une oscillation continue, avec un moteur accélérant puis ralentissant, au-delà et en deçà du point de consigne. C'est pourquoi une proportion de l'erreur est retournée à chaque intervalle, pour amener lentement la vitesse à sa valeur de point de consigne. D'un autre côté, si une valeur trop faible est retournée, il y aura un temps d'attente très long avant que la vitesse requise soit atteinte à partir de l'activation. Donc pour le système de temps discret :

CP(n) = KP x E(n)

Notez que le signal de commande est réduit à zéro au même moment que l'erreur, ce qui est contre-productif. Il y a deux façons d'éviter ce problème. La première consiste à déterminer quelle est l'entrée de commande requise pour la vitesse définie souhaitée en exécutant la boucle ouverte du matériel, puis en ajoutant cette valeur de référence comme une constante dans l'équation ci-dessus. La seconde option consiste à ajouter le terme intégral décrit ci-dessous pour s'ajuster automatiquement à la valeur cible.

Le terme intégral (ou Reset)

L'intégration du signal d'erreur fournit une valeur pour l'erreur accumulée sur l'intervalle de temps t. En l'absence d'une entrée de référence de commande comme décrit ci-dessus, à partir du démarrage, sa valeur doit monter jusqu'à ce qu'elle se stabilise au point de consigne. Normalement, cette fonction est destinée à compenser une erreur fixe (décalage) dans la mesure du capteur. Si KI est trop élevé, cela risque cependant de causer une instabilité. Dans le système de temps discret, les opérations mathématiques se réduisent à une simple addition, ou plus précisément, à une accumulation :

A(n) = A(n-1) + E(n)     où A(n) = erreur accumulée

CI(n) = KI x A(n)

Le terme dérivé (ou Rate)

Nous avons maintenant un composant totalement facultatif qui améliore la performance en amortissant l'oscillation transitoire ou « bourdonnement » qui se produit lorsque des valeurs élevées de KP et /ou KI sont utilisées. Ce terme mesure le taux de changement de la sortie et réduit le signal de commande lorsque le premier s'approche de la valeur du point de consigne. Avec la valeur correcte de KD, la sortie ne dépasse pas et ne cause pas de correction exagérée. Nous obtenons donc une réponse de commande initiale plus forte à des transitoires élevées soudaines, qui diminue lorsque l'erreur se rapproche de zéro. Le terme D peut améliorer la réponse d'un système à des modifications brutales du point de consigne, par exemple, mais des problèmes peuvent survenir en raison de la sensibilité au bruit du signal de retour. En pratique, ce terme dérivé en apparence complexe se traduit par une simple soustraction de la valeur d'erreur actuelle sur la valeur précédente :

CD(n) = KD x (E(n-1) – E(n))

En d'autres termes, ce composant de commande est positif lorsque l'erreur s'améliore, ce qui renforce l'effet des termes P et I. Si la sortie détectée dépasse le point de consigne, le terme D devient négatif, ce qui réduit l'entrée de commande globale jusqu'à ce que l'erreur commence de nouveau à baisser.

Les différentes permutations de P, I et D

L'algorithme de commande PID ne doit pas nécessairement être utilisé dans son entier. La permutation des trois termes utilisée pour une application spécifique doit être déterminée par le concepteur en fonction des caractéristiques du système à commander. Deux éléments doivent être pris en compte :

  1. La rapidité avec laquelle le système doit réagir à une augmentation soudaine de l'erreur à la fois au démarrage initial et lors du changement du point de consigne, avec une commande de direction par exemple. Il s'agit de la réponse « transitoire ».
  2. La précision avec laquelle il doit suivre le point de consigne. Il s'agit de la réponse à l'état stationnaire.

Les courbes de performance de certaines combinaisons de termes P, I, D fréquemment utilisées sont illustrées à la Fig.2. La courbe bleue dans chaque cas est l'état de sortie réel (vitesse, position, température, etc.) par rapport au point de consigne souhaité (ligne en pointillés rouge). Supposons que la courbe représente la vitesse d'un moteur par rapport au temps t, avec activation à t = 0.

 

(a) Proportionnel seulement avec une référence de commande fixe. La référence est estimée ou est une valeur trouvée par expérimentation. Un facteur KP élevé permet d'assurer une augmentation rapide depuis le repos, mais présente l'inconvénient d'un grand dépassement et d'un « bourdonnement ». Une erreur dans l'estimation de référence laisse également la vitesse de l'état stationnaire à un niveau inférieur à la valeur du point de consigne requis.

(b) Proportionnel et intégré. Le fait de garder la même valeur KP mais de remplacer la référence fixe par le terme intégré, nous amène finalement à la valeur du point de consigne, mais avec des dépassements encore plus élevés initialement.

(c) Proportionnel, intégré et dérivé. En théorie, avec la valeur exacte pour KD quelque chose de « magique » se produit : le bourdonnement est quasiment totalement amorti et l'état stationnaire est atteint très rapidement.

Ajustement de la boucle

Il est possible d'exécuter un contrôleur de base pour un robot mobile sur une carte de microcontrôleur peu coûteuse telle que l'Arduino. La difficulté consiste à sélectionner les valeurs pour ces facteurs K. L'expérience joue un rôle important lors des tentatives d'ajustement « manuel ». Le système peut parfois être exécuté en « boucle ouverte » avec le retour déconnecté pour obtenir une idée de ses caractéristiques. Des simulations peuvent être exécutées et des valeurs peuvent être déterminées en combinant l'expérience et les tests. Des programmes d'ajustement sophistiqués sont également disponibles. En pratique, pour une petite commande de moteur comme celle-ci, des résultats satisfaisants sont facilement obtenus avec un peu d'estimation et d'ajustement.

La prochaine fois

Dans le cadre de ces articles, j'ai utilisé mon fidèle Parallax BoE-Bot équipé de tachymètres et d'une carte processeur Microchip dsPIC33 au format Arduino. Les microprocesseurs modernes tels que le dsPIC contiennent des équipements spéciaux pour la commande de moteur et la détection, tels que les unités ‘Output Compare’, ‘Input Capture’ et ‘Quadrature Encoder’. J'examinerai l'implémentation de l'algorithme PID codé dans ma version du langage Forth, FORTHdsPIC, et les drivers de code d'assemblage de «métal nu » pour la commande de moteur et les capteurs de tachymètres.

Si vous avez des questions sur des aspects pratiques, suivez mes messages sur Twitter. Je mets des liens vers des articles intéressants sur l'électronique et les nouvelles technologies, je retweete des publications que j'ai repérées sur les robots, l'exploration spatiale et d'autres sujets.

Engineer, PhD, lecturer, freelance technical writer, blogger & tweeter interested in robots, AI, planetary explorers and all things electronic. STEM ambassador. Designed, built and programmed my first microcomputer in 1976. Still learning, still building, still coding today.

1 Jun 2018, 8:30

Commentaires