Wie wurde angesichts kleiner Rechenressourcen die Navigation implementiert? (Keine Beispiele alter Führungssoftware)

Update 2 : Das YouTube-Video How did NASA Steer the Saturn V beantwortet diese Frage und noch einige mehr, ein Muss.

Update : Ich wollte wirklich wissen, wie Computer zur Navigation (nicht zur Führung) von Raumfahrzeugen angesichts kleiner Rechenressourcen funktionieren. Ich habe in einer anderen Frage gestellt und diese Frage bearbeitet, um die Antworten auf Beispiele für den Quellcode alter Leitsoftware zu beschränken. Für diejenigen, die an Beispielen alter Leitsoftware interessiert sind, lesen Sie bitte Beispiele alter Leitsoftware, die Rechenressourcen auf der Erde verwenden und stattdessen die Navigation im Weltraum implementieren. Belassen des Originals (falsche Frage unten, um die Antworten nicht irrelevant erscheinen zu lassen).

In einem Artikel bin ich auf so etwas wie "X benutztes Hardwareprogramm für Venus-Mission mit 65 KB (nicht sicher, ob diese Zahl stimmt?) Speicher" gestoßen.

Ich bin Softwareentwickler und mit all den heute verfügbaren Ressourcen kann ich mir nicht vorstellen, wo man mit einem solchen Unterfangen überhaupt anfangen könnte.

Gibt es ein Archiv (Museum) für alte/antike Software, die (hart oder weich) für interplanetare Missionen geschrieben wurde? Wenn etwas auf einer höheren Ebene als Assembly oder das Äquivalent in den heutigen Programmiersprachen Java, Pascal, C # usw. ohne Berücksichtigung der Speicher- und Festplattennutzung wäre, wäre das noch besser.

Nach dem Wenigen, das ich verstanden habe, scheint es eine Aufgabe zu sein, die dem Bau von Pyramiden mit primitiven Werkzeugen entspricht. Gibt es irgendwelche Simulationen oder Tools, um einem einfachen Programmierer von heute einen Einblick und Wertschätzung dessen zu verschaffen, was diese Giganten getan haben?

Der Austausch von Informationen über Geräte, die "von Natur aus in der Lage sind, Atomwaffen zu transportieren", ist allgemein verpönt. IIRC, es gibt Verträge dagegen.
@Mazura, was hat die Beziehung zwischen der Führung zur Venus oder zum Mars mit Atomwaffen zu tun? Viele Zwei-Bit-Länder haben Zugang zu Raketenführungssoftware. Bei dieser Frage geht es darum, wie zum Teufel jemand ein Hardwareprogramm mit 65 KB erstellen kann, wenn Windows Notepad 244 KB groß ist. Was stimmt damit nicht ?
Die Beziehung besteht sowohl aus „Raumsonden“ als auch aus Interkontinentalraketen, die zuerst die Erde verlassen müssen. - "Samples alter Lenksoftware" für einen Saturn-V ... werden Sie nicht finden.
@Mazura das ist cool, erst nach einer Erklärung, wie zum Teufel man mit 65 KB eine interplanetare Sonde führen kann, wenn der Windows-Notizblock 244 KB groß ist, nahm ich an, dass er seine Position relativ zur Sonne oder zu seinem endgültigen Ziel Mars, Neptun, Venus, was, erkennen kann immer. Die Anzahl der erforderlichen Berechnungen ist viel zu viel für ein kleines Programm. Dank der akzeptierten Antwort ist das Rätsel gelöst, es ist ein Leitsystem und keine Navigation. Ich habe es verwechselt, dass es sowohl die Navigation als auch die Führung übernimmt. Leitsystem ist einfache Steuerungssysteme.
@Arjang, Orbital-Transfer-Software ist möglicherweise nicht für ICBMs geeignet, aber ich bin mir ziemlich sicher, dass die Apollo-Wiedereintrittsleitsoftware dies ist.
@ Mark danke, wurde Apollo nicht von den Astronauten geführt? Ich dachte nicht, dass das vollautomatisch ist. Mein Ausgangspunkt war, als ich von der Erreichbarkeitstheorie hörte, oder woher sie wussten, dass sie zwei Marssonden auf den gegenüberliegenden Seiten des Mars landen können.
@Arjang Um ehrlich zu sein, beantwortet die derzeit akzeptierte Antwort nicht die Frage "Beispiele alter Leitsoftware". Ich schlage vor, dass Sie entweder die Frage so bearbeiten, dass sie besser widerspiegelt, was Sie wirklich wissen wollten (wie Computer zur Führung von Raumfahrzeugen bei geringen Rechenressourcen funktionieren), oder dies in einer anderen Frage stellen und diese Frage bearbeiten, um die Antworten auf Beispiele alter Führungssoftware zu beschränken Quellcode. Auf diese Weise finden zukünftige Besucher, was sie von der Frageüberschrift erwarten.
Sogar etwas Einfaches wie Notepad hat eine ganze Reihe von OS-Kompatibilitätsschichten, die GUI und andere Bibliotheken, auf denen es aufbaut ... Es ist in einer ziemlich hohen Sprache geschrieben, auf die ziemlich komplexe x86-Plattform ausgerichtet und hat eine überraschende Menge an Funktionalität. Wenn Sie sich an die Montage und Größenoptimierung machen, können Sie unglaubliche Dinge tun - zB theverge.com/2012/5/14/3014698/assembly-4k-demoscene-fractals
Winzige Prozessoren sind immer noch gesund und munter; Sie besitzen wahrscheinlich mehrere, besonders wenn Sie ein Auto haben. Zum Beispiel hat die PIC10-Chipfamilie bis zu satte 896 Bytes Codespeicher und 64 Bytes (ja, Bytes) RAM! Wenn Sie in großen Mengen kaufen, kosten sie etwa 30 Cent pro Stück.
@Ludo: Ja, du hast Recht, ich füge eine Bearbeitungsnotiz hinzu. Ich habe Angst, die Frage zu bearbeiten, da ich von anderen SE-Sites gelernt habe, dass es nicht fair ist, die Antworten auf die ursprüngliche Frage so zu gestalten, dass sie irrelevant aussehen.
@Baldrickk: Heilige Hölle, ja, das ist eher so, ich hatte keine Ahnung, warum man versuchen würde, Platz auf einem PC zu sparen, geschweige denn, dass es Wettbewerbe dafür gibt. Vielen Dank für den Link.
@Arjang, abgesehen von Apollo 13 bestand das manuelle Fliegen während Apollo aus 1) der endgültigen Landung auf dem Mond, 2) dem Andocken des Kommandomoduls und der Mondlandefähre und 3) verschiedenen geringfügigen Lageänderungen. Insbesondere der atmosphärische Wiedereintritt war vollständig automatisiert, obwohl sie manuelle Verfahren praktizierten, nur für den Fall, dass der Leitcomputer nicht mehr funktionierte.
Es ist auch niemand mit dem Space Shuttle „geflogen“. Und doch jammern die Leute über andere, die MechJeb (Autopilot) im Kerbal Space Program verwenden.
Den Titel „Softwareentwickler“ zu beanspruchen, ohne zu verstehen, wie effizienter Code kleine Probleme lösen kann, ist mehr als ein wenig zweifelhaft und zeigt vielleicht, wie ineffizient viele aktuelle Gewohnheiten sind. Es gibt wirklich keinen Ersatz dafür, das Problem zu verstehen und die Maschine zu verstehen , die zur Verfügung steht, um es zu lösen.
Als Programmierer empfehle ich Ihnen dringend, die Mikrocontroller-Programmierung auszuprobieren. Ein Arduino ist eine großartige Einführung. Das Basismodell hat 1k RAM. Sie werden erstaunt sein, wie viel Sie mit 1k RAM erreichen können. Die Leute haben alles geschrieben, von Quadcopter (Drohnen)-Controllern, Funksteuerungsempfängern, Laufroboter-Controllern bis hin zu Flugzeug-Autopilot-Führungs-/Navigationssoftware, alles in 1k RAM. Ich begann mit der Mikrocontroller-Programmierung mit dem PIC16F84, der 68 Bytes (ja, Bytes, nicht Kilobytes) RAM hat, und ich habe viele Projekte damit implementiert.
Du bist zu jung, du verstehst nicht, was wir früher mit minimalem Gedächtnis gemacht haben. Ohne den ganzen Ballast moderner Programme und Bibliotheken und beim Schreiben in Assembler können Sie mit sehr wenig Speicher viel tun, sehr oft nehmen die Daten viel mehr als der Code. Ich habe mehrere nützliche Programme unter 1k geschrieben.
Maschinencode, der sich um absolut nichts als die anstehende Aufgabe kümmert, ist unglaublich mächtig. Selbst alte 8-Bit-Mikroprozessoren wirkten Wunder. Ein Freund schrieb in 512 BYTES ein Basketball-Scoring-Programm, das zwei numerische Score-Displays ansteuerte, Scores und Zeitmessung verfolgte und noch etwas mehr . | Ich konnte einmal auf einer Hex-Tastatur den Maschinencode (nicht Assembler) für ein alphanumerisches (eine Art) bewegtes Nachrichtenprogramm eingeben, das auf einem numerischen Multiplex-Display mit 7 Segmenten angezeigt wurde, plus die Nachricht "aus meinem Kopf". Wahrscheinlich ein paar Dutzend Bytes tatsächlicher Code. [86DD, B70120, CE.... - :-) ]
@Mazura jede Shuttle-Landung wurde von Hand geflogen.
@Mazura: Bedeutet das, dass die Größe des Führungsprogramms für den Shuttle 0 Bytes betrug (nicht erforderlich). Ich denke, die gesamte Navigation wurde vom Boden aus durchgeführt.
Welche Betriebssysteme wurden im Space Shuttle verwendet? - Das Ganze lief auf 400.000 Codezeilen. IIRC der PASS, der auf den 4 CPUs lief, hatte ~40.000 Zeilen. Das BFS bestand aus 1000 Codezeilen, nie verwendet, das hätte es tun können. Beide waren wahrscheinlich die besten Programme, die je geschrieben wurden. ( "Es ist auch nicht ganz richtig, dass es "nie benutzt" wurde - seine SM-Funktionen wurden beim Aufstieg und Eintritt verwendet." - Organic Marble)

Antworten (6)

Bei vielen der frühen Sonden, bis in die Nähe von Apollo, gab es keine echten Computer auf Raumsonden. Alle Berechnungen wurden auf der Erde durchgeführt und die Bordelektronik war als Sequenzer bekannt, für Pioneer 10 hatte sie 222 mögliche Befehle, von denen 5 vorbereitet werden konnten. Frühe Venus-Sonden sendeten Daten, indem sie verschiedene Sensoren mechanisch schalteten, um einen CW-Sender der Reihe nach zu modulieren und alles auf der Erde auseinander zu sortieren.

Dies galt auch für einen Großteil des Apollo-Startprozesses, bei dem die Hardware in der Startplattform keine echte Software ausführte, sondern eine Sequenz (ab hier ) von „warte, aktiviere dies, warte, messe das und wenn außerhalb der Grenzen, halte sonst weiter“. .

Zusammen mit dem AGC-Code-Link von Ludo können Sie sich den Abort-Controller als ein kleineres Beispiel dafür ansehen, wie die Dinge gemacht wurden (feste Schleife bekannter Schritte und Timings).

Selbst heute ist es sehr selten, Code an ein Raumschiff zu senden, der nicht auf eine Folge sehr spezifischer Anweisungen hinausläuft, die der Reihe nach ausgeführt werden müssen. Curiosity verfügt über einige autonome Navigations- und Fotoaufnahmefähigkeiten, aber im Allgemeinen ist Verzweigungscode dazu da, Fallback/Fail-Safe auszulösen, „Ups Stop, Problem mit der Antennenausrichtung zu lösen und zu Hause anzurufen, um Anweisungen zu erhalten“, anstatt KI oder Lerncode.

Im Allgemeinen wurde der Code so erstellt, dass er genauso funktioniert, wie Menschen heute für Mikrocontroller programmieren:

Keine Art von Benutzeroberfläche im Code (Apollo DSKY war größtenteils Hardware)

Verwenden von Annäherung oder ganzzahliger Mathematik über Gleitkomma (viele Dinge sind möglich, wo pi = 3 ist) oder Vorberechnen von Konstanten auf der Erde und Hochladen bei Bedarf (z. B. Schwerkraft oder Motorleistung)

Kundenspezifisches Design von unterstützender Hardware wie Sterntrackern, die mit Konstanten von der Erde vorgeladen werden und vorformatiert und gebunden für den nächsten Verarbeitungsschritt geprüft werden. Bounds prüfen tatsächlich nur einmal, woher die Daten stammen, und stellen sicher, dass kein nachfolgender Schritt sie überlaufen kann.

Entwerfen Sie Algorithmen, die eher in Registern als in Speicherorten arbeiten (was eine schreckliche Quelle darstellt, da Sie keine Variablen haben), aber bedeutet, dass Sie vermeiden können, dass viele Werte in den und aus dem Speicher verschoben werden.

Vermeiden Sie allgemeine Probleme für das Spezifische, für Raumfahrzeuge ging es nur um Navigation, Meldung von Sensor-/Instrumentenzuständen und Ausrichtung. All dies könnte sorgfältig ausgearbeiteten Code haben, der über einen bestimmten Bereich von Eingaben gut funktioniert ( obwohl siehe ).

Vertrauen Sie Ihren Daten (im Sinne der Sicherheit) ( obwohl die Natur Sie immer noch erwischen kann )

„Curiosity verfügt über einige autonome Navigations- und Fotoaufnahmefähigkeiten, aber im Allgemeinen ist Verzweigungscode dazu da, Fallback/Fail-Safe auszulösen, oops, Stopp, Problem mit der Antennenausrichtung zu lösen und zu Hause anzurufen, um Anweisungen zu erhalten“, anstatt KI oder Lerncode.“ Nun, Mars Pathfinder (aus den 90er Jahren) hatte ein Echtzeitbetriebssystem ( VxWorks ) mit ausreichender Komplexität des Aufgabenplans, dass es auf ein Prioritätsinversionsproblem stoßen konnte . Komplex, komplex.
Sie brauchen keinen Computer, der Space War ausführen kann , wenn Sie ein echtes Raumschiff fliegen :)

(ursprünglich beantwortet zu "Beispiele alter Leitsoftware")

Das erste, was mir in den Sinn kommt, ist das Github-Repository des Apollo 11 Guidance Computer (AGC) . Das Repository enthält sowohl Command Module- als auch Lunar Module-Software, aber beachten Sie, dass es von Hardcopies transkribiert wurde und daher möglicherweise (noch) nicht vollständig ist. Einen Simulator der AGC finden Sie auf der Virtual AGC-Website (dort gibt es auch eine Menge anderer Referenzen).

Ich bin Softwareentwickler und mit all den heute verfügbaren Ressourcen kann ich mir nicht vorstellen, wo man mit einem solchen Unterfangen überhaupt anfangen könnte.

Bis heute gibt es viele computerbasierte Systeme, die mit solchen Einschränkungen leben müssen. Es gibt viele eingebettete Systeme, bei denen 2^16 (65536) Bytes Speicher ein Luxus bleiben. Schließlich macht es auf Maschinen, die 16-Bit-Speicheradressen verwenden (von denen es noch viele gibt und die bis heute noch hergestellt werden), keinen Sinn, mehr als 65636 Byte Speicher zu haben. Und so wie es kein Problem mit einem Computer mit 64-Bit-Adressen gibt, der weniger als 18+ Exabyte Speicher hat, gibt es kein Problem mit einem Computer, der 16-Bit-Adressen mit weniger als 2^16 Byte Speicher hat.

Es gibt viele Möglichkeiten, mit einem solchen Unterfangen zu beginnen. Die wichtigste Regel lautet, auf die Verwendung eines Betriebssystems zu verzichten. Viele (die meisten?) eingebetteten Systeme sind nackte Maschinen . Es gibt kein Betriebssystem und es läuft immer nur ein Programm. Ihr Mikrowellenherd verfügt über einen Computer, der als eingebettetes System arbeitet und über kein Betriebssystem verfügt. Wenn Ihr Auto in den letzten 25+ Jahren hergestellt wurde, laufen viele eingebettete Systeme darin. Wenn Ihr Auto auch nur annähernd modern ist, verfügt es über mehrere Dutzend Mikrocontroller, die zusammen mehrere Millionen Codezeilen ausführen.

Viele der Mikrocontroller in einem modernen Auto unterliegen nicht der Adressbegrenzung von 64 KB (2^16 oder 65536). Früher war dies eine sehr verbreitete Grenze, die die Größe des Speichers von Natur aus begrenzte. Aber es schränkte die Speicherung nicht ein. Das Problem, dass die Festplattengröße die Adressbeschränkungen überschreitet, wurde in den 1950er und 1960er Jahren gelöst. Eine gängige Lösung war die Verwendung von Speicherüberlagerungen . Diese Technik, die ich froherweise (meistens) vergessen habe, ist bis heute in der Programmierung eingebetteter Systeme üblich.

Eine weitere weit verbreitete Technik war und ist es , die eingebettete Maschine einer Harvard - Architektur folgen zu lassen , im Gegensatz zu einer von - Neumann - Architektur . Es gibt keine Unterscheidung zwischen Code und Daten in einer Von-Neumann-Maschine. Code und Daten sind in einer Maschine mit Harvard-Architektur sehr unterschiedliche Dinge, möglicherweise mit unterschiedlichen Wortgrößen. Ihr Laptop oder Desktop-Rechner ist höchstwahrscheinlich, zumindest oberflächlich betrachtet, ein von-Neumann-Architektur-Rechner. Tief unter der Haube sieht es eher aus wie eine Harvard-Maschine mit separaten Caches für Code und Daten.

Ja, ich hätte sagen sollen, dass Anwendungsentwickler auf PCs mit (fast) unbegrenzten Mengen von allem die eingebetteten Systeme und all ihre Herausforderungen für einen extrem begrenzten Speicher und Speicherplatz vergessen sollten. Sollte nicht so leichtfertig mit „Ich bin Softwareentwickler“ herumwerfen.
Als ich Physikstudent war, kam der HP-25 heraus; es konnte 49 Programmschritte enthalten. Ich habe es so programmiert, dass es als Mondlandegerät fungiert, bei dem der Benutzer Brenndauer und Schub eingibt. Alle physikalischen Konstanten, Landermasse, Treibstoffmasse, Anfangsgeschwindigkeit und Höhe waren korrekt. Ich habe die Einstellung / Vektorkontrolle ignoriert, aber der Punkt ist, dass es 49 Schritte waren und korrekt. Und es war verdammt schwer zu landen. Neil Armstrong war ein verdammt guter Pilot!

Die Art und Weise, wie es in der ICBM-Welt implementiert wurde, bestand darin, dass sechs Kollegen um einen Tisch herum saßen und gleichzeitig die mathematischen Routinen und die Gesamtarchitektur, die detaillierte Codierung der Programmkomponenten und die Computerhardware entwarfen. Fünf Zeilen Code pro Tag galten als gute Tagesarbeit. Die meiste Zeit wurde damit verbracht, darüber zu streiten, ob man etwas mit Hardware oder Software machen sollte. Integrierte Schaltungen waren so weit fortgeschritten, dass Vier-Bit-Register verfügbar waren. Sie wurden für die beiden Register der CPU verwendet.

In dem System, an dem ich gearbeitet habe, gab es keinen adressierbaren Speicher. Nur eine Scheibe mit einem Haufen fester Köpfe. Der Code wurde auf die Festplatte getaktet. Es gab einen oberen und einen unteren Bus und zwei Register mit einer Wortlänge, aber es war ein großes Wort.

Am Ende gab es vier Programme, die per Remote Data Change ausgetauscht werden konnten. Nur eines war für den Flug, die anderen waren Bodenprogramme.

Die Hardware erledigte die meiste Arbeit, Dinge wie 3 x 3-Matrix-Mathematik wurden mit ein paar Mikrocode-Anweisungen erledigt, die dazu führten, dass eine neue Matrix eine alte an derselben Stelle auf der Festplatte ersetzte.

Die CPU hatte oft Bereiche, die während dieser längeren Anweisungen nicht verwendet wurden, sodass sie kleine Additionen/Subtraktionen/Multiplikationen/Divisionen in der Mitte einschleichen konnten. Diese Anweisungen schalteten nur kleine Teile der CPU um, und es waren VIELE Anweisungen verfügbar. Man musste nur dafür sorgen, dass alles an der richtigen Stelle auf der Diskette war, damit es verfügbar war, wenn man ein bisschen Freizeit hatte. Sie hatten fünf verschiedene Anweisungen zum Dividieren zweier Zahlen, die sich nur in der Route und dem Timing des Prozesses innerhalb der CPU unterschieden, um Kollisionen mit anderen laufenden Berechnungen zu vermeiden. Viele der Buchhaltungsfunktionen wurden auf diese Weise erledigt.

Der wirklich lustige Teil war, dass Sie eine lange Anweisung beginnen konnten, bevor Sie alle Zahlen hatten, um sie abzuschließen. Während es am vorderen Ende schleifte, konnten Sie eine Additionsoperation initiieren und sie in einem Register belassen, damit die lange Anweisung sie später finden konnte. Möglicherweise können Sie es sogar auf die Festplatte schreiben. Es war eine wahre Freude, diese zu verfolgen und zu debuggen.

Der Navigationscomputer musste drei Ausgangssignale ansteuern, um die Rakete zu steuern. Es wusste nichts über Inszenierung oder sonst etwas. Es hatte eine Tabelle, die besagte, dass es Beschleunigungsmesserzählungen von x, y, z zum Zeitpunkt t sehen sollte (akkumulierte Impulse gleich Geschwindigkeit der Beschleunigungsmesserachse). Es verglich die tatsächlichen Zählungen mit der vorprogrammierten Tabelle und berechnete neue Steuersignale.

Die Quintessenz ist, dass die Programmierer ein ziemlich begrenztes Ziel hatten und eine vollständige Karte der CPU in ihrem Kopf hatten und die gesamte CPU-Operation in ihrem Kopf verfolgen konnten, während die Programmkomponenten ausgeführt wurden.

Ich war nicht in der Designphase, wurde aber von einem der Jungs, die am Tisch saßen, in die CPU und den Microcode eingewiesen.

Interessant. Für welche Rakete war das?
Minutenmann. Zum Zeitpunkt der Einführung stellten die Computersysteme in MM mehr als die Hälfte der weltweiten Gleitkomma-Rechenleistung dar. Es gab tatsächlich mehrere verschiedene Teile des Systems. Zusätzlich zum Flugcomputer gab es in jedem Silo einen Bodencomputer und in jeder Kommandokapsel einen anderen, plus diejenigen, die die Telemetriebänder schnitten. Das System verwendete die gleiche Hardware, bis SAC aufgelöst wurde, als ich ging.

Schauen Sie sich die FORTH-Sprache an. Es macht keinen Unterschied zwischen Benutzercode und dem Code im (winzigen) OS-Kernel. Es wurde in der Firmware früher Satelliten verwendet. Eine gute Beschreibung ist hier: https://en.wikipedia.org/wiki/Forth_(programming_language)

Dies ist fast eine "Nur-Link-Antwort"

Vielleicht möchten Sie dieses Buch lesen: https://www.goodreads.com/book/show/7754526-the-apollo-guidance-computer

Die erste Hälfte ist eine detaillierte Beschreibung der Hardwarearchitektur des Apollo Guidance Computers und der darauf ablaufenden Software. Es gibt einige faszinierende Diskussionen über die Einschränkungen der Hardware und darüber, was die Designer getan haben, um diese Einschränkungen zu überwinden.