23) 20/11/2017 : Apprendre à apprendre (MJD 58077)

Spéciale au spatial, la gestion des personnels est très particulière, notamment pour les ingénieurs en génie logiciel. Il faut savoir qu’une sonde qui va vers une planète du système solaire doit voyager  durant des mois avant de parvenir dans la banlieue de sa cible. Par exemple pour Mars, dans les fenêtres de lancement les plus avantageuses la machine scientifique va mettre plus de six mois terrestres pour arriver dans la sphère d’influence du corps céleste.
Imaginons que le nombre d’ingénieurs informaticiens recrutés soit suffisant pour développer entièrement les logiciels d’exploitation embarqués entre le début du projet et le jour du lancement. Quand la fusée quitterait le pas de tir, ils se trouveraient au chômage. Aussi, pour « réguler » leur charge de travail, on recrute deux fois moins de personnes. Du coup, quand on allume les moteurs, la sonde est totalement inutilisable. Seules les séquences qui vont permettre d’effectuer le décollage, le voyage, la mise en sommeil, les télémesures et l’atterrissage sont disponibles. Pendant les six mois durant lesquels la sonde est en sommeil, à Terre les ingénieurs continuent à créer les programmes d’exploitation. Et, régulièrement, le vaisseau étant perdu dans l’immensité du vide sidéral, on réveille l’insecte et on complète ses performances. Cette méthode propre au spatial qui induit des aptitudes à l’apprentissage impose que le programme qui anime la machine soit capable de :

• « d* » : Débuter un apprentissage, (Et naturellement suspendre ce mode.)
• « x* » : Lister le programme actuellement mémorisé,  (Il faut le vérifier avant de s’en servir.)
• « u* » : Utiliser le programme actuellement sauvegardé en mémoire non volatile.
• « y* » : Effacer un programme devenu caduque qui encombre la mémoire.

Philosophiquement, doter JEKERT d’une faculté à apprendre est fort séduisant. Il serait toutefois hors propos d’imaginer concevoir un éditeur sophistiqué associé à un compilateur ultra performent. Nous allons aborder ce thème en douceur sans perdre de vue qu’il faudra empiéter le moins possible sur l’espace réservé au programme car le cahier des charges prévoit d’installer des expériences scientifiques. Aussi, pour l’apprentissage nous allons simplifier au maximum.

Écologiquement ce n’est pas l’idéal, toutefois je crois indispensable d’imprimer les Fiche n°12 à Fiche n°16, et surtout les deux dernières qui présentent les divers protocoles qui seront utilisés pour exploiter la sonde quand elle sera à son poste et débutera sa mission. Ces fiches anticipent considérablement sur l’état actuel du projet car elles sont relatives à la version ultime du logiciel qui sera téléversé dans l’ATmega328 juste avant le décollage. En conséquence, expérimentez à profusion toutes les possibilités présentées par P13_Toutes_les_postures.ino en vous limitant aux seules commandes légales propres à cette version et indiquées en tête du programme.
ATTENTION : Dans le démonstrateur actuel le mode apprentissage est signalé en faisant clignoter la LED rouge correspondant aux moteurs figés. Dans la version complète P30 ce clignotement ne sera plus utilisé. Une LED spécifique rouge indiquera le mode enregistrement.
On observe que pour activer le mode pilotage manuel des moteurs on utilise une commande programme « p9m* »,  alors que pour le désactiver on se contente d’une instruction à un caractère  « k* ». Cette différence dans les genres ressemble à un manque de cohérence. Nous sommes obligés d’employer une commande du genre programme car il faut la compléter par le caractère ‘m‘ qui précise le moteur concerné. Pour annuler ce mode, une commande à un seul caractère est suffisante. La lettre ‘k‘ est choisie car elle était disponible et suggère le mot KILL pour en faciliter la mémorisation. Je vous suggère chaque fois que vous allez activer un quelconque apprentissage ou un effacement dans l’EEPROM, de lister le contenu de cette dernière avant et après pour cerner avec précision les effets « binaires » obtenus ou qui en résultent. Pensez à la commande « b* » qui imposera l’affichage en Hexadécimal, plus facile à interpréter pour ce type de pages d’écran.
Enfin, notez qu’une EEPROM qui n’a jamais été programmée ne contient que des $FF. Si vous utiliser « p20* » comme commande vous obtiendrez des -1 pour toutes les consignes, car les octets sont considérés comme des entiers. Il se trouve que $FFFF est la représentation binaire de la valeur -1 pour un int, d’où ces données étranges au premier regard. Dès que vous aurez sauvegardé au moins une fois une posture, les affichages issus de la commande « p20* » seront plus vraisemblables.

La suite est ici.

Laisser un commentaire

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