In was für einer Software ist der Mars Curiosity Rover eingebaut?

544

Der Mars Curiosity- Rover ist erfolgreich gelandet, und in einem der Werbevideos "7 minutes of terror" wird mit 500.000 Codezeilen gerühmt. Es ist zweifellos ein kompliziertes Problem. Aber das ist viel Code, sicherlich steckte ein ziemlich großer Programmieraufwand dahinter. Weiß jemand etwas über dieses Projekt? Ich kann mir nur vorstellen, dass es eine Art eingebettetes C ist.

InfinitiesLoop
quelle
91
Warum sollte man annehmen, dass nur eine Sprache an dem Projekt beteiligt ist?
Rig
5
Guter Punkt, sicher, es ist wahrscheinlich eine ganze Reihe von Technologien damit verbunden. Ich möchte mehr darüber wissen :)
InfinitiesLoop
3
Welcher Teil? Das Raumschiff? Der Rover? Instrumente? Das Bodensystem? Wie aus anderen Kommentaren hervorgeht, werden in den verschiedenen Komponenten wahrscheinlich mehrere Sprachen verwendet. Es ist nicht ausgeschlossen, dass Assembler für einige der zeitkritischen Komponenten verwendet wurde.
GreenMatt
67
Um ehrlich zu sein, als ich die 500-kg-Figur sah, habe ich mich beim Denken erwischt: "Nur?" Es hätte realistisch sein können, wenn es Haskell gewesen wäre, aber nachdem ich ein wenig über frühere Projekte und ihre Sprachen auf niedrigem Niveau gelesen hatte, schien dies viel zu niedrig. Der unten aufgeführte C-Code mit 2,5 Millionen Loks ist glaubwürdiger.
Philip Kamenarsky
19
Eine interessantere Frage, die "in welcher Sprache?" ist "mit welchem ​​Prozess?" . Es ist der Prozess, der den Unterschied ausmacht, und die NASA wendet seit Jahrzehnten einen strengen an.
dmckee

Antworten:

506

Auf einem von BAE hergestellten RAD750-Prozessor laufen 2,5 Millionen C-Leitungen . Die JPL hat ein bisschen mehr Informationen, aber ich vermute, dass viele der Details nicht veröffentlicht werden. Es scheint, dass die Testskripte in Python geschrieben wurden.

Das zugrunde liegende Betriebssystem ist Wind Rivers VxWorks RTOS . Das betreffende RTOS kann in C, C ++, Ada oder Java programmiert werden. Allerdings sind nur C und C ++ Standard für das Betriebssystem, Ada und Java werden von Erweiterungen unterstützt. Wind River liefert eine enorme Menge an Details in Bezug auf das Wie und Warum von VxWorks .

Der zugrunde liegende Chipsatz ist fast absurd robust . Die technischen Daten scheinen auf den ersten Blick nicht viel zu sein, aber alle 15 Jahre darf es nur einen "Bluescreen" geben. Denken Sie daran, dies ist unter Beschuss durch Strahlung, die einen Menschen um ein Vielfaches töten würde. Im Weltraum gewinnt die Robustheit über die Geschwindigkeit. Solch eine Robustheit ist natürlich mit Kosten verbunden. In diesem Fall sind es coole 200.000 bis 500.000 US-Dollar.

Ein Erlang-Programmierer spricht über die Funktionen der Computer und die Codebasis von Curiosity.

Weltingenieur
quelle
48
JPL C-Sprachcodierungsstandards, speziell für eingebettete Umgebungen anstelle von "Ground Software", wie sie es nennen. lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
Patrick Hughes
80
@Dynamic: Es ist eine so wichtige Mission, dass die NASA sie nicht riskieren würde. Menschen, die Versammlungen schreiben, machen mehr Fehler, das ist eine gemessene Tatsache.
MSalters
22
Kompilierter C-Code ist Maschinencode, Assemblersprache ist Maschinencode, ich sehe keinen Unterschied. Es gibt keinen großen Leistungsunterschied, wenn Sie es angehen.
Ramhound
23
Die NASA ist mit ihrem Code äußerst vorsichtig. Alles (ALLES) wird zuerst in der Spezifikation durchgeführt und wiederholt überprüft, überprüft und verfeinert. Wenn es in den Life-Code-Stream eingefügt wird, ist es fast ein Ausschneiden und Einfügen der Referenz der Spezifikation. Den Testskripten wird mindestens so viel Aufmerksamkeit geschenkt wie dem Code, und es sind keine "auffälligen" oder cleveren Code-Tricks zulässig, es sei denn, sie werden kritisch benötigt.
Stefan
99
@Amarghosh: Ja, und sehen Sie, wie gut Ihr Handy funktioniert, wenn es durch eine strahlungsintensive Umgebung wie den Weltraum geht :)
Whatsisname
175

Der Code basiert auf dem von MER ( Spirit and Opportunity ), die von ihrem ersten Lander, MPF ( Sojourner ), stammen. Es handelt sich um 3,5 Millionen Zeilen C (ein Großteil davon wird automatisch generiert), die auf einem RA50-Prozessor von BAE und dem Betriebssystem VxWorks ausgeführt werden. Über eine Million Zeilen wurden von Hand codiert.

Der Code ist als 150 separate Module implementiert, die jeweils eine andere Funktion ausführen. Hochgekoppelte Module sind in Komponenten organisiert, die die enthaltenen Module abstrahieren und "entweder eine bestimmte Funktion, Aktivität oder ein bestimmtes Verhalten angeben". Diese Komponenten sind weiter in Ebenen organisiert, und es gibt "nicht mehr als 10 Komponenten der obersten Ebene".

Quelle: Keynote-Vortrag von Benjamin Cichy auf dem Workshop 2010 über Raumfahrzeug-Flugsoftware (FSW-10) , Folien, Audio und Video (beginnt mit der Missionsübersicht, Architekturdiskussion auf Folie 80).


Jemand in Hacker News fragte: "Nicht sicher, was bedeutet, dass der Großteil des C-Codes automatisch generiert wird. Woraus?"

Ich bin nicht 100% sicher, obwohl es wahrscheinlich eine separate Präsentation in diesem oder einem anderen Jahr gibt, die ihren automatischen Generierungsprozess beschreibt. Ich weiß, dass es ein allgemein beliebtes Thema auf der FSW-11-Konferenz war.

Simulink ist eine Möglichkeit. Es ist eine MATLAB-Komponente, die bei Maschinenbauingenieuren und damit bei den meisten Navigations- und Steuerungsingenieuren beliebt ist und die es ihnen ermöglicht, Dinge zu "codieren" und zu simulieren, ohne zu glauben, dass sie codiert sind.

Modellbasiertes Programmieren ist definitiv eine Sache, die der Branche langsam bewusst wird, aber ich weiß nicht, wie gut es bei JPL ankommt oder ob sie sich dafür entschieden hätten, es zu Beginn des Projekts zu verwenden.

Die dritte und wahrscheinlichste Möglichkeit betrifft den Kommunikationscode. Bei allen Raumfahrtsystemen müssen Sie Befehle von der Bodensoftware an die Flugsoftware senden und Telemetrie von der Flugsoftware empfangen und mit der Bodensoftware verarbeiten. Jedes Befehls- / Telemetriepaket ist eine heterogene Datenstruktur und es ist erforderlich, dass beide Seiten von der exakt gleichen Paketdefinition aus arbeiten und das Paket so formatieren, dass es auf der einen Seite korrekt formatiert und auf der anderen Seite analysiert wird. Dies beinhaltet eine ganze Menge Dinge, einschließlich Datentyp, Größe und Endianität (obwohl letztere normalerweise eine globale Sache ist; Sie könnten mehrere Prozessoren mit unterschiedlicher Endianität an Bord haben).

Aber das ist nur die Oberfläche. Sie benötigen auf beiden Seiten viele sich wiederholende Codes, um Dinge wie Protokollierung, Befehls- / Telemetrie-Validierung, Grenzwertprüfung und Fehlerbehandlung zu erledigen. Und dann können Sie anspruchsvollere Dinge tun. Angenommen, Sie haben einen Befehl zum Festlegen eines Hardware-Registerwerts, und dieser Wert wird in einem bestimmten Paket in der Telemetrie zurückgesendet. Sie können eine Bodensoftware generieren, die diesen Telemetriepunkt überwacht, um sicherzustellen, dass sich die Telemetrie nach dem Einstellen dieses Registerwerts ändert, um die Änderung widerzuspiegeln. Natürlich sind einige Telemetriepunkte wichtiger als andere (z. B. der Hauptbusstrom) und werden in mehreren Paketen übertragen, was zusätzliches Kopieren auf der Flugseite und Datendeduplizierung auf der Bodenseite erfordert.

Mit all dem ist es (meiner Meinung nach) viel einfacher, eine Sammlung statischer Textdateien (in XML, CSV oder einem DSL / what-have-you) zu schreiben, sie über ein Perl / Python-Skript auszuführen und presto! Code!

Ich arbeite nicht bei JPL, daher kann ich mit einer Ausnahme keine Details angeben, die nicht im Video enthalten sind. Ich habe gehört, dass der automatisch generierte C-Code von Python-Skripten geschrieben wird und der Umfang der automatischen Codierung in einem Projekt stark davon abhängt, wer der FSW-Lead ist.

Nate Parsons
quelle
8
Dies könnte ein wenig Licht auf Wind River werfen, den Auftragnehmer, der VxWorks herstellt: windriver.com/news/press/pr.html?ID=10901 Ich habe gelesen, dass die NASA ein Team von Leuten hat, deren Aufgabe es ist, so viele Fehler wie möglich zu finden Sie können im Code des Steuerungssystems von einem anderen Team geschrieben werden. Das Bug-Finding-Team wird für gefundene Bugs belohnt und kann wirklich sehr gut arkane Bugs finden. Wenn ein Fehler gefunden wird, wird eine Analyse vom Typ 5Y durchgeführt, um herauszufinden, wie der Softwareentwicklungsprozess verbessert werden könnte, um die Möglichkeit ähnlicher Fehler in der Zukunft auszuschließen. Ein sehr sorgfältiger und teurer Prozess.
Jim Raden
15
@JimRaden Wenn die direkten Ausfallkosten für eine Sonde zwischen mehreren hundert Millionen und mehreren Milliarden US-Dollar liegen und für einen Wiederholungsversuch (wenn überhaupt) mehrere Jahre, ist extreme Paranoia in der Qualitätssicherung gerechtfertigt. Die indirekten Kosten in Form von Dutzenden / Hunderten von Graduierten, die jahrelange Arbeit verlieren und ihre Doktorarbeit wieder aufnehmen müssen, und von verschiedenen neuen Professoren, die sich auf Daten aus dieser Zeit verlassen, um ihre Tenure-Track-Forschung zu betreiben, sind ein weiterer schwerer, aber auch schwerer zu bewältigender Erfolg quantifizieren als die Positionen im NASA-Budget.
Dan Neely
1
Woraus wurde das C automatisch generiert? Bitte sag mir, dass es nicht Simulink war. :-)
William Payne
2
@William Payne In der Keynote heißt es, dass einige davon automatisch generierte Protokollcodierungs- / -decodierungsroutinen (für die Kommunikation mit der Erde) sind, die von Python-Programmen aus XML-Beschreibungen generiert wurden.
Nr.
1
Das automatische Generieren von Code aus ICDs ist ziemlich cool. Ich mag die Idee! Ich hätte jedoch YAML anstelle von XML verwendet. :-)
William Payne