Python-Bibliotheken: Numerische Propagatoren und Zugriffsberechnungen

Ich habe einen Teil meines eigenen Codes in Matlab geschrieben, der sowohl eine ungestörte als auch eine J2-gestörte Umlaufbahnausbreitung durchführt. Ich wechsle in eine neue Umgebung, die die Verwendung von Python erfordert, und kann anscheinend nicht sehen, ob es Bibliotheken gibt, die numerische Ausbreitung und Zugriffsberechnungen mit Kepler-Orbitalelementen durchführen.

Mir sind Bibliotheken wie Astropy bekannt, aber sie scheinen alle darauf beschränkt zu sein, nur TLEs zu verwenden, und keine Möglichkeit, eine benutzerdefinierte Umlaufbahn zu definieren. Super High Fidelity brauche ich nicht.

Schauen Sie sich unsere getaggten Posts für poliastro und pyephem an (obwohl letzteres abgeschrieben ist). Skyfield könnte eines Tages einen Integrator bekommen. Sie können auch einfach versuchen, sich selbst zu rollen
Warum portieren Sie nicht Ihren MATLAB-Code?
Nicht sehr gut darin, schnellen/vektorisierten Python-Code zu programmieren
Ich habe mich tatsächlich mit poliastro befasst und fand die Benutzerfreundlichkeit phänomenal, aber die Ausbreitung war etwas langsamer als ich gehofft hatte. Ich muss in der Lage sein, in 30-Sekunden-Intervallen für eine Dauer von 90 Tagen in weniger als 0,5 Sekunden zu propagieren.
@Smoran Ich habe ein Problem auf poliastro eröffnet, um Ihre Anfrage zu prüfen. github.com/poliastro/poliastro/issues/854 Bitte hinterlassen Sie dort einen Kommentar, damit wir so viele Informationen wie möglich haben

Antworten (4)

Haftungsausschluss: Ich bin der Autor und Hauptentwickler von poliastro. Freut mich aber zu sehen, dass viele andere es weiterempfehlen! :) Ich arbeite auch für Satellogic, die Firma, die Orbit-Predictor auf Open-Source-Basis anbietet.

Ich habe persönliche Erfahrung mit zwei Bibliotheken: poliastro und orbit-predictor (siehe Haftungsausschluss oben).

poliastro bietet einen generischen Rahmen für die anfängliche Umlaufbahnbestimmung und vorläufige Umlaufbahnanalyse, die sich derzeit auf interplanetare Anwendungen konzentriert. In unserer Roadmap erwähnen wir ausdrücklich das Hinzufügen weiterer erdspezifischer Funktionen , was wir dieses Jahr fortsetzen werden (dank der Auswahl von OpenAstronomy im Google Summer of Code ). Dazu gehört unter anderem das Hinzufügen eines semianalytischen Propagators, der J2-Effekte berücksichtigt . Im Moment können Sie dies simulieren, indem Sie die generische Cowell-Methode verwenden und eine J2-Störungskraft hinzufügen , wie im Benutzerhandbuch gezeigt .

orbit-predictor ist eine Art High-Level-Wrapper für python-sgp4 , die ehrwürdige SGP4-Implementierung, die von Brandon Rhodes gepflegt wird (kürzlich mit neuen Versionen). Es stellt PredictorObjekte bereit, die als Propagatoren dienen, wie TLEPredictor, KeplerianPredictor(ungestört) und J2Predictor(unter Berücksichtigung von J2). Letzteres hat Fabrikmethoden, um sonnensynchrone Satelliten und ganze Konstellationen zu erstellen, und bequeme Methoden, um die Übergänge über einen Ort mit einigen geometrischen Einschränkungen, die Finsternisdauer und die nächsten Finsternisse zu berechnen (wir fügen letztere hinzu, während wir sprechen ) . Die Dokumentation ist jedoch nicht so gut, daher würde ich empfehlen, den Quellcode zu lesen.

Zusätzliche historische Einblicke

In poliastro haben wir die API umgeschrieben, indem wir Plyades als Inspiration benutzten (danke Helge!), aber Plyades wird jetzt nicht mehr gepflegt, weil sein Autor dazu übergegangen ist, JuliaAstro zu schreiben. Andere Pakete wie Orbital leiden darunter. Bitte sehen Sie sich die Projektaktivität an, bevor Sie eine Wahl treffen :)

Apropos:

kohärentes Bemühen, Plyades, PoliAstro und andere Orbitalmechanik-Python-Software zusammenzuführen (das Python Astrodynamics Project)

Das Python-Astrodynamik-Projekt war eine Anstrengung, die Helge, Frazer und ich begannen, diese drei Pakete zusammenzuführen, aber schon früh fanden wir einige Meinungsverschiedenheiten, sodass es nie richtig losging. Es wurde durch die OpenAstrodynamics Initiative ersetzt , die besagt, dass es besser ist, Vielfalt und Zusammenarbeit durch offene Standards und Protokolle zu fördern, als zu versuchen, Projekte zu einem zusammenzuführen.

Danke für die Klärung, Juan! :)

Schauen Sie sich PoliAstro von Juan an! Es hat neben seiner Verbreitung auch großartige Visualisierungswerkzeuge. Auch Plyades ist eine Bibliothek zur Bahnausbreitung mit Visualisierung. Ich habe gehört, dass es eine gemeinsame Anstrengung gibt, Plyades, PoliAstro und andere Orbitalmechanik-Python-Software (das Python Astrodynamics Project) zusammenzuführen.

Ich habe auch von Orekit gehört, aber nicht verwendet, das einen Python-Wrapper hat. Es war traditionell ein Orbit-Propagation-Tool, das in Java geschrieben wurde, aber hier gibt es einen Python-Wrapper dafür .

Soweit ich gesucht habe, ist für den Zugriff keine Python-Bibliothek verfügbar. Trotzdem können Sie STK ausprobieren , die kostenlose Lizenz ermöglicht Zugriffsberechnungen, und wenn ich mich nicht irre, können Sie mit Python auch Aufgaben auf STK automatisieren .

+1Übrigens, wie haben Sie von "...kohäsiven Bemühungen zur Zusammenführung ..." gehört? wo können andere auch davon hören?
Es wurde in das Forschungspapier (nahe dem Abschluss) von „Plyades: A Python Library for Space Mission Design“ von Helge Eichhorn∗, Reiner Anderl, geschrieben, in dem es heißt: „Zum jetzigen Zeitpunkt wurde Plyades durch das PythonAstrodynamics-Projekt [PyA15] ersetzt. Das Projekt zielt darauf ab, die drei MIT-lizenzierten, Python-basierten Astrodynamik-Bibliotheken Plyades, Poliastro [JCR15] und Orbital [FML15] zusammenzuführen und ein umfassendes Python-basiertes Astrodynamik-Toolkit für den produktiven Einsatz bereitzustellen.“ Siehe: arxiv.org/pdf/1607.00849.pdf
Super vielen Dank! Ich wusste nichts davon.
Juan, der Autor von PoliAstro, hat unten einige Kommentare zu den Fusionsbemühungen geschrieben :)

Wie Sam Low kann ich auch PoliAstro empfehlen , es ist ein tolles Projekt mit immer mehr Mitwirkenden.

Ich verwende häufig den Orekit Python Wrapper. Die Lernkurve in Orekit kann am Anfang steil sein, da es Hunderte von Java-Klassen gibt. Wenn Sie jedoch wissen, wie man es benutzt, ist es die leistungsfähigste astrodynamische (Open-Source-) Bibliothek, die ich kenne. Außerdem geht es sehr schnell, wenn man den Satelliten ohne Schleife propagiert und die Zwischenzustände später über eine weitere Schleife oder über einen StepHandler abruft, siehe https://gitlab.orekit.org/orekit-labs/python-wrapper/- /blob/master/examples/Example_EarthObservation_-_Attitude_Sequence.ipynb .

Da Sie nur J2-Störungen wollen, sollten Sie die Verwendung semi-analytischer Propagatoren wie DSST und Eckstein-Hechler in Betracht ziehen , sie sind viel schneller als numerische Propagatoren.

Um Sams Punkt über Zugriffe zu ergänzen, gibt es auch die kostenlose GMAT-Software der NASA, mit der Sie die Zugriffe melden können.

Alternativ können Sie das auch selbst berechnen. Ich musste das vorher nicht berechnen, aber ich habe einige verwandte Berechnungen durchgeführt, die leicht in Access Windows Calc umgewandelt werden konnten. Mein vorgeschlagener Weg ist, dass ich zuerst die interessierende Bodenstation definiere, dann den interessierenden Satelliten propagiere und die Flugbahndaten in ECI (zusammen mit Zeitschritten) erhalte. Transformieren Sie außerdem Ihre LLA-Position von GS in ECI (mit den gleichen Zeitschritten) und führen Sie die Blickwinkelberechnung von GS nach Sat durch (Transformation von ECI in Azimuth-Elevation-Range). Das Einzige, was übrig bleibt, wäre, eine Art Filter oder „Satellitensichtbarkeitsmaske“ (mit minimalem Elevationswinkel als endgültigem Parameter) zu definieren, die Sie auf Ihren AzElRange-Datensatz anwenden und die sichtbaren Durchgänge Ihres Satelliten erhalten. Von dort aus können Sie Ihre Zeitstempel und die Dauer des Zugriffsfensters abrufen.