Ayuda para la conversión del marco ECEF al marco ICRF para el diseño de misiones interplanetarias

Estoy escribiendo una pieza de software que propaga la órbita de una nave espacial desde una órbita terrestre inicial a una órbita interplanetaria. Mi propagación simple de dos cuerpos funciona bien en una órbita geocéntrica o heliocéntrica. Sin embargo, parece que no puedo manejar la transición correctamente.

Estos son los pasos de esa transición (puedo compartir el código relevante si es útil):

  1. Obtenga la posición eclíptica J200 de la Tierra (a través de https://github.com/soniakeys/meeus/blob/master/planetposition/planetposition.go#L195 ) y calcule la velocidad de la Tierra (a través de ecuaciones en las primeras páginas de Vallado - Fundamentos en Astrodinámica). Tenga en cuenta que la biblioteca "meeus/planetposition" devuelve las posiciones de la eclíptica en L, B, R, que convierto en coordenadas cartesianas (a través de https://en.wikipedia.org/wiki/Ecliptic_coordinate_system#Rectangular_coordinates )

  2. Gire los vectores de radio y velocidad de mi órbita geocéntrica sobre el primer eje y por la inclinación axial de la Tierra (según https://en.wikipedia.org/wiki/Ecliptic_coordinate_system#Converting_Cartesian_vectors )

  3. Agregue los vectores R y V de la nave espacial calculados en el paso 2 a los vectores de radio y velocidad del planeta calculados en el paso 1 (ya que r Carolina del Sur helio = r Carolina del Sur tierra + r tierra helio )

Al visualizar ambas trayectorias en Cosmographia, definitivamente puedo decir que el cálculo es incorrecto (ver las dos capturas de pantalla a continuación). He estado atascado en este problema durante algunas horas (alrededor de doce, diría), por lo que cualquier ayuda sería muy apreciada.

La Tierra vista desde la posición esperada (vectores geocéntricos) La Tierra vista desde la posición heliocéntrica calculada incorrectamente

Este es un buen lugar para preguntar, pero también puede buscar en Astronomy SE y Math SE para obtener respuestas preexistentes potencialmente útiles.
Recomiendo encarecidamente el uso de SPICE Toolkit de JPL para conversiones de marcos de coordenadas, así como muchas otras cosas, como acceder a efemérides de cuerpos naturales y naves espaciales.
Sé de SPICE, sin embargo, no es factible para mí usarlo actualmente (inicialmente esperaba usarlo). Mi software está escrito íntegramente en Go sin vínculos con otros idiomas.

Respuestas (1)

Obviamente, podría hacer una matriz de rotación aproximada del eje Z (en relación con la tierra) y estimar la rotación de la tierra como constante con el tiempo, pero eso no es del todo exacto. Puede volver a crear el método computeFixedToICRF de CesiumJS. Es muy de ingeniería inversa y no es una solución completa, pero tratar de hacer estas transformaciones no es trivial, por decir lo menos.

Enlace a la documentación del método ComputeFixedToICRF en cesium: https://cesiumjs.org/Cesium/Build/Documentation/Transforms.html?classFilter=transf#.computeFixedToIcrfMatrix

Hay un paquete llamado satellite.js que también hace una transformación de ECF a ECI aquí: https://github.com/shashwatak/satellite-js/blob/develop/src/transforms.js