46) 23/12/2017 : Stabilisation gyroscopique de JEKERT (MJD 58110)

Samedi qui approche du réveillon de Noël, tous les personnels sont libérés pour préparer cette soirée si chaleureuse. Les magasins sont bondés, car tous celles et ceux qui ont tardé à faire leurs achats se bousculent entre les étalages. Comme beaucoup, complètement pris par le développement du projet, nous avons repoussé jusqu’à la dernière minute nos emplettes de fin d’année. Et là, juste en face de nous, trône sur l’une des plus belles étagères de la boutique le rêve de notre vie robotiquoloisir. On vérifie sur l’étiquette. Et oui, c’est bien écrit « Module de stabilisation gyroscopique ». Avec un peu de réticence on constate que cette petite merveille est vendue au prix de 504 octets. Comme dans notre bourse il y a encore 1974 de ces précieux billet, le calcul est vite fait. Si on prend ce joli paquet, il ne restera plus que 1470 cellules binaires dans notre porte-monnaie.

L‘image est belle sur la boiboite logicielle. On imagine JEKERT posée sur un plateau en bois que l’on incline dans toutes les directions. Immédiatement les membres de la petite machine s’animent et rapidement elle se stabilise, le plateau de la centrale MPU6050 restant à l’horizontale. C’est ça la stabilisation gyroscopique. On demande un défilement permanent des données gravitationnelles. Si sans stabilisation on incline le plateau, Tangage et Roulis changent de valeurs et adoptent des grandeurs positives ou négatives. Avec une commande spécifique à un caractère on valide l’auto-stabilisation. Chaque changement d’inclinaison anime les servomoteurs, et rapidement Tangage et Roulis reviennent à l’inclinaison zéro. C’est magique … mais 504 octets !

Principe de la stabilisation gravitationnelle.

Hooooo, et puis mince alors, c’est Noël, on peut s’offrir cette petite folie. Il reste encore largement de quoi parer des problèmes logiciels éventuels, sans compter que ne pas utiliser une centrale inertielle pour ce type d’automatisation, ce serait quasiment Hors propos. C’est bon, on se laisse tenter

et le démonstrateur P17_Stabilisation_gyroscopique_T5.ino est à nous pour la somme annoncée sur l’étiquette. La notice indique que pour valider ou annuler ce mode la commande à un caractère « _* » a été réservée. Attention, il s’agit du « souligné » et non du moins.

Ce caractère de soulignement nommé aussi « Underscore », et propre à l’avènement informatique, a été choisi car il suggère l’horizontalité de la plateforme inertielle. Il sera ainsi relativement facile à mémoriser, tout au moins pour celles et ceux qui en resteront au pilotage direct à partir de la ligne série USB du P.C. (Moniteur de l’IDE.)
Actuellement, il est difficile d’ajouter une LED de signalisation sur le matériel. Pas impossible, puisque la broche analogique A1 reste disponible. Tout redémonter, modifier le circuit imprimé principal, trouver une place pour qu’elle soit visible …
– Môamôa pas du tout envie !
Suite à diverses tentatives de réutilisation d’une LED déjà sur le circuit imprimé, la simplification informatique a d’emblée éliminé S12 à S15 du multiplexeur. L’expérience a montré que passer en double signalisation l’une des autres sources lumineuses n’était pas idéal car trop gourmand en octets pour différencier les deux cas d’éclairement possibles et leur éviter de se contrarier. Par ailleurs, l’allumage pouvant signifier deux états différents, l’interprétation était forcément ambiguë.
Au final, une solution simple a émergé : Faire changer la fréquence de clignotement de la boucle de base. Le Mode stabilisation gyroscopique se superpose à toutes les postures et peut dans certains cas diverger. Aussi, il faut impérativement qu’il soit « très présent » en visualisation.
Si on active la gyrostabilisation, la LED verte de « la boucle de base » clignote très rapidement. « Impossible de l’oublier ». Dès que ce mode est invalidé, elle reprend sa cadence normale signalant que la boucle de base « tourne comme une montre ».
Télémesure oblige, quand la sonde sera sur Mars, il ne sera plus possible d’en observer les témoins lumineux. Il importe de pouvoir en permanence se faire indiquer l’état complet de la machine. Aussi, quand avec la commande « i* » on télécommandera la transmission d’un état les lieux, si le Mode stabilisation gyroscopique est actif, ce sera précisé comme montré sur la Fig.215 par ajout de l’indication « STB » en début de la ligne d’état des célérités servomoteurs.

Erreur tragique, le bug bien camouflé …

Galère de galère, arriver à faire fonctionner cette scongregneugneu de stabilisation n’a pas été immédiat. Et pourtant sur le papier l’étude préalable était soignée. Les essais se succédaient aux essais avec une furieuse tendance à la divergence. Certains moteurs allaient en butée et le bouton de panique s’est avéré d’une mesure d’urgence qui statistiquement dépassait largement l’usage habituel. La cause de cette difficulté résidait dans la Fiche n°10 particulièrement utile quand on étudie de nouvelles postures ou mouvements coordonnés. Lors de la rédaction de ce type de document, on ne frappe pas au clavier toutes les informations textuelles. Le Copier/Coller fait gagner un temps considérable. Mais ce travail routinier engendre de l’entropie … avec inversion (Voir la Fig.216) de deux textes pour le moteur n°3. L’analyse du Mode stabilisation gyroscopique utilisait ces deux éléments, et piloter un moteur dans le mauvais sens augmentait l’inclinaison, avec « correction infinie ». Pas question de laisser trainer une telle erreur. Aussi, dans le petit « paquet » des diverses fiches qui accompagnent ce TOME5 vous trouverez un « clone corrigé » de cette Fiche n°10.
On peut repartir sur de nouvelles bases, le raisonnement qui en dérive redevient fiable.

Principe de la stabilisation en roulis.

Partant d’une posture qui généralement ressemblera à Stable Transversal, on comprend fort bien que la surface de sustentation étant rectangulaire, les comportements en Roulis et en Tangage seront bien différents. Le traitement qui sera effectué devra donc s’adapter à cette caractéristique morphologique de JEKERT. Dans le fonctionnement de la boucle de base, les deux axes sont traités simultanément. Néanmoins nous allons étudier séparément les deux directions.
Sur la Fig.217 la sonde est vu de l’arrière en regardant vers l’avant, et l’on suppose qu’elle est inclinée vers bâbord, le coté le plus bas étant donc à gauche. Dans ces conditions, la valeur retournée par le MPU6050

 

est positive pour le roulis. Pour compenser l’inclinaison, on va se contenter de faire tourner les Tibias dans le sens des flèches roses, ce qui va faire descendre les chaussettes des griffes de bâbord et monter celle de tribord. (Flèches bleues.) Sur la Fig.217 on a repéré les numéros des moteurs concernés. Ce comportement va se continuer jusqu’à ce que la centrale gyroscopique mesure un Roulis nul. La petite machine se retrouvera dans la configuration de la Fig.218 sur laquelle on constate que la largeur entre les divers points d’appui a tendance à légèrement augmenter. Ce phénomène génèrera un peu de frottement, mais surtout est favorable à la stabilité. La machine voit également sa hauteur diminuer, facteur également favorable au non basculement. Quand le point de contact C entre la chaussette et le sol dépasse la verticale du genou G la hauteur à bâbord se remet à diminuer. Cependant à tribord la hauteur diminue plus rapidement, et la correction continue normalement. La limite de l’inclinaison correspond à la posture pour laquelle la chaussette de la Jambe A vient

en contact avec le sabot du bouclier. (Voir la Fig.219 et 5 sur la Fig.220.) Ce cas correspond à une inclinaison latérale de 9° environ. Profitons de la Fig.220 qui montre la petite machine de face posée sur une pente α inclinée à 9° sur tribord pour faire le point. Pour cette photographie c’est l’inverse de l’inclinaison étudiée sur les dessins. Issu du connecteur HE14 situé dans la région cachée R sur le dessus du circuit imprimé du condensateur de 470µF, la ligne d’alimentation de puissance traverse la machine pour ressortir à bâbord en 9. Puis ce toron part en 6 passant vers l’arrière entre le bouclier et le circuit imprimé principal. On reconnait facilement en 4 le LASER alimenté par la petite ligne 1. En 7 on repère l’un des sabots du bouclier avec en 8 l’un des deux sabots pour l’anti-basculement. Pour maintenir bien à l’horizontale le circuit imprimé 15, donc la centrale gyroscopique, le servomoteur du Genou 2 a fait tourner le Tibia 3 vers le bas. Au contraire, le Genou 16 a orienté le Tibia 17 vers le haut. Seuls les Genoux tournent sur les servomoteurs, ce qui fait que les angles d’orientation entre les Tibias tels que 17 et les Griffes telles que 13 ne changent pas. Sur cette photographie la posture est presque en limite. Dans la zone 5 le contact entre la Griffe et le sabot du bouclier est presque établi, le moteur du Pied serait alors en situation de forçage. Quand on incline de plus en plus le support sur lequel repose la sonde, il est assez amusant de voir JEKERT se déformer latéralement vers le bas de la pente et se tasser vers le sol. Le circuit imprimé 15 reste parfaitement à l’horizontal. En 11 l’on observe le toron torsadé de la ligne qui réunit la centrale inertielle au circuit imprimé principal. Grande faiblesse de cette petite machine : Le manque manifeste de rigidité de certaines pièces mécaniques, tout particulièrement les Hanches qui supportent dans de mauvaises conditions le poids de JEKERT. On voit très bien en 10 et 12 que les deux Fémurs fléchissent comme les ailes d’un avion.

Principe de la stabilisation en tangage.

Contrairement au Roulis, pour le Tangage il n’a pas été possible d’éviter des mouvements coordonnés, car tenter de n’agir que sur les Fémurs manque totalement d’efficacité, et pour arriver à compenser une faible inclinaison la machine se trouve complètement « écartelée ». Du coup on ne peut corriger que de faibles inclinaisons, et surtout accompagnées de frottement de glissement inacceptable. Géométriquement, pour du roulis on monte ou l’on descend les chaussettes « en parallèle » de chaque coté. Si gauche monte, alors droite descend. Pour du tangage la procédure sera analogue, mais c’est devant et derrière que les déplacements auront des sens identiques. Par exemple si l’animal robotisé est cabré comme sur la Fig.221, les deux Griffes de devant doivent monter et celles de derrière descendre pour faire tourner le châssis comme montré par la flèche rose. Tous les dessins proposés dans ce chapitre sur le Mode stabilisation gyroscopique sont très schématisés mais réalisés à l’échelle. Les proportions des membres sont respectées, ainsi que la position des articulations.
Considérons la Fig.222 sur laquelle la sonde est vue de devant et nous « regarde ». C’est le train avant qui est représenté sur ce dessin. Si on désire baisser les deux chaussettes simultanément à droite et à gauche, il faut engendrer les rotations R sur les Genoux. Les extrémités des Tibias qui matérialisent les Pieds montent en M. Par déplacement réciproque on fait Descendre l’avant de la sonde, mouvement constituant précisément le but de cette manœuvre. La rotation R provoque une translation latérale T du Pied qui déporte aussi l’extrémité du Tibia vers l’extérieur. En sois ce petit déplacement n’est pas dramatique. Par contre, la rotation R ramenée en extrémité de Griffe engendre un écart latéral considérable. La machine est « écartelée » et peut s’effondrer sous l’influence des efforts de flexion. C’est pour parer ce problème, que nous allons simultanément coordonner une rotation inverse R de la Griffe. L’idéal pour éviter tout frottement, et donc de l’usure par abrasion, consisterait à annuler tout déplacement au sol de la chaussette. Dans la pratique, pour minimiser le code objet on se contente d’une approximation. Du coup, au cours de la stabilisation en Tangage on observera de petites variations de l’empattement, ces dernières restant tout à fait acceptables. Pour maintenir parfaitement constante la distance qui sépare la chaussette du plan médian de la machine il faudrait coordonner R et R par des amplitudes de consignes angulaires qui relèvent d’un calcul trigonométrique goinfre en octets de code machine. On se contente de faire varier linéairement les consignes qui traitent les rotations R et R. Avec la Fig.222 nous avons vu comment faire Descendre le nez de la petite machine. Si on doit le faire Monter, car la machine au lieu d’être cabrée s’est engagée dans une pente descendante, on fait l’inverse sur les rotations et provoquer de ce fait les descentes D. Naturellement, si au lieu de vouloir faire monter ou descendre l’avant de la machine on veut obtenir cet effet sur l’arrière, on procède exactement pareil mais sur les servomoteurs des Jambe B et C au lieu des membres sur A et D. Sur la photographie de la Fig.224 la sonde repose sur le plateau P dont l’inclinaison est maintenue au moyen de la cale X. On constate que l’amplitude de la stabilisation est considérable puisque sur cette vue la pente est d’environ 30°. Cette efficacité résulte de la distance relativement faible qui sépare le train avant du train arrière.
Dévoilant une foule de petits détails, la Fig.225 montre la sonde vue de dessus quand elle est en posture de stabilisation gyroscopique. Conformément aux explications relatives à la correction d’assiette en Tangage, pour Descendre les Griffes à l’arrière les Fémurs tournent vers le bas. On remarque bien sur la photographie Fig.225 que les Fémurs sont pratiquement verticaux. La rotation R compense un peu trop R ce qui engendre un glissement de la chaussettGint vers l’intérieur. Si l’on adopte un support pas trop rugueux, ce glissement reste toutefois acceptable. Du reste, lorsque la sonde s’est stabilisée en attitude horizontale, on peut déclencher « p14* » pour libérer les efforts. Pour monter les Griffes à l’avant les Fémurs tournent vers le haut écartant les Genoux vers l’extérieur. La rotation R ne compense pas assez R ce qui engendre un glissement de la chaussette Gext vers l’extérieur. On voit parfaitement sur cette image que l’animal mécanique est plus écartelé à l’avant qu’à l’arrière. (Observation de la position des appuis au sol.)

Pour réduire ces déplacements parasites, il a été tenté d’établir une meilleure proportionnalité dans les deux mouvements coordonnés. La technique a consisté à doubler la variation de consigne sur l’élément trop « lent ». Les dérapages au sol étaient effectivement bien moindres. En contre partie, la flexion des membres associée à des accélérations plus importantes généraient des surcompensations se traduisant par une oscillation entretenue infiniment plus néfaste que le petit inconvénient du frottement au sol des chaussettes. La photographie de la Fig.224 démontre que l’efficacité de la correction en Tangage est impressionnante puis-qu’autant en cabrage qu’en piqué on peut compenser facilement des pentes de 30°. Cette particularité s’explique par le fait que la distance D qui sépare les appuis avant des appuis arrière est relativement faible. Du coup un différentiel de hauteur entre les deux trains se traduit par une variation en tangage importante.
Revenons à cette photographie pour observer une fois de plus la petite machine dans sa version complète. En 1 le cordon USB passe entre les deux moteurs arrière et va vers le P.C. pour un pilotage par le moniteur de l’IDE. En 2 on distingue le connecteur HE14 double qui branche la ligne d’alimentation des moteurs sur le circuit imprimé du condensateur de 470µF avec en 3 le connecteur HE14 reliant le multiplexeur au

circuit imprimé principal. La ligne 4 alimente le LASER 5. Discrète, en 6 la cellule photorésistante se cache sous le filtre coloré 7. Le capteur d’hygrométrie 8 est poussé vers l’arrière par le module du télémètre et s’appuie sur le petit bloc de mousse synthétique 9. Le connecteur HE14 en 10 est branché sur la centrale gyroscopique 11 sa ligne de fils torsadés gris arrive du dessous du circuit imprimé 14. Venant du circuit imprimé principal, la ligne 12 relie les sorties S12 à S15 du multiplexeur. Bien visible en 13 le module de la boussole statique dépasse un peu du multiplexeur. Enfin en 15 s’éloigne de la sonde par l’arrière le cordon ombilical de pilotage qui ira à la raquette de commande ainsi que la ligne d’alimentation en puissance des servomoteurs.

Séquences qui traitent la stabilisation gyroscopique.

Fonction imposant une correction « en temps réel », on se doute que leur appel sera effectué dans la boucle de base du programme void loop () tout en assurant la prise en compte d’une consigne éventuelle de dialogue Homme / Machine arrivant sur la ligne série USB. On constate sur le listage proposé ci-dessous que dans la boucle de base on ne développe pas le code, on se contente de faire appel une procédure spécifique pour que le programme soit plus lisible :

Si Stabilisation_gyroscopique vaut true, il y a appel à Stabilisation_GYROSCOPIQUE(). On peut noter au passage que l’identificateur du booléen et le nom de la procédure sont identiques. Le compilateur fait la différence entre lettres majuscules et lettres minuscules, c’est un avantage incontestable car on peut comme ici choisir des identificateurs parlants et assurer leur différenciation par le compilateur. La prise en compte d’une consigne sur un caractère « _* » se contente d’inverser l’état du booléen testé en permanence dans la boucle de base :

L’écriture initiale des séquences de coordination des mouvements de stabilisation consiste à agir sur quatre moteurs pour le Roulis, et sur huit moteurs pour le Tangage. Pour chaque servomoteur, on va augmenter ou diminuer d’une unité sa valeur de consigne mémorisée dans le tableau dédié et constamment mis à jour Configuration_actuelle[Sortie]. Comme chaque mouvement élémentaire revient à agir sur une sortie en augmentant ou en diminuant de un sa valeur de consigne, il devient particulièrement rentable de créer une procédure Stabilise() recevant les paramètres nécessaires :

Bien qu’elle effectue un travail considérable, la routine est presque élémentaire à comprendre. À son appel en (1) on lui communique dans le booléen Plus le signe de la variation désignée pour le mouvement. Il est facile de deviner que le byte Sortie sert à indiquer à cette procédure sur quel servomoteur elle doit agir. En (2) on récupère dans la variable Consigne_stabilisation la valeur actuelle de consigne pour la Sortie concernée. En (3) on va incrémenter ou décrémenter d’une unité la valeur de Consigne_stabilisation en fonction du sens indiqué par le paramètre Plus. Enfin en (4) on modifie la position actuelle du servomoteur piloté par Sortie, sachant que la procédure de servitude Mouvoir() ne le fait que si les moteurs ne sont pas figés avec« f* »et dans ce cas met à jour la valeur de la consigne dans Configuration_actuelle[Sortie].

Réaliser la stabilisation consiste dans la procédure invoquée à chaque rotation de la boucle de base à mesurer en ligne (1) les angles d’inclinaison Roulis et Tangage puis traiter en cascade les deux corrections si elles sont différentes de zéro. Pour chaque déviation le programme détermine dans quel sens le machine penche. Pour le Roulis, si en (2) la machine penche à gauche, alors on effectue une correction élémentaire en (3). Seuls dans ce cas les sorties 1, 4, 7 et 10 sont concernées. Si la sonde penche à droite, (4) va effectuer un traitement absolument identique en changeant uniquement les sens de rotation sur les moteurs. Pour le Tangage, ce sont les lignes (5) et (6) qui déclencheront une correction élémentaire. Supposons que JEKERT soit engagée sur une pente descendante. Piquant du nez, la valeur de Tangage sera négative. Les lignes (9) et (10) seront exécutées. Pour mieux comprendre les valeurs des booléens adoptées, considérons la Fig.226 qui symbolise le bouclier vu par dessus. Nous savons que les corrections en Tangage imposent des mouvements coordonnés sur deux moteurs par Jambe. Les n° des moteurs sont repérés en noir dans les petits cercles avec leurs sorties respectives en violet. Pour redresser la plan inertiel il faut faire Monter l’avant et Descendre l’arrière du robot. Naturellement on en déduit qu’il faut Descendre les Fémurs devant et les faire Monter derrière. Pour réduire les glissements des chaussettes sur le sol il faut faire tourner les Tibias vers l’Extérieur devant et vers l’Intérieur derrière. Tous ces détails sont résumés sur la Fig.226 sur laquelle est indiqué en couleur verte le sens dans lequel il faut modifier chaque Consigne_stabilisation. Pour déterminer s’il faut incrémenter la consigne avec ++ ou au contraire la diminuer avec l’instruction on va s’aider de la Fiche n°10. (Attention, il importe de prendre celle qui est corrigée !) Par exemple le Genou 2 en sortie 1 doit faire Descendre le Tibia donc aller vers le Bas. Quelle que soit la valeur de sa consigne actuelle on devra tendre vers la valeur 140 la plus faible. Il faut donc décrémenter avec . Pour sa part le Pied 3 en sortie 2 doit faire tourner la Griffe vers l’Extérieur. Quelle que soit la valeur de sa consigne actuelle on devra tendre vers la valeur 130 la plus faible. Il faut donc décrémenter avec . Pour ce qui est des mouvements à gauche on doit produire les mêmes effets, cependant le sens de variation des consignes est différent. Par exemple le Genou 11 en sortie 10 doit faire Descendre le Tibia donc aller vers le Bas. Quelle que soit la valeur de sa consigne actuelle on devra tendre vers la valeur 470 la plus forte. Il faut donc incrémenter avec ++. Pour sa part le Pied 12 en sortie 11 doit faire tourner la Griffe vers l’Extérieur. Quelle que soit la valeur de la consigne actuelle on devra tendre vers la valeur 500 la plus forte. Il faut donc incrémenter avec ++. Il sera facile, Fiche n°10 corrigée en main, d’effectuer ces raisonnements pour tous les cas de figure. Ceci dit, quand on a analysé avec soin pour une action à cabrer, pour un Tangage positif il suffit d’inverser la valeur de tous les booléens et en déduire les lignes d’instruction (6) et (7) du test effectué en ligne (5) pour agir à piquer.
Dans le démonstrateur P17_Stabilisation_gyroscopique_T5.ino pour un petit surcoût de quatre octets, on peut annuler le mode « Listage gyro en continu » quand on passe en mode Sommeil avec « s* » ou lorsque l’on quitte le programme avec la commande « q* ». Cette petite amélioration n’a pas été introduite dans P30 car elle y ajoute dix octets, considéré alors comme du gaspillage.

Intégration de la stabilisation gyroscopique à P30.

Avant d’aborder le vif du sujet, c’est à dire débuter les analyses pour un pupitre de commande autonome, on va dans ce chapitre en terminer avec P30_Programme_COMPLET_T5.ino et en faire un logiciel complet qui intègre vraiment tous les derniers développements. En effet, le programme P30 du TOME 4 n’émulait pas le spectroscope colorimétrique qui est ajouté à la version du TOME 5. Cette fonction ajoutée consomme 206 octets. Bien entendu, on ajoute également la stabilisation gyroscopique. Dans l’état final du programme « complet archi complet » l’augmentation du code objet est de 512 octets. Il faut toutefois préciser qu’un changement de stratégie est également intervenu. À partir de cette version du logiciel, l’appel à la fonction Libere_efforts() n’est plus effectué à chaque mouvement élémentaire mais uniquement avec « p14* », et quelques programmes spécifique comme REVEILLER, retour de hauteur maximale etc. Cette modification a été ajoutée car invoquer Libere_efforts() après chaque mouvement élémentaire pénalisait trop en durée les déplacements avec répétition. Par ailleurs, la machine n’étant pas assez rigide, les flexions parasites contrecarrent notablement Libere_efforts() qui par voie de conséquences manque d’efficacité.
Dans l’état actuel du logiciel complet il reste 1256 octets de disponibles s’il faut modifier le programme. Cette marge est satisfaisante pour envisager sereinement la version qui dialoguera avec la raquette de commande. Il faut s’attendre à des modifications « boulimiques », mais elles seront probablement en partie compensées par le fait que toutes les procédures de « bavardages » sur la ligne série de dialogue avec le Moniteur de l’IDE vont se voir simplifiées car les affichages pour les opérateurs de maîtrise seront à la charge du logiciel installé sur le pupitre. Il est temps de débuter les études visant à faire dialoguer les deux cartes Arduino NANO.

La suite est ici.

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *