Wie funktioniert das Beispiel des Poliastro-Python-Pakets „Going to Mars with Python“? Was macht es wirklich?

Die Antwort von @astrojuanlu erwähnt die Existenz des Python-Pakets poliastro , und in der dortigen Dokumentation habe ich unter anderem ein Beispiel mit dem Titel Going to Mars with Python unter Verwendung von poliastro gefunden .

Die im Beispiel verwendeten Eingabedaten umfassen einige historische Daten für das Mars Science Laboratory mit dem Curiosity-Rover und einige JPL Spice Kernels.

Anscheinend generiert es daraus irgendwie eine ungefähre Missionsflugbahn.

Frage: Wie macht sie das im Großen und Ganzen? Was sind die grundlegenden Schritte und Methoden, die es verwendet, und welche Art von Informationen werden gewonnen? Gibt es eine interplanetare Flugbahn, die aufgezeichnet werden könnte? Auch Zeiten, Ausmaße und Richtungen von Delta-V-Manövern?

Ich suche nach mehr als nur Sesselspekulationen oder Antworten der Klasse "Ich vermute" . Wenn möglich, geben Sie dem Beispiel bitte einen Testlauf und fügen Sie ein Skript-Snippet und einen Teil der Ausgabe zusammen mit einer Zusammenfassung bei, die diese Fragen beantwortet. Die Idee ist, eine Antwort zu geben, die für zukünftige Leser und Benutzer von poliastro informativ ist. Vielen Dank!

Obwohl dies nicht streng vom Thema abweicht, habe ich das Gefühl, dass die Dokumentation für Polyastro auf die Polyastro-Site gehört. @astrojuanlu ist wahrscheinlich die einzige Person, die in jedem Fall antworten kann.
@RussellBorogove Ich suche nicht nach Rechendetails; Ich habe die Sprache angepasst, um deutlicher zu machen, dass ich nur nach einer Übersicht über die Schritte suche und was sie bewirken. Ich denke, jeder, der es ausprobiert und sich ein wenig mit Python und Orbitalmechanik auskennt, wird dazu in der Lage sein. Ich habe mir zum Beispiel nie den Quellcode für das Skyfield- Python-Paket angesehen, aber wenn ich es verwende, habe ich ein grundlegendes Verständnis dafür, wie es tut, was es tut. Es ist schwer vorherzusagen, dass „niemand die Antwort auf Ihre Frage kennt“ mit Sicherheit.
@RussellBorogove Nach Ihrem Kommentar hatte ich den Wortlaut umgehend angepasst. Glauben Sie immer noch, dass "@astrojuanlu wahrscheinlich die einzige Person ist, die in der Lage ist, zu antworten"?
Nur für den Fall, dass die Moderatoren beschließen, dies wegen Off-Topic zu schließen, habe ich beschlossen, eine Antwort zu hinterlassen :) Hoffe, es ist nützlich!
@uhoh denke daran, meine Antwort zu akzeptieren, wenn du denkst, dass sie gut ist
@astrojuanlu ja, gib mir noch ein paar Tage. Ich habe darauf gewartet, dass eines meiner drei Kopfgelder abläuft, damit ich auch hier ein Belohnungsgeld hinzufügen kann. Einer ist gerade vor ein paar Stunden abgelaufen. Lesen Sie auch alle Ihre Links und geben Sie poliastro eine Probefahrt. Fühlen Sie sich frei, mich erneut anzupingen, wenn ich dieses Wochenende nicht fertig bin, und nochmals vielen Dank für die ausgezeichnete Antwort!

Antworten (1)

Vollständiger Haftungsausschluss: Ich bin der Autor und Hauptentwickler von poliastro.

Der wichtigste Schritt, bevor Sie irgendetwas tun, besteht darin, irgendwie die Positionen und Geschwindigkeiten der Planeten des Sonnensystems abzurufen. Astropy , eine der Kernabhängigkeiten von poliastro, enthält Näherungsmodelle mittlerer Genauigkeit, die in Simon et al. "Numerical expressions for precession formulas and mean elements for the Moon and the planets" (1994) beschrieben sind. Für Hochpräzisionsanwendungen ist es jedoch besser, die Ephemeriden direkt von JPL herunterzuladen , basierend auf Beobachtungsdaten aus vielen verschiedenen Quellen und die eine große Zeitspanne abdecken[1]. Ein weiteres Python-Paket, jplephem , ist in der Lage, die in diesen Dateien enthaltenen Tschebyscheff-Polynome zu lesen und die kartesischen Elemente der verfügbaren Körper zu berechnen.

Nach Festlegung genauer Start- und Ankunftsdaten, in diesem Fall für die Mars Science Laboratory-Mission, und Vernachlässigung der Trajectory Correction Manoeuvres (TCMs) und anderer Abweichungen von Kepler-Trajektorien, kann poliastro das Two Body Boundary Problem, auch bekannt als Lamberts Problem , lösen. die die Bahn zwischen zwei gegebenen Punkten angibt. Es gibt mehrere Algorithmen, um das Lambert-Problem zu lösen, und poliastro verwendet den Izzo-Algorithmus , der bei Izzo "Revisiting Lambert's Problem" (2014) beschrieben ist und eine iterative Householder-Methode (das Äquivalent 3. Ordnung der Newton-Methode) verwendet, um eine schnellere Konvergenz mit weniger Funktion zu erreichen Auswertungen.

Danach bleibt nur noch das Plotten [2]. Für keplersche Trajektorien weiß poliastro bereits, wie man die Punkte am besten abtastet, um die Effizienz zu maximieren ( und hässliche Effekte im Apozentrum hochexzentrischer Bahnen zu vermeiden ), indem es eine intelligente Methode verwendet, die in Berry & Healy „The generalized Sundman transformation for propagation of high- Exzentrizität elliptischer Bahnen“ (2002). Für den Fall bereits berechneter Trajektorien oder nicht keplerischer Bahnen erlaubt poliastro dem Benutzer, einfach den Satz von Vektoren zu verwenden. Um einfachere 2D-Diagramme zu erstellen, projiziert poliastro alle Umlaufbahnen auf den perifokalen Rahmen der ersten Umlaufbahn. Andererseits erfordern 3D-Plots keinerlei Vorverarbeitung.

MSL-Missionsplan

[1] Eine alternative Quelle mit einem kompatiblen Dateiformat ist das "Institut de Mécanique Céleste et de Calcul des Éphémérides" https://www.imcce.fr/recherche/equipes/asd/inpop/download17a#4 , aber das sind sie nicht noch von Astropy unterstützt .

[2] Der einzige Grund, warum die Plots nicht erschienen, war ein ärgerlicher Fehler in der zugrunde liegenden 3D-JavaScript-Bibliothek und der Dokumentations-Website.

@uhoh möchten Sie diese als akzeptierte Antwort markieren? :)