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.
history
embedded-systems
space-technology
InfinitiesLoop
quelle
quelle
Antworten:
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.
quelle
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.
quelle