Aufgrund der langsamen Reaktion des Heliumventils wurde Juno nicht angewiesen, das große Delta-V-Manöver durchzuführen, um von der ~53-Tage-Umlaufbahn auf die ~14-Tage-Umlaufbahn zu fallen, die ursprünglich für den 19. Oktober 2016 geplant war.
Ich hatte ursprünglich vor Monaten die hier erwähnte geplante Umlaufbahn von JPL Horizons extrahiert. Jetzt ist es weg - oder zumindest kann ich es nicht finden. Ich möchte es als Übung noch einmal abrufen, um es zu verstehen.
Nur als Beispiel, für diese Frage möchte ich Horizons verwenden, um mir schnell die ungefähren Orbitalelemente (a und mindestens) für die 14-tägigen Umlaufbahnen um Jupiter. Ich kann herausfinden, wie man sie aus den Zustandsvektoren extrahiert, aber es wäre großartig, dieses praktische System zu verwenden.
Trajectory name Start (TDB) Stop (TDB)
------------------------------ ----------------- -----------------
rec_110805_111026_120302 2011-Aug-05 17:19 2011 OCT 26 00:00
rec_111026_120308_120726 2011 OCT 26 00:00 2012 MAR 08 12:00
rec_120308_120825_121109 2012 MAR 08 12:00 2012 AUG 25 00:00
rec_120825_130515_130708 2012 AUG 25 00:00 2013 MAY 15 00:00
rec_130515_131005_131031 2013 MAY 15 00:00 2013 OCT 05 12:00
rec_131005_131014_131101_reco 2013 OCT 05 12:00 2013 OCT 14 00:01
rec_131014_131114_140222 2013 OCT 14 00:01 2013 NOV 14 06:00
ref_131114_171017_140311_V0.2 2013 NOV 14 06:00 2015 MAR 26 00:00
ref_150326_180221_150326_V0.1 2015 MAR 26 00:00 2016 FEB 26 00:01
ref_160226_180221_160226_V0.1 2016 FEB 26 00:00 2016 APR 13 18:00
pre_160413_161016_160818_pj01_V0.1 2016 APR 13 18:00 2016 OCT 16 23:00
ref_160226_180221_160226_V0.5 2016 OCT 16 23:00 2018 FEB 21 11:40
Jetzt sind die letzten beiden Zeilen:
pre_160413_161016_160818_pj01_V0.1 2016 APR 13 18:00 2016 JUL 29 21:00
nob_160729_170201_161019.V0.1 2016 JUN 29 21:00 2017 FEB 01 00:00
Primäre Frage: Ich möchte vor dem Update auf die ursprüngliche Referenzbahn zugreifen. Gibt es eine Möglichkeit, es mit Horizions wieder zu bekommen? Ich möchte ref_160226_180221_160226_V0.5
mindestens das ganze Jahr 2017 über Zustandsvektoren mit feiner Granularität erhalten, indem ich das Original verwende. Gibt es eine Möglichkeit, dies über das Web oder Telnet oder per E-Mail zu tun?
Sekundäre Frage: Wenn Sie sich die Tabellen ansehen, sind die Trajektorien gepatcht - Datum / Uhrzeit, an dem eine endet, entspricht dem Datum / Uhrzeit, an dem die nächste beginnt, mit Ausnahme manchmal einer Überlappung von 00:01 (einer Minute), die in der Tabelle gerundet werden könnte Anzeige.
In den letzten beiden Zeilen der aktualisierten Tabelle endet die vorletzte Zeile jedoch bei , während die letzte Zeile einen Monat früher bei 2016 JUL 29 21:00
beginnt . Ist das ein Tippfehler oder werden sie in diesem Monat irgendwie zusammengerechnet?2016 JUN 29 21:00
oben: Berechnete Entfernung zwischen Juno-Raumsonde und Jupiter-Baryzentrum von JPL Horizons. Dünne (blaue) Linie: ursprünglicher Referenzorbit, dicke (grüne) Linie: aktualisierter Orbit, gezeigt bis 10. Dez. 2016 – ungefähr dann, wenn die endgültige Zusage für das „Absenken“ des Orbits gemacht werden muss. Hinweis: Die Daten wurden im Abstand von 2 Stunden heruntergeladen, daher sind ungleichmäßige Mindestentfernungen auf grobe Abtastungen des unglaublich schnellen Vorbeiflugs zurückzuführen.
Es sind die Daten der dünnen (blauen) Linie, auf die ich wieder zugreifen möchte.
Kommentare von @oefe wiesen mich auf die Lösung hin! Ich werde es hier posten. Da ich kein Experte bin, werde ich die Erklärungen minimal halten, um nichts Irreführendes zu sagen.
Eine gute Referenz ist die SPK-Pflichtlektüre:
http://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/spk.html
Ich wurde auf den folgenden Ordner verwiesen, der Lösungen in Kernelform als .bsp
Dateien enthält:
http://naif.jpl.nasa.gov/pub/naif/JUNO/kernels/spk/
Diejenige, nach der ich suche, ist eine Referenzbahn, spk_ref_160226_180221_160226.bps
die im Februar 2016 berechnet wurde, bevor Juno den Jupiter erreichte.
Zusätzliche hilfreiche "Hinweise" finden sich im selben Dateinamen mit Erweiterung .bsp.lbl
mit Informationen wie Datums-, Zentrums- und Körper-ID-Codes, die ich im folgenden Python-Skript verwendet habe.
Ich wurde auch auf diese Diskussion im python-jplephem Github hingewiesen, die darauf hinweist, dass "Datentyp 1 (Modified Difference Arrays)" Kernel eine andere Struktur haben und von jplephem nicht gelesen werden konnten:
https://github.com/brandon-rhodes/python-jplephem/issues/14
und diese Diskussion wies auf eine Lösung hin - ein Python-Skript spktype01
, das von Shushi Uetsuki (whiskie14142) geschrieben wurde. Es scheint eine originalgetreue Transkription/Konvertierung in Python aus dem ursprünglichen FORTRAN zu sein und ist gut - und offen - kommentiert.
https://github.com/whiskie14142/spktype01
Da ich Python in einer Umgebung ausführe, in der Skyfield bereits installiert ist, scheinen die jplephem-Module bereits verfügbar zu sein. Also führe ich dies einfach in einem Ordner aus, der nur das folgende Skript und die spktype01.py
Datei von github enthält. Es klappt! Vielen Dank an alle Beteiligten!
Unten zeige ich, dass grobes Sampling unterschiedliche Mindestabstände zwischen Juno und dem Baryzentrum des Jupiter-Systems zeigt. Indem man jedes dieser Minima findet und in Subminutenintervallen neu abtastet, kann man sehen, dass die PeriJoves alle im Wesentlichen den gleichen Abstand haben.
from spktype01 import SPKType01
import numpy as np
import matplotlib.pyplot as plt
Juno_kernel = SPKType01.open('spk_ref_160226_180221_160226.bsp')
JD_coarse = np.arange(2457558.5, 2457754.5+1, 0.2)
# print(Juno_kernel)
center, bodyID = 5, -61 # Jupiter barycenter, Juno Spacecraft
coarse_data = []
for JD in JD_coarse:
spkpos, spkvel = Juno_kernel.compute_type01(center, bodyID, JD)
coarse_data.append(spkpos)
coarse_data = np.array(coarse_data)
rc = np.sqrt((coarse_data**2).sum(axis=1))
inflections = (rc[2:] - rc[1:-1]) * (rc[1:-1] - rc[:-2]) <= 0.0
i_inflects = np.where(inflections)[0] + 1
i_peris = [i for i in i_inflects if rc[i] < 1E+06] # I am lazy
JD_peris = JD_coarse[i_peris]
dminutes = np.linspace(-180, 180, 1001)
ddays = dminutes / (24. * 60.)
periJoves = []
for JD_peri in JD_peris:
JD_fine = JD_peri + ddays
fine_data = []
for JD in JD_fine:
spkpos, spkvel = Juno_kernel.compute_type01(center, bodyID, JD)
fine_data.append(spkpos)
fine_data = np.array(fine_data)
r_fine = np.sqrt((fine_data**2).sum(axis=1))
periJoves.append(r_fine)
if 1 == 1:
plt.figure()
plt.subplot(1,2,1)
plt.plot(JD_coarse - JD_coarse[0], rc)
plt.yscale('log')
plt.ylim(1E+04, 1E+07)
plt.xlabel('days (arb)', fontsize=14)
plt.subplot(1,2,2)
for periJove in periJoves:
plt.plot(dminutes, periJove)
plt.yscale('log')
plt.ylim(1E+04, 1E+07)
plt.xlabel('minutes (arb)', fontsize=14)
plt.show()
öfe
Benutzer7073
äh
äh
.bsp
,.bsp.lbl
,.orb
) mit den Namenspk_ref_160226_180221_160226
, aber ohne_V0.5
, aber ich weiß nicht, wie ich sie in Horizons verwenden soll. Ist es möglich? Meine einzige aktuelle Computersprache ist Python. Skyfield verwendet die.bsp
Daten für die wichtigsten Körper des Sonnensystems, aber ich glaube nicht, dass sie für alle gedacht sind.äh
.bsp
Erweiterungsdatei das SPK enthält, das eine Tabelle mit Chebyshev-Koeffizienten ist, und wahrscheinlich kann ich etwas finden, um es zu lesen, oder ich kann lernen, es mit Python selbst mit genügend Zeit zu lesen, und wenn ich eine gute, klare Erklärung hätte / Dokumentation des Formats. Ich suche das jetzt, da es von einer Horizons-Seite verlinkt wurde: github.com/SETI/pds-toolsöfe
sk = SpiceKernel('spk_ref_160226_180221_160226.bsp')
schlägt fehl mit "ValueError: SPK-Datentyp 1 noch nicht unterstütztes Segment"äh
öfe
äh
äh