JPL Horizons Original-Referenzbahndaten für Juno – wie kann man sie jetzt abrufen, nachdem sie aktualisiert wurden?

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.5mindestens 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:00beginnt . Ist das ein Tippfehler oder werden sie in diesem Monat irgendwie zusammengerechnet?2016 JUN 29 21:00


Geben Sie hier die Bildbeschreibung ein

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.

Beantwortet meine Antwort auf space.stackexchange.com/questions/19181/… dies auch?
@barrycarter es ist interessant und nützlich, aber keine Antwort darauf, danke!
@oefe Ich weiß es nicht. Ich sehe drei Dateitypen ( .bsp, .bsp.lbl, .orb) mit den Namen spk_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 .bspDaten für die wichtigsten Körper des Sonnensystems, aber ich glaube nicht, dass sie für alle gedacht sind.
@oefe Es sieht so aus, als ob die .bspErweiterungsdatei 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
@uhoh du hast recht: sk = SpiceKernel('spk_ref_160226_180221_160226.bsp')schlägt fehl mit "ValueError: SPK-Datentyp 1 noch nicht unterstütztes Segment"
@oefe ok - also gehe ich auf die eine oder andere Weise davon aus, was ich brauche, also werde ich weiter nach einer Möglichkeit suchen, es zu lesen, ohne einen Compiler verwenden zu müssen. Danke für Ihre Hilfe!
@uhoh anscheinend ist es ein bekanntes Problem in jplephem: github.com/brandon-rhodes/python-jplephem/issues/14 Es gibt einen Link zu Python-Code, um dieses Format in den Kommentaren zu lesen
@oefe danke dafür! Ich habe es heruntergeladen und schaue es mir später an. Während ein „Ach“ von Brandon Rhodes oft endgültig ist, sieht es so aus, als hätte es ein Happy End.
@oefe danke nochmal für deine hilfe! Ich habe es zum Laufen gebracht und eine Antwort mit einer Beschreibung und einem Beispiel gepostet. Das ist genau das, was ich brauchte!

Antworten (1)

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 .bspDateien 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.bpsdie im Februar 2016 berechnet wurde, bevor Juno den Jupiter erreichte.

Zusätzliche hilfreiche "Hinweise" finden sich im selben Dateinamen mit Erweiterung .bsp.lblmit 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.pyDatei 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.

Geben Sie hier die Bildbeschreibung ein

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()
Sie können sich auch github.com/AndrewAnnex/SpiceyPy ansehen, eine Python-Schnittstelle zu NAIF SPICE direkt. Über diese Schnittstelle können Sie jeden beliebigen SPICE-Kernel laden und jeden beliebigen SPICE-Aufruf ausführen. Es ist ziemlich gut gemacht und der Betreuer reagiert sehr schnell auf jede Frage.