Quel est le logiciel intégré au Mars Curiosity Rover?

544

Le rover Mars Curiosity a atterri avec succès et l'une des vidéos promotionnelles "7 minutes de terreur" se vante de l'existence de 500 000 lignes de code. C'est un problème compliqué, sans doute. Mais c'est beaucoup de code, il y avait sûrement un gros effort de programmation derrière. Est-ce que quelqu'un sait quelque chose sur ce projet? Je peux seulement imaginer que c'est une sorte de C. intégré

InfinitiesLoop
la source
91
Pourquoi supposerait-il qu’une seule langue est impliquée dans le projet?
Rig
5
Bon point, bien sûr, il y a probablement toute une technologie associée à cela. Je veux en savoir plus sur tout ça :)
InfinitiesLoop
3
Quelle partie? Le vaisseau spatial? Le rover? Instruments? Le système terrestre? Comme d'autres commentaires l'indiquent, plusieurs langues sont probablement utilisées dans les différentes composantes. Il n'est pas exclu que l'assembleur ait été utilisé pour certains composants critiques.
GreenMatt
67
Pour être honnête, quand j'ai vu le chiffre de 500 kloc, je me suis surpris à penser "seulement?" Cela aurait pu être réaliste si cela avait été Haskell, mais après avoir lu quelques mots sur les projets précédents et leurs langages de bas niveau, cela semblait beaucoup trop bas. Les codes de 2,5 millions de loc loc C cités ci-dessous sont plus crédibles.
Philip Kamenarsky
19
Une question plus intéressante que "dans quelle langue?" est "avec quel processus?" . C'est le processus qui fait la différence, et la NASA en utilise un rigoureux depuis des décennies.
dmckee

Réponses:

506

Il exécute 2,5 millions de lignes de C sur un processeur RAD750 fabriqué par BAE . Le JPL a un peu plus d'informations mais je suppose que beaucoup de détails ne sont pas publiés. Il semble que les scripts de test aient été écrits en Python.

Le système d'exploitation sous-jacent est le RTOS VxWorks de Wind River . Le RTOS en question peut être programmé en C, C ++, Ada ou Java. Cependant, seuls les systèmes C et C ++ sont standard pour le système d'exploitation, Ada et Java sont pris en charge par les extensions. Wind River fournit énormément de détails sur le comment et le pourquoi de VxWorks .

Le chipset sous-jacent est presque absurdement robuste . Ses caractéristiques peuvent ne pas sembler beaucoup au début, mais il est autorisé à avoir un et un seul "écran bleu" tous les 15 ans. Rappelez-vous que cet engin est sous le bombardement de radiations qui tueraient plusieurs fois un être humain. Dans l'espace, la robustesse l'emporte sur la vitesse. Bien sûr, une telle robustesse a un coût. Dans ce cas, il s’agit d’une somme modique de 200 000 $ à 500 000 $.

Un programmeur Erlang parle des fonctionnalités des ordinateurs et de la base de code sur Curiosity.

Ingénieur du monde
la source
48
Normes de codage en langage C JPL, spécifiquement pour les environnements intégrés au lieu du "logiciel au sol" comme ils l'appellent. lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
Patrick Hughes
80
@ Dynamique: C'est une mission tellement importante que la NASA ne s'y risquerait pas. Les humains qui écrivent l’ensemble font plus d’erreurs, c’est un fait mesuré.
MSalters
22
Le code C compilé est un code machine, le langage d'assemblage est un code machine, je ne vois pas la différence. Il n'y a pas une énorme différence de performance quand on y arrive.
Ramhound
23
La NASA est extrêmement prudente avec son code. Tout (TOUT) est fait dans les spécifications en premier et est revu, vérifié et raffiné à plusieurs reprises. Lorsqu'il est placé dans le flux de code de vie, il s'agit presque d'un copier-coller de la référence de la spécification. Les scripts de test reçoivent au moins autant d'attention que le code et aucune astuce «flashy» ou astucieuse n'est autorisée, sauf si elle est absolument nécessaire.
Stefan
99
@Amarghosh: Oui, et observez le fonctionnement de votre téléphone portable lorsqu'il traverse un environnement très
exposé aux
175

Le code est basé sur celui de MER ( Spirit and Opportunity ), basé sur leur premier atterrisseur, MPF ( Sojourner ). Il s'agit de 3,5 millions de lignes de C (en grande partie auto-générées), fonctionnant sur un processeur RA50 fabriqué par BAE et le système d' exploitation VxWorks . Plus d'un million de lignes ont été codées à la main.

Le code est mis en œuvre sous la forme de 150 modules distincts, chacun remplissant une fonction différente. Les modules fortement couplés sont organisés en composants qui résument les modules qu’ils contiennent et "spécifient une fonction, une activité ou un comportement spécifique". Ces composants sont en outre organisés en couches et il n’ya «pas plus de 10 composants de premier niveau».

Source: Exposé principal de Benjamin Cichy à l' atelier 2010 sur les logiciels de vol des engins spatiaux (FSW-10) , diapositives, audio et vidéo (commence par une vue d'ensemble de la mission et une discussion sur l'architecture à la diapositive 80).


Quelqu'un sur Hacker News a demandé "Je ne suis pas sûr de ce que signifie que la plupart du code C est généré automatiquement. De quoi?"

Je ne suis pas sûr à 100%, bien qu'il y ait probablement une présentation séparée cette année-là ou une année différente décrivant leur processus d'auto-génération. Je sais que c'était un sujet populaire en général à la conférence FSW-11.

Simulink est une possibilité. C'est un composant MATLAB populaire parmi les ingénieurs en mécanique, et donc la plupart des ingénieurs en navigation et contrôle, et qui leur permet de «coder» et de simuler des choses sans penser à ce qu'ils codent.

La programmation basée sur un modèle est certainement une chose dont l’industrie commence lentement à prendre conscience, mais je ne sais pas dans quelle mesure elle réussit à comprendre JPL ou s’ils auraient choisi de l’utiliser lorsque le projet a démarré.

La troisième et la plus probable des possibilités concerne le code de communication. Avec tous les systèmes spatiaux, vous devez envoyer des commandes au logiciel de vol à partir du logiciel au sol, recevoir une télémétrie à partir du logiciel de vol et la traiter avec le logiciel au sol. Chaque paquet de commande / télémétrie est une structure de données hétérogène, et il est nécessaire que les deux côtés travaillent avec la même définition de paquet, et formatez le paquet de sorte qu'il soit correctement formaté d'un côté et analysé de l'autre. Cela implique de définir un grand nombre d'éléments, y compris le type de données, la taille et le caractère final (bien que ce dernier soit généralement global; vous pouvez avoir plusieurs processeurs intégrés avec un caractère différent).

Mais ce n'est que la surface. Vous avez besoin de beaucoup de code répétitif des deux côtés pour gérer des tâches telles que la journalisation, la validation des commandes / télémétrie, la vérification des limites et la gestion des erreurs. Et alors vous pouvez faire des choses plus sophistiquées. Supposons que vous ayez une commande pour définir une valeur de registre matériel et que cette valeur soit renvoyée en télémétrie dans un paquet particulier. Vous pouvez générer un logiciel au sol qui surveille ce point de télémétrie pour vous assurer que lorsque cette valeur de registre est définie, la télémétrie est modifiée pour refléter le changement. Et bien sûr, certains points de télémétrie sont plus importants que d’autres (par exemple, le courant de bus principal) et sont conçus pour descendre en plusieurs paquets, ce qui implique une copie supplémentaire du côté vol et une déduplication des données du côté sol.

Avec tout cela, il est beaucoup plus facile (à mon avis) d'écrire une collection de fichiers texte statiques (au format XML, CSV ou quelque DSL / what-have-you), de les exécuter à l'aide d'un script Perl / Python et le tour est joué! Code!

Je ne travaille pas chez JPL, je ne peux donc fournir aucun détail qui ne soit pas dans la vidéo, à une exception près. J'ai entendu dire que le code C généré automatiquement est écrit par des scripts Python et que la quantité de codage automatique dans un projet varie considérablement en fonction du responsable de FSW.

Nate Parsons
la source
8
Cela pourrait faire la lumière sur Wind River, l'entrepreneur qui fabrique VxWorks: windriver.com/news/press/pr.html?ID=10901 J'ai lu que la NASA avait une équipe de personnes dont le travail est de trouver autant de bogues que possible. ils peuvent dans le code du système de contrôle écrit par une autre équipe. L'équipe de recherche de bogues est récompensée pour les bogues qu'elle a trouvés et elle est vraiment très bonne pour la recherche de bogues profanes. Lorsqu'un bogue est détecté, une analyse de type 5Y est effectuée pour déterminer comment le processus de développement logiciel pourrait être amélioré afin d'éliminer la possibilité que des bogues similaires se reproduisent. Un processus très laborieux et coûteux.
Jim Raden
15
@JimRaden Lorsque le coût direct d'un échec pour une sonde varie de quelques centaines de millions à plusieurs milliards de dollars et plusieurs années (le cas échéant) pour une tentative de rétablissement, une paranoïa extrême en assurance qualité est justifiée. Les coûts indirects sous la forme de dizaines / centaines d'étudiants diplômés perdant des années de travail et qui devaient recommencer à travailler sur un doctorat et divers nouveaux professeurs qui comptaient sur ces données pour alimenter leur recherche en tenure permanente sont un autre problème majeur, mais beaucoup plus difficile à obtenir. quantifier que les éléments de ligne du budget de la NASA.
Dan Neely
1
De quoi le C était-il généré automatiquement? S'il vous plaît dites-moi que ce n'était pas Simulink. :-)
William Payne
2
@William Payne Le discours principal indique que certaines d'entre elles sont des routines de codage / décodage de protocole auto-générées (pour la communication avec la terre), générées par des programmes python à partir de descriptions XML.
nos
1
Générer du code automatiquement à partir de DCI est plutôt cool. J'aime l'idée! J'aurais cependant utilisé YAML plutôt que XML. :-)
William Payne