¿Cómo puedo generar coeficientes Chebyshev de SPICE para J2000 Inertial a Moon ME Frame?

Quiero extraer los coeficientes de Chebyshev para poder calcular la transformación variable en el tiempo del marco inercial ICRF / J2000 al marco Moon ME (moon mean earth). Sé que puedo usar Spiceypy y los archivos PCK y FK asociados para obtener las matrices de rotación en cualquier momento, pero quiero una expresión general para la transformación en nuestro código, ya que no podemos implementar todo el código SPICE en nuestro software.

¿Hay alguna manera de encontrar los coeficientes dentro del PCK binario de SPICE? Si no, ¿puedo obtener matrices de rotación en momentos particulares y luego interpolar eso para obtener el Chebyshev? No soy un experto aquí y cualquier ayuda u otras sugerencias serían apreciadas.

Esto es lo que he estado leyendo: https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/Tutorials/pdf/individual_docs/23_lunar-earth_pck-fk.pdf

Respuestas (1)

Supongo que está familiarizado con esta lista de documentación: https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/index.html

Aquí hay una sección sobre archivos PCK con polinomios de Chebyshev: https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/pck.html#Type%202:%20Chebyshev%20(Angles%20only)

Esta sección puede tener detalles sobre el acceso manual a los registros PCK binarios: https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/pck.html#Summary%20of%20Calling%20Sequences

Es posible que deba realizar alguna programación de E/S de archivo manual, pero parece que los coeficientes están ahí sin necesidad de más cálculos. Definitivamente eche un vistazo a la lista de herramientas para ver si hay algo que pueda ayudar.


Si decide volver a derivarlo de matrices de rotación, aquí hay un fragmento de código C++ que podría ayudar:

getRotAngVel(string frame, string bodyframe, SpiceDouble et)
{
    // Get 6x6 transformation matrix (displacements and speeds)
    sxform_c(frame.c_str(), bodyframe.c_str(), et, sxform);

    SpiceDouble rotM[3][3]; //rotation matrix
    SpiceDouble angVel[3]; //Axis of angular velocity, length gives magnitude in rad/s (probably?)

    //get rot matrix, ang velocity
    xf2rav_c(sxform, rotM, angVel); 
...
}

framees el nombre del marco de rotación de observación, y bodyframees el nombre del marco de rotación fijo del cuerpo (o supongo que fijo del planeta) del cuerpo en cuestión. etes tiempo J2000.

¡Ojalá pudiera votar dos veces!