Konvertierung von SGP4 TEME-Rahmen zu J2000

Ich habe mich mit dem SGP4-Modell vertraut gemacht. Das Problem, mit dem ich konfrontiert war, ist, dass die Ergebnisse im TEME-Frame sind.

Wie konvertiere ich den TEME in J2000?

Würde mich auch freuen, wenn du eine Methode in pythonoder vorschlägst julia.

OK ich gebe auf. Was ist der TEME-Rahmen? Googeln hat nicht geholfen.

Antworten (4)

Das Problem wird mit den Paketen Skyfieldund in Python gelöst.Astropy

import skyfield.sgp4lib as sgp4lib
from astropy import coordinates as coord, units as u
from astropy.time import Time 

  # time- J2000 date
  # p,v- vectors, result of SGP4 in TEME frame
  date= datetime.datetime(2000, 1, 1, 12, 0) + datetime.timedelta(days=time - 2451545)

  # Conversion from TEME to ITRS    
  p,v= sgp4lib.TEME_to_ITRF(time,np.asarray(p),np.asarray(v)*86400)
  v=v/86400

  # Conversion from ITRS to J2000    
  now = Time(date)
  itrs = coord.ITRS(p[0]*u.km, p[1]*u.km, p[2]*u.km, v[0]*u.km/u.s, v[1]*u.km/u.s, v[2]*u.km/u.s, obstime=now)
  gcrs = itrs.transform_to(coord.GCRS(obstime=now))
  p,v=gcrs.cartesian.xyz.value,gcrs.velocity.d_xyz.value
kannst du das days=time - 2451545Teil bitte erklären? Ich verstehe nicht wirklich, was hier passiert. Ist timedie Datumszeit, zu der Sie von TEME zu J2000 konvertieren möchten? Soll es in Tagen ausgedrückt werden?
Hallo, der Python-Code, der oben mit Skyfield und Astropy gezeigt wird, funktioniert nicht, weil ich vermute, dass er in einer früheren Version von Python geschrieben wurde. Da ich total Greenhorn auf Python bin, brauche ich etwas Hilfe. Wie muss dieser Code geändert werden, um ihn korrekt mit Python 3.9.2 verwenden zu können. Ich habe den Code hier unten noch einmal gepostet, weil ich bereits versucht habe, ihn zum Laufen zu bringen, und ich denke, dass dort einige Fehler im Originalcode vorhanden waren (Zeit muss Zeit sein und Importdatum und -zeit fehlten). Vielen Dank! PS: Ich kann immer noch keine Kommentare schreiben, deshalb habe ich meine Fragen leider in Antworten gesteckt
...... Sacha Hier ist der Code: pastebin.com/4e87Qj94
@Raksha 2451545 ist das julianische Datum des Mittags UTC des 1. Januar 2000. Das ist nahe an der J2000-Epoche, also Mittag TT des 1. Januar 2000.
@SachaTholl Der gepostete Code ist wertlos. Ich verstehe nicht, warum dies die akzeptierte und etwas hoch bewertete Antwort ist. Die Variable timewird verwendet, aber niemals definiert. Die importssind falsch. Dies hätte in Python 2.7 nicht funktioniert, geschweige denn in Python 3.

Ich habe ein Julia-Paket namens SatelliteToolbox.jl veröffentlicht , das alle Konvertierungen im Zusammenhang mit dem IAU-76/FK5-Modell (ITRF, MOD, TOD, GCRF, PEF usw.) enthält, und jetzt habe ich auch die Unterstützung für TEME hinzugefügt. Sie müssen jedoch den masterZweig verwenden, da er noch nicht veröffentlicht ist.

Um das Paket von zu installieren master, können Sie Folgendes tun:

Pkg.add("SatelliteToolbox")
Pkg.checkout("SatelliteToolbox")

Wenn Sie einen Vektor in TEME dargestellt haben r_teme, können Sie ihn in J2000 konvertieren, indem Sie:

D_J2000_TEME = rTEMEtoGCRF(JD_TT)
r_j2000 = D_J2000_TEME*r_teme

wo JD_TTist der Julianische Tag in der irdischen Zeit. Wenn Sie nur den Julianischen Tag in UTC haben, können Sie JD_TT = JD_UTCtoTT(JD_UTC).

Dieses Paket hat auch eine native Implementierung von SGP4 ( noch ohne SDP4-Bits ). Die berechneten Vektoren vom Orbitpropagator (Position und Geschwindigkeit) werden in TEME dargestellt und können unter Verwendung des obigen Verfahrens in J2000 konvertiert werden.

Beachten Sie, dass die Definition von TEME in diesem Paket mit der von Vallado verwendeten identisch ist, da wir keine "offizielle" TEME-Definition haben. Darüber hinaus wurden all diese Transformationsfunktionen ausführlich anhand der Beispiele im Buchordner von Vallado (wie Sie in sehen können ./test/) getestet.

AKTUALISIEREN

Mit dem neuesten Commit ist es noch einfacher:

using SatelliteToolbox

# Julian day at 2018-Feb-12 15:35:22 UTC
JD_UTC = DatetoJD(2018,2,12,15,35,22)

# DCM that rotates the TEME frame of Date `JD_UTC` into J2000.
D_J2000_TEME = rECItoECI(TEME(), J2000(), JD_UTC)

# Quaternion that rotates the TEME frame of Date `JD_UTC` into J2000.
q_J2000_TEME = rECItoECI(Quaternion, TEME(), J2000(), JD_UTC)
Ich glaube nicht, das wurde dieses Jahr gepostet: fragte vor 2 Monaten
ganz richtig @RonanArraesJardimChagas. Das amerikanische Datumsformat ist verwirrend

Tarlan ist mit seiner Antwort genau richtig, aber ich wollte für diejenigen mitkommen, die Python nicht verwenden oder eine andere Software verwenden, die hier nicht besprochen wird.

Der allgemeine Konsens ist, dass die direkte Konvertierung zwischen Trägheitsrahmen chaotisch und nicht trivial wird. Daher wäre es am besten, TEME in einen festen/pseudofesten Rahmen zu bringen, bevor Sie ihn in den Trägheitsrahmen Ihrer Wahl umwandeln.

Dies funktioniert nicht nur für J2000, sondern für jeden Rahmen. TEME-zu-ECF-Koordinatentransformationen sind ziemlich verbreitet, insbesondere bei Telekommunikationsunternehmen, die wissen möchten, welche Art von Abdeckung ihre Satelliten bieten werden. Von dort aus ist es trivial, zu ECF zu dem Trägheitsrahmen zu wechseln, in dem Sie arbeiten, wenn Sie die Beziehung zwischen Ihrem festen und Ihrem Trägheitskoordinatensystem verstehen.

Ein sehr später Kommentar, aber ist die Transformation von EC(E)F zu einem anderen ECI-Rahmen nicht nicht trivial, wenn Faktoren wie Präzession, Nutation und Polarbewegung berücksichtigt werden?

Wie konvertiere ich den TEME in J2000? [mit Python]

Siehe: " astrophysics/astropysics/coords/coordsys.py ", das aus dem Astrophysics -Paket stammt.

Siehe auch:

Tracking von Satellitenspuren auf der Erdoberfläche “ bzw

Revisiting Spacetrack Report #3: Rev 2 “, Anhang C – TEME-Koordinatensystem.

Quellcode (C++, FORTRAN, Java, MATLAB, Pascal. Gesamt: 1.229.282 Bytes, .ZIP-Datei).

Ich kann dort nichts zum TEME-Rahmen finden, hast du eine Zeilennummer? Oder, wenn es nichts gibt, erklären Sie vielleicht, wie man die verschiedenen Teile hier verwenden würde, um die TEME <-> J2000-Transformation zu erreichen?
@Chris Wie ich weiß, kann Astropy von ITRS zu J2000 konvertieren. Für TEME->ITRS habe ich Skyfield verwendet. Code als Antwort hinzugefügt.