Histoires de l'ordinateur lunaire. Partie 1

2e partie
3e partie

Certaines des photos ont été prises sur le site Web Hack The Moon .

Cet article a été présenté lors de la 27e conférence annuelle sur la navigation et la navigation de l'American Society of Astronautics (AAS) à Breckenridge, Colorado, le 6 février 2004. La version que vous proposez contient des illustrations, des commentaires et des corrections mineures supplémentaires.



RÉSUMÉ: La mission Apollo 11 a atterri avec succès sur la lune, malgré deux problèmes informatiques qui ont affecté le module lunaire lors de l'atterrissage contrôlé. Un problème non résolu dans l'interface radar de proximité a pris environ 13% du temps de cycle de l'ordinateur de bord, entraînant cinq pannes et redémarrages du programme. Un problème moins connu a été causé par des données erronées, qui ont entraîné des fluctuations de la poussée du moteur d'atterrissage du module lunaire, car l'algorithme de contrôle de la poussée était à la limite de stabilité. Une explication de ces problèmes permet de décrire le système d'exploitation de l'ordinateur de bord Apollo et le programme de contrôle de l'alunissage.


Figure illustrant l'atterrissage du module d'excursion lunaire (LEM) à la surface de la lune. Le pilote LEM a utilisé le radar d'atterrissage et les mesures visuelles à travers la fenêtre LEM pour suivre et vérifier le site d'atterrissage.

LM-1, également connu sous le nom d'Apollo 5, était une mission sans pilote de 6 heures en orbite terrestre impliquant uniquement le module lunaire. Elle a eu lieu le 22 janvier 1968. Pour ceux d'entre nous qui ont développé le logiciel informatique embarqué LGC (Lunar Module Guidance Computer), ce fut le premier vol. Un événement qui nous semble désormais infiniment lointain.

La mission comprenait deux démarrages du moteur du système d'atterrissage réactif du module lunaire (LM's Descent Propulsion System, DPS). Au deuxième allumage, Allan Klumpp, qui a développé les équations de contrôle de l'alunissage [1], basé sur les travaux de George Cherry [2], a imaginé un moyen de simuler un atterrissage sur la lune pour l'orbite terrestre. Il comprenait trois phases: la phase de freinage, la phase de «visibilité» et la phase finale d'atterrissage du module d'atterrissage. Le premier démarrage du moteur était nécessaire pour simuler la manœuvre de transition vers l'orbite de descente avant l'atterrissage. Ce fut le premier allumage du moteur du module lunaire en vol, d'une durée d'environ 38 secondes.

Le LGC (ordinateur de bord du module lunaire) en était à la 9e phase de la mission LM-1, un programme qui contrôlait le premier allumage du DPS. Les missions ultérieures ont été organisées de manière plus flexible et le premier allumage du DPS a été effectué à l'étape P40 du programme. (Pour un programme de vol plus détaillé, voir ici . Trad. Env. ) LM manœuvre en position d'allumage. L'ordinateur démarre le compte à rebours jusqu'à l'allumage. À la 30e seconde, la tâche READACCS est exécutée pour la première fois. Elle lit les lectures des accéléromètres dans le module inertiel de l'engin spatial, définit la tâche SERVICER à exécuter, qui démarre immédiatement, et se configure pour s'exécuter avec un retard de 2 secondes. Il est initialisé par le vecteur d'état du programme d'intégration orbitale, et les équations de navigation commencent à utiliser les données de l'accéléromètre pour calculer les vecteurs de position et d'accélération. READACCS et SERVICER démarrent toutes les deux secondes pendant toute la phase de vol avec le moteur allumé. Sept secondes et demie avant l'allumage, la combustion «sale» du RCS (Reaction Control System) a commencé. Nous nous sommes tous rapprochés du système de communication qui nous connectait au centre de contrôle de vol de Houston.

Nous avons entendu "Le moteur est allumé" ... et, après quelques secondes ... "Le moteur est arrêté."

Bientôt, nous avons réalisé ce qui s'était passé. Un petit morceau de code dans SERVICER, appelé "moniteur delta-V", a décidé que le moteur était défectueux et a envoyé une commande pour arrêter le moteur. Mais pourquoi? Afin de permettre au moteur de passer en mode poussée, ce code a toujours attendu un certain temps après avoir mis le moteur en marche avant de commencer la surveillance du moteur. Mais cette fois, à la fin de cette période, le moteur n'a toujours pas donné suffisamment de traction pour répondre aux critères du moniteur de traction du moteur.

Des calculs publiés [3] attribuaient la lente sortie du DPS à la pleine poussée du fait que les réservoirs du module lunaire n'étaient pas sous pleine pression. Mais l'enquête entreprise par l'auteur montre que le problème était différent. Pour un système de carburant DPS, pendant le fonctionnement normal, une soupape s'ouvrirait par laquelle le carburant pénètre dans la canalisation lorsque le moteur est prêt à fonctionner, quelques secondes avant l'allumage. Mais dans le module lunaire, la soupape régulant le débit de carburant du pipeline dans le moteur a probablement fui. Pour éviter une éventuelle entrée prématurée de carburant hypergolique dans le moteur (qui est lourd d'explosion), peu de temps avant le vol, il a été décidé de retarder le flux de carburant dans le moteur jusqu'au moment de l'allumage [4].

Le moteur a démarré lentement, non pas parce que les réservoirs étaient sous basse pression, mais parce que le carburant n'avait pas encore atteint le moteur. Il serait très simple pour nous de configurer un paramètre pendant combien de temps le moniteur delta-V devrait attendre avant de vérifier le moteur - mais personne ne nous en a parlé.

Houston a envoyé un signal pour éteindre l'ordinateur de bord. Les principaux objectifs de la mission LM-1 ont été atteints avec le contrôle de la Terre. Nous, ceux qui ont programmé l'ordinateur du module lunaire, sommes tombés dans le découragement et la déception, qui ont été amplifiés par la réaction du public, qui n'a pas fait la distinction entre une erreur dans le programme et des données incorrectes. Et ce n'était pas le dernier cas où le paramètre apparemment sûr lié aux caractéristiques du moteur d'atterrissage, mettait la mission au bord de l'échec.

* * *


Le développement du système de navigation pour le navire Apollo a été confié au Massachusetts Institute of Technology (MIT Instrumentation Laboratory) à Cambridge. Sous la direction de son fondateur «Dock», le laboratoire Charles Stark Draper (Charles Stark Draper), depuis 1939, a joué un rôle majeur dans le développement des systèmes de navigation inertielle. Le contrat avec nous pour le développement du système de guidage et de navigation primaire Apollo, PGNCS, prononcé «pings», a été le premier contrat signé dans le cadre du programme Apollo. Doc lui-même s'est enrôlé dans cette mission.

En 1970, le Laboratoire d'instrumentation a été renommé Laboratoire Charles Stark Draper, et en 1973, il est devenu indépendant du MIT, bien qu'il y soit lié. Le laboratoire de Draper est toujours activement impliqué dans les programmes spatiaux habités de la NASA.


Navigation de rendez-vous. La figure illustre la convergence et l'ancrage du LEM et du module de commande dans l'orbite lunaire après s'être levé de la surface lunaire.

Le programme contrôlant le vol du module lunaire s'appelait SUNBURST. Au moment du vol LM-1, nous travaillions déjà sur SUNDANCE, le programme de gestion de mission d'Apollo 9 en orbite autour de la Terre. SUNDANCE, à son tour, est devenu LUMINARY, un programme pour Apollo 10 et la mission d'atterrir sur la lune. La mission d'Apollo 11 en juillet 1969 était contrôlée par le programme LUMINARY version 99. La version 116 était contrôlée par Apollo 12 en décembre, etc.

Cet article adhère aux noms utilisés dans le programme Apollo. Les noms des programmes, les noms des variables dans les programmes, nous écrivons généralement en majuscules.

Les programmes pour cet ordinateur, nous les appelions officieusement «cordes» car ils étaient stockés dans l'ordinateur de bord dans une ROM ressemblant à une corde de fils de cuivre tressés. Pour les missions lunaires, la mémoire du programme était limitée à 36K mots, 16 bits chacun, plus un bit de parité et plus 2K mots de RAM. Compte tenu de la mémoire de l'ordinateur Apollo AGC et du module de commande (CM) contenant le programme COLOSSUS, il est vrai de dire que nous nous sommes assis sur la Lune avec 152 Ko de mémoire.


Figure 2. Module lunaire Apollo, système de guidage et de navigation principal, PGNS

L'AGC est assemblé dans un boîtier robuste en aluminium-magnésium étanche à l'air, anodisé couleur or, mesurant environ six pouces par un pied par deux pieds, pesant 70 livres et consommant environ 55 watts. Son circuit logique se composait de 5600 éléments OR-NOT à trois entrées, emballés en deux dans des circuits intégrés plats. Eldon Hall (Eldon Hall), le principal développeur de la machine, a pris une décision audacieuse d'utiliser des micropuces pour l'ordinateur malgré l'immaturité de cette technologie au début des années 60 [5].

LGC (avec tout l'équipement) était derrière les astronautes derrière le cockpit du module lunaire. Avant les astronautes, il y avait une structure rigide appelée «base de navigation», sur laquelle le télescope de pointage et le module de mesure inertielle (IMU) étaient montés en coordonnées géométriques fixes. Un clavier et un module d'affichage (DSKY) ont été montés entre les sièges des astronautes. La figure 2 montre les composants et les interfaces de haut niveau du système de navigation principal du module lunaire.

Le système IMU (unité de mesure inertielle), assemblé dans un corps sphérique d'un diamètre d'environ un pied, est le cœur du système de navigation. Son propre cœur, entouré de trois suspensions encastrées les unes dans les autres, est un «élément fixe», une petite plate-forme sur laquelle sont montés trois gyroscopes de précision et trois accéléromètres, qui doivent être dans une certaine position pour l'orientation inertielle du navire. Tout écart dans la position du navire est enregistré par des gyroscopes, et les suspensions se déplacent pour corriger la position, tout cela se produit avec une grande précision et (presque) ne dépend pas de la position du navire, le "membre fixe" donne une position de référence constante. La matrice REFSMMAT exprime le déplacement du terme fixe par rapport au référentiel inertiel. Les accéléromètres mesurent l'incrément de vitesse pendant la phase de vol avec le moteur allumé dans le système de coordonnées de l'élément fixe.


Figure 3: Module d'affichage lunaire et module clavier (DSKY)

DSKY était la principale interface homme-machine pour LGC. Pour un affichage qui avait trois registres à usage général, chacun d'entre eux stockant un numéro de signe de cinq décimales de long, trois registres de deux chiffres décimaux pour indiquer la phase actuelle du vol (numéros de 63 à 68 pour l'atterrissage sur la lune), ainsi qu'un «verbe» et "Noun". Les verbes et les noms sont nécessaires pour le langage primitif de communication entre l'équipe et l'ordinateur. La phase de vol et la combinaison verbe / nom sont dans certains cas définis par le programme, et dans d'autres cas sont saisis par l'équipage à partir du clavier avec 19 touches. Le contenu des trois registres généraux dépend du nom et du verbe saisis. DSKY contient également un ensemble de voyants lumineux contrôlés par l'ordinateur et d'indicateurs d'activité de l'ordinateur qui s'allument lorsque le LGC n'est pas en mode veille.

L'ordinateur AGC du module lunaire et du module de commande a été programmé en deux langues. Celui que nous avons appelé «Basic», ou plus correctement, «Yul», était un assembleur avec environ 40 équipes [6], rédigé par Hugh Blair-Smith. Le second était un interprète qui interprète la langue (en fait, un ensemble de sous-programmes), conçu pour simplifier les calculs de navigation, y compris les vecteurs et les matrices de nombres à double précision (nombres à virgule fixe de 30 bits), mais très lent. "L'interprète" a été écrit par Charles Muntz.

Le cycle de mémoire AGC avait une durée de 11,7 μs. L'ajout de précision simple dans l'assembleur a pris deux cycles. La multiplication vectorielle double précision dans l'interpréteur a pris environ 5 ms. L'un des défis de la programmation AGC était de jongler en deux langues pour atteindre le meilleur équilibre entre vitesse et compacité dans chaque cas.

Les programmes informatiques d'Apollo étaient suffisamment petits pour tenir dans une seule liste, généralement du papier plié avec des pages de 11 x 15 pouces avec une épaisseur de liasse de 6 pouces. La liste comprenait une table de caractères qui peut être suivie pendant l'exécution du flux. Ayant une seule liste, nous avons toujours su que la réponse était là lorsque nous recherchions un bug, bien qu'il soit parfois diaboliquement difficile à trouver.


Figure 4. Liste du programme du module lunaire LUMINARY 131

L'architecture LGC était modulaire mais éclectique. À l'intérieur de l'ordinateur, nous avons utilisé le système métrique, au moins pour les tâches de navigation. Mais les opérateurs de la NASA, et en particulier les astronautes, ont préféré le système de mesures anglais. Cela signifie qu'avant d'être affichés, la hauteur et la vitesse verticale (par exemple) sont converties du système métrique en pieds et pieds / s. La masse et la traction sont exprimées en livres. Parce que le but de cet article est de montrer partiellement ce que nous appelions les choses à cette époque des vaisseaux spatiaux, j'utiliserai les unités qui ont été acceptées à l'époque.


Caricature sur Draper's Dock

* * *


Maintenant, le service de surveillance de la mission sur Cambridge Parkway 75 a été déplacé dans une salle plus grande, le 20 juillet 1969, la salle était bondée, malgré les efforts de nettoyage par ceux d'entre nous qui étaient les plus impliqués dans cette phase de la mission. Nous avons écouté une boîte de squaw (appareil de communication) dans la salle de classe, tandis qu'à un quart de million de kilomètres d'ici, un vaisseau spatial habité a quitté la lune et s'est approché du point inférieur de son orbite (périlune), à ​​une altitude d'environ 50 000 pieds au-dessus des cratères en pointillés. surface, et allumé les moteurs d'atterrissage.

L'équipe a tapé «verbe 37» sur l'ordinateur, ce qui signifie la phase P63, préparation à la descente contrôlée, et est resté dans le module de commande jusqu'à ce que le moteur soit brûlé. L'ordinateur a exécuté un algorithme calculant le temps d'allumage exact et la position dans laquelle le module lunaire devrait être à ce moment. Ensuite, le vaisseau spatial se tourne vers la position souhaitée. Au moment de l'allumage, la tuyère du moteur doit être dirigée presque vers l'avant, contre le vecteur de vitesse orbitale du navire.

Maintenant, l'ordinateur a donné un code d'erreur de 500. Il pensait que l'antenne radar était dans la mauvaise position. L'équipe a vu que les interrupteurs étaient dans la bonne position, mais les a toujours commutés, et l'erreur a disparu. Cela n'était pas lié aux événements qui se sont produits ensuite, mais a renforcé nos soupçons selon lesquels les signaux qui indiquent à l'ordinateur la position de l'antenne ou des commutateurs se trouvent parfois.

Le contrôle est transféré au programme BURNBABY, le principal programme de contrôle d'allumage que nous avons écrit après LM-1, afin d'économiser de la mémoire en utilisant des algorithmes similaires dans la période précédant l'allumage. Sur DSKY, «Verb 6, substantif 62» s'affiche. Le registre du milieu contient le temps en minutes et secondes, le compte à rebours de l'allumage commence. L'écran s'éteint en 35 secondes, en 30 secondes il se rallume. C'est un signal que l'algorithme «Average-G» a démarré. En 7,5 s, la brûlure «sale» commence. 5 secondes avant le départ, l'affichage clignote, attendant la commande de départ de l'équipage. Buzz Aldrin, le pilote du module lunaire, se tient à droite du cockpit, il porte la responsabilité principale de travailler avec DSKY. Il appuie sur "PROCEED".

À l'heure 102: 33: 05, depuis le début de la mission, le carburant à allumage automatique entre dans le moteur d'atterrissage et est allumé à 10% des gaz. Armstrong n'a même pas ressenti une légère secousse - l'accélération était inférieure à 1 / 25g. L'affichage a mis en évidence le «nom 63» et les trois affichages de registre affichent désormais une vitesse maximale de 5559,7 pieds / s et une vitesse verticale de -2,2 pieds / s, une hauteur au-dessus de la surface de 49971 pieds [8]. Les supports du moteur ont aligné le vecteur de poussée du moteur d'atterrissage au centre de masse du navire. 26 secondes après l'allumage, le logiciel DPS atteint une poussée maximale de 9 870 livres (43 900 N), 94% des 10 500 livres annoncées officiellement, et en même temps, la manœuvre d'atterrissage commence.

Le P63 était une phase de freinage, son seul but était de supprimer la vitesse verticale. Il s'est terminé 8 minutes après que le navire a atteint les conditions de fin connues sous le nom de «porte haute» à 7 400 pieds. Fig. 5 illustre les phases de l'alunissage.


Fig. 5. Phases d'atterrissage sur la lune (nombres approximatifs)

Au moment 102: 36: 55 depuis le début de la mission, Neil Armstrong, le commandant, se tenait sur le côté gauche du cockpit du module lunaire, et a utilisé le joystick pour faire pivoter le vaisseau spatial autour de l'axe de la poussée, de sorte que la fenêtre du vaisseau spatial permettrait aux astronautes de regarder la surface, car au moment où il a été dirigé dans l'espace, et la Terre était visible à l'intérieur. Mais le navire tournait trop lentement. Armstrong a fait passer la limite de vitesse du pilote automatique de 5 degrés / s à 25 degrés / s [9]. Immédiatement avant cette manœuvre, le radar d'atterrissage a signalé "les données sont normales".

Il est impossible de naviguer avec autant de précision que d'atterrir en toute sécurité sur la surface lunaire sans connaître la distance et la vitesse actuelles. Ces informations sont fournies par le radar d'atterrissage. Malgré les vérifications de vraisemblance effectuées par le logiciel, les données radar n'ont pas pu être incluses dans le vecteur d'état sans confirmation de la commande et du centre de contrôle de vol. Environ cinq minutes après l'allumage, Aldrin a entré «verbe 16, nom 68» - une demande d'afficher le «nom», dans lequel le troisième registre montrait la différence entre la hauteur que le radar voit et l'ordinateur calculé. Cette variable, appelée DELTAH, était d'environ -2900 pieds. C'était dans la marge d'erreur. Les données radar sont entrées dans le système de navigation sans nuire à la trajectoire de vol.

Ensuite, nous avons entendu les mots «avertissement logiciel». À Cambridge, nous nous sommes regardés. À bord du vaisseau spatial, Aldrin a vu le signal PROG s'allumer et l'affichage a de nouveau montré «verbe 6, nom 63». Il a rapidement appuyé sur "verbe 5 substantif 9". DSKY 1202. , , .. , . : « , ». : « 1202» [10].

, , . . , , — 26- (Steve Bales) «» «». LGC, 1202, , . (Jack Garman) NASA (Russ Larson) MIT, . «», (Charlie Duke) . MIT, , - , , .

«» . DELTAH, «57», , . « 16, 68» , DELTAH 900 . . « 5 9 — 1202». «».


Fig. 6. () ( ) ( )

— 102:39:31, — , . «! , », . « !», , . — [11].

65% . , , , , . , . , , , 40 , , .

, , , , . , , [12]. , .


.

102:41:32, 7400 , 125 /, « » . . , , . DSKY 64, « », « 64» « 63». . — (landing point designator, LPD), , , , , , . . . ( , , , -, « » ). , . , , .

102:42:17, 1201. Executive ( : Executive — The Interpreter — , . . . ) — . 24 1202. «» . , 120 150 [13], .

, , .. 64 , LPD. , , , . , , , . , , , .

, , LPD , « , »[15]. 102:43:08 ( 650 ) , , , AUTO ATT HOLD . .

(ATT HOLD , Attitude-Hold, , . , , , .)

102:43:20, 430 , (P66). , ROD. ; . . , « » - , , , , 102:45:40 .

Source: https://habr.com/ru/post/fr462439/


All Articles