Frage:
Wie wurde die Navigation bei geringen Rechenressourcen implementiert? (Keine Beispiele alter Leitsoftware)
jimjim
2019-10-14 15:13:12 UTC
view on stackexchange narkive permalink

Update : Ich wollte unbedingt wissen, wie Navigationscomputer von Raumfahrzeugen (keine Leitcomputer) funktionieren, da nur geringe Rechenressourcen zur Verfügung stehen. Ich habe in eine andere Frage gestellt und diese Frage bearbeitet, um die Antworten auf Beispiele für alten Quellcode der Führungssoftware zu beschränken. Für Interessenten an Beispielen alter Führungssoftware siehe Beispiele für alte Führungssoftware, die diese verwenden Rechenressourcen auf der Erde, die stattdessen die Navigation im Weltraum implementieren. Das Original belassen (falsche Frage unten, um die Antworten nicht irrelevant erscheinen zu lassen).

In einem Artikel stieß ich auf etwas wie "X verwendete Hardwareprogramm für Venus-Mission mit 65 KB (nicht") sicher, ob diese Nummer korrekt ist?) Speicher ".

Ich bin ein Softwareentwickler und mit all den heute verfügbaren Ressourcen kann ich nicht verstehen, wo man überhaupt ein solches Unterfangen beginnen könnte.

Ist Gibt es ein Archiv (Museum) alter / antiker Software, das (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 ist, wäre das sogar noch besser.

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

Keine Antwort, aber Links in Antworten auf die folgenden Fragen könnten hilfreich sein: [Wie haben die Apollo-Computer transzendentale Funktionen wie Sinus, Arkustangens, Protokoll bewertet?] (https://space.stackexchange.com/q/30952/12102) sowie [Wie hat der Apollo-Leitcomputer mit Paritätsbitfehlern umgegangen?] (https://space.stackexchange.com/q/35934/12102) und [Wie hat der Apollo-Leitcomputer mit der Rotation des Earth-Moon-Systems umgegangen? die Sonne?] (https://space.stackexchange.com/q/34294/12102)
Der Austausch von Informationen gegen Geräte, die "von Natur aus in der Lage sind, Atomwaffen zu liefern", ist im Allgemeinen verpönt. IIRC, es gibt Verträge dagegen.
@Mazura Welche Beziehung hat die Führung zur Venus oder zum Mars mit Atomwaffen zu tun? Viele Zwei-Bit-Länder haben Zugang zu Raketenleitsoftware. In dieser Frage geht es darum, wie zum Teufel jemand ein Hardwareprogramm mit 65 KB erstellen kann, wobei der Windows-Editor 244 KB groß ist. Was stimmt damit nicht ?
Die Beziehung ist sowohl "Raumsonden" als auch ICBMs müssen zuerst die Erde verlassen. - "Beispiele alter Führungssoftware" für einen Saturn-V ... werden Sie * nicht * finden.
@Mazura, das cool ist, war nur nach einer Erklärung, wie zum Teufel man mit 65KB eine interplanetare Sonde führen kann, wenn der Windows-Notizblock 244KB groß ist. Ich nahm an, dass er seine Position relativ zur Sonne oder zu seinem endgültigen Ziel Mars, Neptun, Venus, was auch immer, erfassen kann . Der Rechenaufwand ist für ein kleines Programm viel zu hoch. Dank der akzeptierten Antwort ist das Rätsel gelöst, es ist ein Leitsystem und keine Navigation. Ich habe es falsch verstanden, dass es sowohl Navigation als auch Anleitung macht. Das Leitsystem ist ein einfaches Steuerungssystem.
Die @Arjang,-Orbitalübertragungssoftware ist möglicherweise nicht für ICBMs geeignet, aber ich bin mir ziemlich sicher, dass es sich bei der Apollo-Software für die Wiedereintrittsführung handelt.
@Mark Danke, wurde Apollo nicht von den Astronauten geführt? Ich dachte nicht, dass das voll automatisiert ist. Mein Ausgangspunkt war, als ich von der Erreichbarkeitstheorie hörte oder woher sie wussten, dass sie zwei Mars-Sonden 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 Führungssoftware". Ich schlage vor, dass Sie die Frage entweder so bearbeiten, dass sie besser widerspiegelt, was Sie wirklich wissen wollten (wie Raumfahrzeug-Leitcomputer funktionieren, wenn kleine Rechenressourcen zur Verfügung stehen), oder dies in einer anderen Frage stellen und diese Frage bearbeiten, um die Antworten auf Beispiele alter Leitsoftware zu beschränken Quellcode. Auf diese Weise finden zukünftige Besucher, was sie vom Fragentitel erwarten.
Sogar etwas Einfaches wie Notepad hat eine ganze Reihe von Betriebssystemkompatibilitätsebenen, die GUI und andere Bibliotheken, auf denen es aufgebaut ist ... Es ist in einer ziemlich hohen Sprache geschrieben, auf die ziemlich komplexe x86-Plattform ausgerichtet und bietet eine überraschende Menge an Funktionen. Wenn Sie sich mit der Montage und Optimierung der Größe befassen, können Sie unglaubliche Dinge tun - z. https://www.theverge.com/2012/5/14/3014698/assembly-4k-demoscene-fractals
Winzige Prozessoren sind noch am Leben und gesund; Sie besitzen wahrscheinlich mehrere, besonders wenn Sie ein Auto haben. Beispielsweise verfügt die [PIC10-Familie von Chips] (https://www.microchip.com/paramchartsearch/chart.aspx?branchID=1009) über satte 896 Byte Codespeicher und 64 Byte (Ja, Byte) RAM! Wenn Sie in großen Mengen kaufen, kosten sie jeweils etwa 30 Cent.
@Ludo: Ja, Sie haben Recht, ich füge eine Bearbeitungsnotiz hinzu. Ich habe Angst, die Frage so zu bearbeiten, wie es von anderen SE-Sites der Fall ist, dass es nicht fair ist, die Antworten auf die ursprüngliche Frage irrelavent zu machen.
@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 es gibt Wettbewerbe dafür. Danke für den Link.
@Arjang, Abgesehen von Apollo 13 bestand das manuelle Fliegen während Apollo aus 1) dem endgültigen Aufsetzen auf dem Mond, 2) dem Andocken des Befehlsmoduls und des Mondmoduls und 3) verschiedenen geringfügigen Einstellungsänderungen. Insbesondere der atmosphärische Wiedereintritt war vollautomatisch, obwohl sie manuelle Verfahren praktizierten, nur für den Fall, dass der Leitcomputer nicht mehr funktionierte.
Auch das Space Shuttle "flog" niemand. 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 zweifelhaft und zeigt vielleicht, wie * ineffizient * viele aktuelle Gewohnheiten sind. Es gibt wirklich keinen Ersatz dafür, das * Problem * und die * Maschine * zu verstehen, die zur Lösung verfügbar ist.
Als Programmierer empfehle ich Ihnen dringend, die Mikrocontroller-Programmierung auszuprobieren. Ein Arduino ist eine großartige Einführung. Das Basismodell verfügt über 1 KB RAM. Sie werden erstaunt sein, wie viel Sie mit 1 KB RAM erreichen können. Die Leute haben alles geschrieben, von Quadcopter-Steuerungen (Drohnensteuerungen) über Funksteuerungsempfänger, Steuerungen für Laufroboter bis hin zu Steuerungs- / Navigationssoftware für Flugzeugautopiloten in 1 KB RAM. Ich habe mit dem PIC16F84 mit 68 Byte (ja, Bytes, nicht Kilobyte) RAM mit der Mikrocontroller-Programmierung begonnen und viele Projekte damit implementiert.
Du bist zu jung, du weißt nicht, was wir früher mit minimalem Gedächtnis gemacht haben. Ohne das gesamte Gepäck moderner Programme und Bibliotheken und wenn Sie in Assembly schreiben, können Sie viel mit sehr wenig Speicher tun. Sehr oft benötigen die Daten viel mehr als den Code. Ich habe mehrere nützliche Programme unter 1k geschrieben.
Maschinencode, der sich nur um den Job kümmert, ist unglaublich leistungsfähig. Selbst alte 8-Bit-Mikroprozessoren wirkten Wunder. Ein Freund schrieb ein Basketball-Scoring-Programm, das zwei numerische Punkteanzeigen lieferte, Punktzahlen und Zeitmessung verfolgte und etwas mehr in 512 ** BYTES **. | Ich konnte einmal auf einer Hex-Tastatur den Maschinencode (nicht Assembler) für ein alphanumerisches (gewissermaßen) sich bewegendes Nachrichtenprogramm eingeben, das auf einem numerischen Multiplex-Display mit 7 Segmenten angezeigt wird, sowie die Meldung "out of my head". Wahrscheinlich ein paar Dutzend Bytes tatsächlichen Codes. [86DD, B70120, CE .... - :-)]
Sechs antworten:
GremlinWranger
2019-10-14 16:54:07 UTC
view on stackexchange narkive permalink

In vielen frühen Sonden gab es bis in die Nähe von Apollo keine echten Computer auf Raumsonden. Alle Berechnungen wurden auf der Erde durchgeführt und die Bordelektronik wurde als Sequenzer bezeichnet. Für Pioneer 10 gab es 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 im Plattform starten hat keine echte Software ausgeführt, sondern eine Sequenz (von hier) von 'Warten, aktivieren, warten, messen und wenn außerhalb der Grenzen halten, sonst weitermachen'.

Zusammen mit dem AGC-Code-Link von Ludo können Sie den Abbruch-Controller als ein kleineres Beispiel für die Vorgehensweise betrachten (feste Schleife bekannter Schritte und Timing).

Selbst heute ist es sehr selten, Code an ein Raumschiff zu senden, das sich nicht auf eine Folge sehr spezifischer Anweisungen beschränkt, die in der richtigen Reihenfolge ausgeführt werden müssen. Curiosity verfügt über eine autonome Navigations- und Fotoaufnahmefunktion, aber im Allgemeinen dient der Verzweigungscode dazu, Fallback / Fail-Safe auszulösen. Hoppla, stoppen Sie das Antennenausrichtungsproblem und rufen Sie nach Hause, um Anweisungen zu erhalten, anstatt KI oder Lerncode Der Code für allgemeine Begriffe wurde so erstellt, dass er auf die gleiche Art und Weise funktioniert, wie Menschen heute für Mikrocontroller programmieren:

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

Verwenden von Approximation oder Ganzzahl Mathematik über Gleitkomma (viele Dinge sind möglich, wenn pi = 3 ist) oder Konstanten auf der Erde vorberechnen und bei Bedarf hochladen (z. B. Schwerkraft oder Motorleistung)

Benutzerdefiniertes Design unterstützender Hardware wie Sternentracker mit Konstanten von der Erde vorinstalliert zu werden und vorformatierte und gebundene Ausgaben für den nächsten Verarbeitungsschritt auszugeben. Tatsächlich werden Grenzen nur einmal überprüft, wenn Daten bezogen werden, und es wird sichergestellt, dass kein nachfolgender Schritt sie überlaufen kann.

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

Vermeiden Sie allgemeine Probleme für bestimmte Fahrzeuge. Bei Raumfahrzeugen ging es um Navigation, Meldung von Sensor- / Instrumentenzuständen und Zeigen. All dies könnte sorgfältig erstellten Code haben, der über einen bestimmten Bereich von Eingaben gut funktioniert ( obwohl siehe).

Vertrauen Sie Ihren Daten (im Sinne der Sicherheit) ( obwohl die Natur kann dich trotzdem bekommen)

_ "Curiosity verfügt über einige autonome Navigations- und Fotoaufnahmefunktionen, aber im Allgemeinen dient der Verzweigungscode dazu, Fallback- / Fail-Safe-Stopps auszulösen, das Antennenausrichtungsproblem zu lösen und nach Anweisungen zu rufen, anstatt KI oder Lerncode." (aus den 90er Jahren) hatte ein Echtzeit-Betriebssystem ([VxWorks] (https://en.wikipedia.org/wiki/VxWorks)) mit einer ausreichenden Komplexität des Task-Zeitplans, die auf ein [Problem der Prioritätsumkehrung] stoßen könnte ( https://www.rapitasystems.com/blog/what-really-happened-to-the-software-on-the-mars-pathfinder-spacecraft). Komplex, komplex.
Du brauchst keinen Computer, auf dem * Space War * laufen kann, wenn du ein echtes Raumschiff fliegst :)
Ludo
2019-10-14 15:53:57 UTC
view on stackexchange narkive permalink

(ursprünglich beantwortet auf "Beispiele alter Führungssoftware")

Das erste, was mir in den Sinn kommt, ist das Github-Repository des Apollo 11 Guidance Computer (AGC) ). Das Repository verfügt sowohl über Command Module- als auch über Lunar Module-Software. Beachten Sie jedoch, dass es von Hardcopies transkribiert wurde, sodass es 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).

David Hammen
2019-10-15 10:55:04 UTC
view on stackexchange narkive permalink

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

Es gibt viele computergestützte Systeme dieser Tag, die mit solchen Einschränkungen leben müssen. Es gibt viele eingebettete Systeme, in denen 2 ^ 16 (65536) Byte Speicher ein Luxus bleiben. Schließlich macht es auf Computern, die 16-Bit-Speicheradressen verwenden (von denen viele noch existieren und von denen viele noch bis heute hergestellt werden), keinen Sinn, über 65636 Byte Speicher zu verfügen. Und so wie es kein Problem mit einem Computer mit 64-Bit-Adressen mit weniger als 18 Exabyte Speicher gibt, gibt es auch kein Problem mit einem Computer mit 16 Bit-Adressen mit weniger als 2 ^ 16 Byte Speicher.

Es gibt viele Möglichkeiten, mit einem solchen Unterfangen zu beginnen. Die Regel Nummer eins ist, die Verwendung eines Betriebssystems zu vermeiden. Viele (die meisten?) Embedded-Systeme sind reine Maschinen. Es gibt kein Betriebssystem und es wird immer nur ein Programm ausgeführt. Ihr Mikrowellenherd verfügt über einen Computer, der als eingebettetes System fungiert, und es gibt kein Betriebssystem. Wenn Ihr Auto in den letzten 25 Jahren hergestellt wurde, sind viele eingebettete Systeme darin ausgeführt. Wenn Ihr Auto der Moderne nahe kommt, verfügt es über mehrere Dutzend Mikrocontroller, die zusammen mehrere Millionen Codezeilen ausführen.

Viele der Mikrocontroller in einem modernen Auto unterliegen nicht den 64K (2 ^ 16, oder 65536) Adresslimit. Früher war dies eine sehr häufige Grenze, die die Größe des Speichers von Natur aus einschränkte. Die Speicherung wurde jedoch nicht eingeschränkt. Das Problem, dass die Festplattengröße die Adressbeschränkungen überschreitet, wurde in den 1950er und 1960er Jahren gelöst. Eine übliche Lösung war die Verwendung von Speicherüberlagerungen. Diese Technik, die ich gerne (meistens) vergessen habe, ist bis heute in der Programmierung eingebetteter Systeme üblich.

Eine andere weit verbreitete Technik war und ist, dass die eingebettete Maschine einer Harvard-Architektur folgt, im Gegensatz zu einer von Neumann-Architektur. In einer Von Neumann-Maschine gibt es keinen Unterschied zwischen Code und Daten. Code und Daten sind in einer Maschine mit Harvard-Architektur sehr unterschiedliche Dinge, möglicherweise mit unterschiedlichen Wortgrößen. Ihr Laptop oder Desktop-Computer ist höchstwahrscheinlich ein von Neumann-Architekturcomputer, zumindest an der Oberfläche. 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 Speicher vergessen haben. Sollte nicht so leichtfertig herumwerfen "Ich bin ein Softwareentwickler".
Als ich Physikstudent war, kam der HP-25 heraus; es könnte 49 Programmschritte halten. Ich habe es so programmiert, dass es als Mondlander fungiert, bei dem der Benutzer die Brenndauer und den Schub eingibt. Alle physikalischen Konstanten, Landermasse, Kraftstoffmasse, Anfangsgeschwindigkeit und Höhe waren korrekt. Ich habe die Lage- / Vektorkontrolle ignoriert, aber der Punkt ist, dass es * 49 Schritte * und korrekt waren. Und es war verdammt schwer zu landen. Neil Armstrong war ein verdammt guter Pilot!
Phil Sweet
2019-11-03 20:44:13 UTC
view on stackexchange narkive permalink

Die Implementierung in der ICBM-Welt bestand darin, dass sechs Kollegen gleichzeitig an einem Tisch saßen und die mathematischen Routinen und die Gesamtarchitektur, die detaillierte Codierung der Programmkomponente und die Computerhardware entwarfen. Fünf Codezeilen pro Tag galten als gute Arbeit. Die meiste Zeit wurde damit verbracht, darüber zu streiten, ob etwas mit Hardware oder Software gemacht werden soll. 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, war kein adressierbarer Speicher vorhanden. Nur eine Scheibe mit ein paar festen Köpfen. 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 durch Remote-Datenänderung ausgetauscht werden konnten. Nur eines war für den Flug, die anderen waren Bodenprogramme.

Hardware erledigte den größten Teil der Arbeit. Dinge wie 3 x 3-Matrix-Mathematik wurden mit ein paar Mikrocode-Anweisungen durchgeführt, die dazu führten, dass eine neue Matrix eine alte ersetzte an derselben Stelle auf der Festplatte.

Die CPU hatte häufig Bereiche, die während dieser längeren Eingriffe nicht verwendet wurden, sodass sie kleine Additionen / Subtraktionen / Multiplikationen / Divisionen in die Mitte schleichen konnten. Diese Anweisungen haben nur kleine Teile der CPU ausgetauscht, und es waren VIELE Anweisungen verfügbar. Sie mussten nur sicherstellen, dass sich alles an der richtigen Stelle auf der Festplatte befand, damit es verfügbar war, wenn etwas Freizeit zur Verfügung stand. Sie hatten fünf verschiedene Anweisungen zum Teilen von zwei Zahlen, die sich nur in der Route und dem Zeitpunkt des Prozesses innerhalb der CPU unterschieden, um eine Kollision mit anderen laufenden Berechnungen zu vermeiden. Viele der Buchhaltungsfunktionen wurden auf diese Weise ausgeführt.

Der wirklich lustige Teil war, dass Sie eine lange Anweisung beginnen konnten, bevor Sie alle Zahlen hatten, um sie zu vervollständigen. Während es am vorderen Ende schleifte, konnten Sie einen Additionsvorgang einleiten und in einem Register belassen, damit die lange Anweisung später gefunden werden kann. 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 irgendetwas anderes. Es gab eine Tabelle, die besagte, dass zum Zeitpunkt t Beschleunigungsmesserzählungen von x, y, z angezeigt werden sollten (akkumulierte Impulse entsprachen der Geschwindigkeit der Beschleunigungsmesserachse). Es verglich die tatsächlichen Zählwerte mit der vorprogrammierten Tabelle und berechnete neue Lenksignale.

Unter dem Strich hatten die Programmierer ein ziemlich begrenztes Ziel und hatten eine vollständige Karte der CPU im Kopf und konnten der gesamten folgen CPU-Operation in ihrem Kopf, als die Programmkomponenten ausgeführt wurden.

Ich war nicht in der Entwurfsphase, wurde aber von einem der Jungs, die am Tisch saßen, auf CPU und Mikrocode geschult.

Interessant. Für welche Rakete war das?
Minuteman. Zum Zeitpunkt der Einführung repräsentierten die Computersysteme in MM mehr als die Hälfte der weltweiten Gleitkomma-Rechenleistung. Das System bestand aus mehreren verschiedenen Teilen. Zusätzlich zum Flugcomputer gab es in jedem Silo einen Bodencomputer und in jeder Befehlskapsel einen anderen sowie diejenigen, die die Telemetriebänder durchschnitten. Das System verwendete dieselbe Hardware, bis SAC aufgelöst wurde, als ich ging.
MusikPolice
2019-11-08 05:49:14 UTC
view on stackexchange narkive permalink

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

Das erste Die Hälfte enthält eine detaillierte Beschreibung der Hardwarearchitektur des Apollo Guidance Computers und der darauf ausgeführten 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.

mosaic
2019-11-14 23:44:22 UTC
view on stackexchange narkive permalink

Überprüfen Sie die FORTH-Sprache. Es wird nicht zwischen Benutzercode und dem Code im (winzigen) Betriebssystemkern unterschieden. Es wurde in der Firmware früher Satelliten verwendet. Eine gute Beschreibung finden Sie hier: https://en.wikipedia.org/wiki/Forth_(programming_language)

Dies ist fast eine "Nur-Link-Antwort"


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...