kutombawewe.net

Welche Software ist für den Mars Curiosity Rover integriert?

Der Mars Curiosity Rover ist erfolgreich gelandet, und eines der Promo-Videos "7 Minuten Terror" prahlt mit 500.000 Codezeilen. 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.

554
InfinitiesLoop

Es läuft 2,5 Millionen Zeilen C auf einem RAD750-Prozessor , hergestellt von [~ # ~] bae [~ # ~] . Das [~ # ~] jpl [~ # ~] enthält etwas mehr Informationen, aber ich vermute, dass viele Details nicht veröffentlicht werden. Es scheint, dass die Testskripte in Python geschrieben wurden.

Das zugrunde liegende Betriebssystem ist Wind RiversVxWorks RTOS . Die fraglichen [~ # ~] rtos [~ # ~] können in C, C++, Ada oder Java programmiert werden. Für das Betriebssystem sind jedoch nur C und C++ Standard, Ada und Java werden von Erweiterungen unterstützt. Wind River liefert eine enorme Menge an Details zum Wie und Warum von VxWorks .

Der zugrunde liegende Chipsatz ist fast absurd robust . Die technischen Daten scheinen zunächst nicht viel zu sein, aber alle 15 Jahre darf es nur einen "Bluescreen" geben. Denken Sie daran, dass dies unter Beschuss durch Strahlung steht, die einen Menschen um ein Vielfaches töten würde. Im Weltraum gewinnt Robustheit über Geschwindigkeit. Natürlich ist eine solche Robustheit 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 der Codebasis von Curiosity.

514
World Engineer

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

Der Code ist als 150 separate Module implementiert, die jeweils eine andere Funktion ausführen. Hoch gekoppelte Module sind in Komponenten organisiert, die die darin 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 at 2010 Workshop über Raumfahrzeug-Flugsoftware (FSW-10) , Folien, Audio und Video (beginnt mit Missionsübersicht, Architekturdiskussion auf Folie 80).


Jemand in den Hacker News fragte: "Nicht sicher, was bedeutet, dass der größte Teil des C-Codes automatisch generiert wird. Von was?"

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

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

Modellbasierte Programmierung ist definitiv eine Sache, die der Branche langsam bewusst wird, aber ich weiß nicht, wie gut sie sich bei JPL durchsetzt oder ob sie hätte es zu Beginn des Projekts verwendet.

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

Aber das ist nur die Oberfläche. Sie benötigen auf beiden Seiten viel sich wiederholenden Code, um Dinge wie Protokollierung, Befehls-/Telemetrievalidierung, Grenzwertprüfung und Fehlerbehandlung zu erledigen. Und dann können Sie anspruchsvollere Dinge tun. Angenommen, Sie haben einen Befehl zum Festlegen eines Hardwareregisterwerts, 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 ändert, wenn dieser Registerwert eingestellt wird, um die Änderung widerzuspiegeln. Und natürlich sind einige Telemetriepunkte wichtiger als andere (z. B. der Hauptbusstrom) und sollen in mehreren Paketen herunterkommen, was zusätzliches Kopieren auf der Flugseite und Daten-Deduplizierung auf der Bodenseite beinhaltet.

Mit all dem ist es (meiner Meinung nach) viel einfacher, eine Sammlung statischer Textdateien (in XML, CSV oder 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 die Menge der Autocodierung in einem Projekt stark variiert, je nachdem, wer der FSW-Lead ist.

175
Nate Parsons