NXT-G Leçon n° 16 : Le bloc HiTechnic motor PID

Pour expliquer certains fonctionnements, principes et fondements.
Avatar de l’utilisateur
roboleo
Level 8
Level 8
 
Messages: 955
Localisation: Hauts de Seine
expertnxt

Messagepar roboleo » Mer Juil 06, 2011 5:44 pm

NXT-G Leçon n° 16: le BLOC HiTechnic MOTOR PID

Nous allons étudier ici une nouvelle application du principe PID.

Nous avons vu dans la leçon n° 14 Le PID un contrôleur intelligent, en quoi consiste le concept du Proportionnel, de l'Intégrale et de la Dérivée.
Si vous l'avez oublié, je vous invite à relire le chapitre correspondant dans le Guide NXT-G vers 1.1 page 160 et suivante. Cette notion a fait l'objet de plusieurs études et développements.

Parmi les dernières créations de HiTecnic ®, il est intéressant de signaler en langage NXT-G, un bloc Moteur particulier intégrant la fonction PID.
Ce dernier né, n'est pas un bloc CAPTEUR, mais un bloc MOTEUR!
Ce bloc met en oeuvre un contrôleur PID (Proportionnel - Intégrale - Dérivée), ou PID.
À la différence du bloc standard MOTEUR, qui engendre un mouvement relatif, ce bloc est conçu pour contrôler une position absolue du moteur. La saisie principale du bloc est une valeur de ROTATION ANGULAIRE qui est celle que vous désirez imposer au moteur à partir d'une valeur de référence. Le bloc dispose également plusieurs modes d'initialisation définissant plusieurs positions de référence du moteur.

Pourquoi un bloc HiTechnic MOTOR PID?

Ce bloc est une alternative au bloc MOTEUR standard LEGO .
À la différence de ce dernier, qui, utilisé avec une durée exprimée en degrés ou rotations, vous donne la position relative du moteur, le HiTechnic MOTOR PID Block est conçu pour fournir une position absolue. Avec le bloc MOTEUR standard, vous pouvez l'utiliser pour avancer de 45 degrés, puis encore de 45 autres degrés, reculer ensuite de 90 degrés.
A chaque fois le moteur progresse d'une quantité qui est liée à la position dans laquelle se trouve le bloc au moment de sa dernière exécution. Avec le Bloc de PID vous spécifiez une position absolue. Par exemple, si vous voulez que le moteur aille à la position 45, vous pouvez définir cette valeur dans une fenêtre de saisie du Point de référence du Bloc PID et le moteur tournera jusqu'à cette position. Par exemple, si le moteur commence à la position 100, il tournera en arrière jusqu'à la valeur 45; s'il commence à 0 alors il avancera jusqu'à cette valeur.

Ce type de contrôle est utile quand votre moteur doit évoluer dans une plage limitée de mouvements. Par exemple, si vous désirez contrôler la position d'un bras robotisé: positionner le bras vers un endroit précis et lui faire ensuite exécuter une tâche. Il est plus facile de préciser la position à atteindre avant l'exécution de la tâche, chose impossible avec le bloc standard qui ne conserve pas de trace de la position courante.

Quelques exemples d'utilisations possibles:
Mécanisme de direction d'un véhicule.
Contrôle d'un système à partir d'un capteur fournissant les données d'entrée.
Mécanisme de saisie disposant de plusieurs positions que vous souhaitez sélectionner, comme ouvrir, fermer, serrer…
mécanisme de commande panoramique pour lequel vous souhaitez contrôler le mouvement vers un point précis.


Télécharger et installer le bloc HiTechnic MOTOR PID

Ce bloc est mis à disposition gratuitement par HiTechnic à partir de son site:
http://www.hitechnic.com/blog/uncategorized/pid-block/
Ce bloc s'installe dans votre palette en suivant les instructions du guide NXT-G vers 2.0 màj 1, chapitre 4 Installer le microprogramme sur le NXT2, Installation d'accessoires additionnels dans la palette d'outils du NXT-G, page 16 et suivantes.
Je vous laisse le soin de l'installer afin de l'utiliser.

Utilisation du bloc

Après avoir lancé le logicien NXT-G 2.0, créez un nouveau programme comportant un seul bloc: le HiTechnic Motor PID Block.
Il se présente ainsi:
Fig. 1
Image

La signification des différents plots nous permet déjà de comprendre la structure du bloc. Par des fils de données, on peut paramétrer en entrée notamment le point de référence (exprimé en degrés) et la puissance maximum du moteur. Ces 2 valeurs associées à l'Action sont à préciser dans le panneau de configuration chaque fois qu'on utilise ce bloc.
On remarque 2 plots uniquement en sortie qui fournissent la valeur de l'erreur et l'état logique de l'Action, c'est-à-dire: la valeur du point de référence est-elle atteinte?

Les 3 dernières valeurs (Kp, Ti et Td) nous sont familières. Elles seront modifiées exceptionnellement, étant entendu que les valeurs de défaut fonctionnent dans la plupart des situations. Elles sont plutôt destinées aux programmeurs avertis. En cliquant sur le bouton "Show", on obtient le détail de la formule avec l'affichage des valeurs de défaut qui peuvent alors être modifiées. A utiliser en connaissance de cause.

Fig. 2
Image

Premier Exercice.

Nous allons utiliser le même montage présenté par HiTechnic dans sa vidéo pour mieux comprendre le fonctionnement du bloc.
Commencez par réaliser ce banc d'essai:

Fig. 3
Image

Le moteur est connecté au port C. Vous remarquerez un pin fixé au milieu de la poutre de 9 Studs solidaire du servomoteur. Ne l'installez pas pour l'instant.
Le curseur monté sur le cross axe du moteur va jouer le rôle d'indicateur. Lorsque le moteur tournera il se comportera comme une aiguille de compteur. Le pin absent, le curseur tournera librement.

A présent, écrivez ce programme:

Fig. 4
Image
Avec son panneau de configuration

Fig. 5
Image
Positionnez le curseur à votre guise, dans n'importe quelle direction, puis lancez le programme.
Le curseur se déplace dans le sens inverse des aiguilles d'une montre (valeur négative) de 90 degrés par rapport à sa position de départ qui est quelconque. Appuyez sur le bouton rouge du NXT pour sortir du programme.

C'est insuffisant si vous désirez contrôler le moteur, puisque sa position de départ n'est pas connue.
Donc,
La première chose à faire est de définir une position de référence pour les moteurs que vous voulez contrôler. C'est nécessaire parce que les encodeurs des moteurs NXT ne fournissent que des positions relatives. Quand un programme est lancé, vous ne pouvez connaître avec certitude celles de départ des moteurs. Pour établir cette position de référence, le Bloc HiTechnic Motor PID offre plusieurs actions à choisir dans le menu déroulant. Nous en reparlerons plus loin.

Fig. 6
Image

Modifiez le programme de la manière suivante, en ajoutant le bloc 1 de tête.

Fig. 7
Image

Examinons à présent les panneaux de configuration.
Celui du premier bloc Moteur PID est ainsi configuré:

Fig. 8
Image

Et celui du second:

Fig. 9
Image

Que fera ce programme?
Le premier bloc initialise le moteur à une valeur limite, dans le sens des aiguilles d'une montre (Reset at forward Limit) qui est fixée à zéro (0) dans la zone de saisie "Set Point". Cela signifie que le moteur va, en tournant, rechercher un point de résistance (par un quelconque dispositif mécanique) traduite par une valeur limite. Dans notre cas, c'est une limite mécanique supérieure qui a pour valeur 0 (j'aurais pu choisir n'importe quelle autre valeur).
La puissance du moteur est réglée sur 25, valeur basse pour ne pas forcer le moteur dans sa recherche de résistance mécanique.
Le 2ème bloc contrôle la rotation du moteur vers cette valeur limite positive (Power Toward Set Point). Quand le moteur aura atteint ce point, il se déplacera d'une valeur de -90 degrés (donc en sens inverse, puisque valeur négative) par rapport au zéro (0) et à une puissance plus forte (75) donc plus rapidement. Ce bloc étant dans une boucle, il continuera la rotation jusqu'à rencontrer cette résistance qui provoque son déplacement de 90 degrés en sens opposé. Une fois cette position atteinte, il y restera à l'arrêt.
Pour sortir du programme, il suffit d'appuyer sur le bouton rouge du NXT qui confirme la fin par un top sonore.

Exécutez ce programme en ayant ôté le pin de la poutre 9studs.

Que se passe-t-il?
Le moteur tourne à vitesse réduite sans discontinuité. Appuyez sur le bouton rouge. Le moteur poursuit sa rotation.
Pour arrêter le programme, appuyez sur le bouton gris.
Il ne s'est rien passé (sauf à faire tourner le moteur) en somme!

Bien, à présent placez le pin au milieu de la poutre 9studs, et tournez le curseur vers le bas. Lancez à nouveau le programme.
Le curseur va tourner dans le sens des aiguille d'une montre, toujours à vitesse lente, jusqu'à rencontrer le pin qui constitue une résistance mécanique. Dès le contact assuré, il se positionne à vitesse rapide en inversant le mouvement et en pointant vers le haut. L'angle qu'il marque avec le pin est de 90 degrés. Appuyez sur le bouton rouge pour sortir du programme, confirmé par le top sonore.

Commentaire:
Le bloc 1 a fixé comme référence la valeur zéro (0), et lance la rotation à puissance 25.
Le bloc 2 dans la boucle est en attente d'une résistance mécanique. Dès qu'elle se manifeste, le bloc s'exécute par une rotation négative du moteur de 90 degrés par rapport à la valeur zéro qui est celle de départ. Le curseur va donc se déplacer d'un quart de tour vers la gauche, à puissance 75.

Remarque: réglez le "Reset at Forward Limit" à une valeur de 45 degrés au lieu de 0, par exemple. Quel sera l'angle du curseur par rapport au pin? Pourquoi?
(Réponse: Quelle que soit la valeur de référence, le curseur se déplacera par rapport à cette référence de 90 degrés en valeur négative. Comme elle est fixée à 45 degrés, l'angle formé par le curseur et le pin est en valeur absolue de I45I +I90I = I135I degrés).

Exercice N° 2

Nous continuerons à travailler sur le montage précédent.
Ce programme peut être téléchargé sur le site de HiTechnic.

Fig. 10
Image

Et voici les panneaux de configuration de chaque bloc.

Fig. 11
Image

Initialisation du moteur à une valeur positive de 85 degrés (valeur de référence absolue).

Fig. 12
Image

Fig. 13
Image

Fig. 14
Image

Quand le bloc 2 s'exécute, l'angle formé par le curseur et le pin est de 85 -(- 45) = 130 degrés en valeur absolue (il s'éloigne du pin).
Quand le bloc 3 s'exécute, l'angle reste à 85 degrés (valeur de référence), et quand vient le tour du bloc 4, le curseur tourne dans le sens des aiguilles d'une montre (il se rapproche donc du pin) et l'angle devient 85 -(+ 45) = 40 degrés.
Puis la boucle se répète pour toujours.
Avez-vous compris?

Exercice N° 3.

Nous restons sur un autre exemple présenté par HiTecnic, toujours dans sa vidéo.
Commencez par modifier le banc d'essai de la manière suivante:

Fig. 15
Image

Le moteur reste connecté sur le port C. Sur la poutre 13 un capteur tactile est fixé à son extrémité. Le curseur en tournant fait basculer l'"angle beam 3x5" vers le capteur, qui active à son tour le bouton poussoir.
Voici le programme qui l'accompagne:

Fig. 16
Image

Le bloc 1 est un bloc Moteur classique dont la puissance est réglée à 30, durée illimitée. Il provoque la rotation du moteur jusqu'au moment où le bouton poussoir est heurté.

Les panneaux de configuration:
Le bloc 2 est un bloc HiTechnic Motor PID initialisé au moment de l'activation du bouton poussoir à une valeur de 130.

Fig. 17
Image

Le bloc 3 est également un bloc HiTechnic Motor PID. Le moteur tourne vers l'avant d'une valeur de -45 degrés et à puissance égale à 100.

Fig. 18
Image

Les blocs 4 et 5 sont identiques mais avec comme valeurs de "Set point" respectivement égales à 0 et 45 degrés.
Exécutez ce programme et exercez-vous en modifiant les valeurs des "Set point" pour bien comprendre le fonctionnement de ce bloc.

Les différentes Actions du Bloc HiTechnic Motor PID.

Comme cela a été dit, la première chose à laquelle il faut penser est de définir une position de référence pour les moteurs à contrôler.
Le Bloc HiTechnic Motor PID est capable de définir cette position de référence (exprimée en degrés), grâce à plusieurs Actions:

"Reset at Current Position" – à employer si vous connaissez la position courante du moteur, et que vous désirez l'assigner à une valeur de référence.
"Reset at Forward Limit" – à employer pour provoquer la rotation du moteur en marche avant, jusqu'à rencontrer une résistance mécanique constituant une limite supérieure. la valeur atteinte devient la valeur de référence.
"Reset at Backward Limit" – à employer pour provoquer la rotation du moteur en marche arrière, jusqu'à rencontrer une résistance mécanique constituant une limite inférieure. la valeur atteinte devient la valeur de référence.
"Reset at Mid-point of Limits" – à employer pour provoquer la rotation du moteur, d'abord en marche avant vers la limite supérieure, puis en marche arrière vers la limite inférieure, calcule la valeur moyenne qui devient la valeur de référence.

Une fois la valeur de référence fixée, toutes les utilisations ultérieures du bloc HiTechnic Motor PID se détermineront par rapport à cette référence.

Premier exemple

Vous allez réaliser sur un véhicule muni d'un dispositif de direction, un retour automatique au neutre uniquement par programmation.

Je vous invite à reproduire le modèle HiTechnic kart à partir de la notice de construction disponible sur le site:
http://www.hitechnic.com/blog/irreceive ... ple-model/
Il sera légèrement modifié par remplacement du capteur récepteur IR par le capteur à Ultrasons classique. De ce fait, le véhicule ne sera plus dirigé à l'aide d'une télécommande, mais se déplacera d'une manière autonome. S'il n'y a pas d'obstacle, il se dirigera tout droit, la direction restant au neutre; s'il détecte un obstacle à une distance de 50 cm, il accomplira un virage pour l'éviter.

Fig. 19
Image

Et voici le programme écrit avec les blocs HiTechnic Motor PID

Fig. 20
Image

Comme vous le constatez, il paraît tout simple.
Pour l'exécuter, ne posez pas encore le véhicule sur le sol, mais tenez-le à la main sans entraver le fonctionnement de la direction.
Lancez le programme. Vous remarquerez que les roues vont braquer vers les limites droite et gauche puis se positionneront au milieu. Puis le moteur de propulsion se met en route.
Posez à présent le véhicule au sol et observez ses déplacements.

Ce petit programme est sujet à développements; quelques explications sur les panneaux de configuration.

Fig. 21
Image

Le moteur de direction va tourner lentement dans un sens jusqu'à trouver la limite de résistance, puis repartira dans l'autre sens.

Fig. 22
Image

Le moteur se positionne au milieu et fixe la valeur de référence à zéro (0).

Puis dans une boucle "pour toujours" le moteur de propulsion démarre.
Le bloc Commutateur contrôlé par le capteur à Ultrasons (réglé à une distance inférieure à 50 cm) provoque une rotation rapide du moteur A en sens inverse de 45 degrés quand la condition est "VRAI".

Fig. 23
Image

Si la condition n'est pas vérifiée ( distance supérieure à 50cm, "FAUX"), Le moteur A conserve le "Set point" en valeur 0

Fig. 24
Image

On commence à percevoir l'intérêt de ce bloc qui simplifie l'écriture des programmes.

A suivre… ;)
Dernière édition par roboleo le Jeu Juil 07, 2011 12:25 pm, édité 1 fois au total.
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

Avatar de l’utilisateur
Skanzo
Level 5
Level 5
 
Messages: 188
Localisation: France, Champagne-Ardenne
Âge: 46 ans

Messagepar Skanzo » Mer Juil 06, 2011 9:10 pm

Un PID Mixte, sans nul doute le meilleur choix, plus facile à régler.

Merci Roboleo pour cette enième leçon ;)
Trop dur les legos, je me mets aux clipos!! :tare:


Retourner vers De la théorie à la pratique

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invités