Marco SGP4 TEME a conversión J2000

Me he familiarizado con el modelo SGP4. El problema al que me enfrenté es que los resultados están en el marco TEME.

¿Cómo convertir el TEME a J2000?

También me alegraría si sugiere un método en pythono julia.

Esta bien me rindo. ¿Qué es el marco TEME? Googlear no ayudó.

Respuestas (4)

El problema se resuelve usando los paquetes Skyfieldy Astropyen python.

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
¿Puedes explicar la days=time - 2451545parte? Realmente no entiendo lo que está pasando aquí. ¿Es timela fecha y hora en la que desea convertir de TEME a J2000? ¿Se supone que debe expresarse en días?
Hola, el código de python que se muestra arriba usando skyfield y astropy no funciona porque supongo que se ha escrito en una versión anterior de python. Como soy totalmente novato en Python, necesito ayuda. Como se debe modificar este código para poder usarlo correctamente con python 3.9.2. Publiqué el código nuevamente aquí debajo, porque ya intenté ejecutarlo, y creo que hay algunos errores presentes en el código original (la hora debe ser Hora y falta la fecha de importación) ¡Muchas gracias! PD: todavía no puedo escribir comentarios, así que puse mis preguntas en respuestas, desafortunadamente
...... Sacha Aquí está el código: pastebin.com/4e87Qj94
@Raksha 2451545 es la fecha juliana del mediodía UTC del 1 de enero de 2000. Eso está cerca de la época J2000, que es el mediodía TT del 1 de enero de 2000.
@SachaTholl El código publicado no tiene valor. No entiendo por qué esta es la respuesta aceptada y algo votada. La variable timese usa pero nunca se define. Están importsequivocados. Esto no habría funcionado en Python 2.7, y mucho menos en Python 3.

He publicado un paquete de julia llamado SatelliteToolbox.jl que tiene todas las conversiones relacionadas con el modelo IAU-76/FK5 (ITRF, MOD, TOD, GCRF, PEF, etc.) y ahora también agregué el soporte para TEME. Sin embargo, debe usar la masterrama porque aún no se ha lanzado.

Para instalar el paquete desde master, puede hacer esto:

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

Si tiene un vector representado en TEME r_teme, puede convertirlo a J2000 usando:

D_J2000_TEME = rTEMEtoGCRF(JD_TT)
r_j2000 = D_J2000_TEME*r_teme

donde JD_TTestá el Día Juliano en el Tiempo Terrestre. Si solo tiene el día juliano en UTC, puede usar JD_TT = JD_UTCtoTT(JD_UTC).

Este paquete también tiene una implementación nativa de SGP4 ( sin bits SDP4 todavía ). Los vectores calculados del propagador de órbita (posición y velocidad) se representan en TEME y se pueden convertir a J2000 utilizando el procedimiento anterior.

Tenga en cuenta que la definición de TEME en este paquete es la misma que la utilizada por Vallado, ya que no tenemos una definición de TEME "oficial". Además, todas esas funciones de transformación se probaron intensamente con los ejemplos en la carpeta del libro de Vallado (como puede ver en ./test/).

ACTUALIZAR

Con la confirmación más reciente, es aún más fácil:

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)
No lo creo, esto fue publicado este año: preguntó hace 2 meses
bastante razón @RonanArraesJardimChagas. El formato de fecha estadounidense es confuso

Tarlan da en el clavo con su respuesta, pero quería unirme a aquellos que no usan python o usan algún otro software que no se discute aquí.

El consenso general es que la conversión directa entre marcos inerciales se vuelve complicada y no trivial. Como resultado, sería mejor colocar TEME en un marco fijo/pseudofijo antes de convertirlo en el marco inercial de su elección.

Esto funciona no solo para J2000, sino para cualquier marco. Las transformaciones de coordenadas de TEME a ECF son bastante comunes, especialmente con las empresas de telecomunicaciones que desean saber qué tipo de cobertura proporcionarán sus satélites. Desde allí, ir a ECF a cualquier marco inercial en el que esté trabajando será trivial si comprende la relación entre sus sistemas de coordenadas fijas e inerciales.

Un comentario muy tardío, pero ¿no es trivial la transformación de EC(E)F a otro marco ECI si se tienen en cuenta factores como la precesión, la nutación y el movimiento polar?

¿Cómo convertir el TEME a J2000? [usando Python]

Ver: " astropysics/astropysics/coords/coordsys.py ", que es del paquete de Astrofísica .

Ver también:

" Seguimiento de huellas de satélites en la superficie de la Tierra " o

" Revisión del Informe de Spacetrack #3: Rev 2 ", Apéndice C - Sistema de coordenadas TEME.

Código fuente (C++, FORTRAN, Java, MATLAB, Pascal. Total: 1.229.282 bytes, archivo .ZIP).

No puedo encontrar nada relacionado con el marco TEME allí, ¿tiene un número de línea? O, si no hay nada, tal vez explique cómo se usarían las diferentes piezas aquí para lograr la transformación TEME <-> J2000.
@Chris Como sé, astropy puede convertir de ITRS a J2000. Para TEME->ITRS usé Skyfield. Se agregó el código como respuesta.