Помогите преобразовать фрейм ECEF в фрейм ICRF для проектирования межпланетных миссий.

Я пишу часть программного обеспечения, которое перемещает орбиту космического корабля с начальной околоземной орбиты на межпланетную орбиту. Мое простое распространение двух тел прекрасно работает как на геоцентрической, так и на гелиоцентрической орбите. Однако я не могу правильно обработать переход.

Вот шаги этого перехода (я могу поделиться соответствующим кодом, если это будет полезно):

  1. Получите положение Земли на эклиптике J200 (через https://github.com/soniakeys/meeus/blob/master/planetposition/planetposition.go#L195 ) и вычислите скорость Земли (с помощью уравнений на первых страницах Vallado — Fundamentals in Астродинамика). Обратите внимание, что библиотека «meeus/planetposition» возвращает положения эклиптики в L, B, R, которые я конвертирую в декартовы координаты (через https://en.wikipedia.org/wiki/Ecliptic_coordinate_system#Rectangular_coordinates )

  2. Поверните векторы радиуса и скорости моей геоцентрической орбиты вокруг первой оси и наклона оси Земли (согласно https://en.wikipedia.org/wiki/Ecliptic_coordinate_system#Converting_Cartesian_vectors )

  3. Добавьте векторы R и V космического корабля, вычисленные на шаге 2, к векторам радиуса и скорости планеты, вычисленным на шаге 1 (поскольку р СК гелио знак равно р СК земной шар + р земной шар гелио )

При визуализации обеих траекторий в Cosmographia я точно могу сказать, что вычисления неверны (см. два скриншота ниже). Я застрял в этой проблеме уже несколько часов (я бы сказал, около двенадцати), поэтому любая помощь будет очень признательна.

Вид на Землю из ожидаемого положения (геоцентрические векторы) Вид на Землю из неправильно рассчитанного гелиоцентрического положения

Это хорошее место, чтобы спросить, но вы также можете поискать потенциально полезные ранее существовавшие ответы в Astronomy SE и Math SE .
Я настоятельно рекомендую использовать SPICE Toolkit JPL для преобразования систем координат, а также для многих других вещей, таких как доступ к эфемеридам естественных тел и космических кораблей.
Я знаю о SPICE, однако я не могу использовать его в настоящее время (сначала я надеялся его использовать). Мой софт полностью написан на Go без каких-либо привязок к другим языкам.

Ответы (1)

Очевидно, вы могли бы сделать грубую матрицу вращения по оси Z (относительно Земли) и оценить вращение Земли как постоянное во времени, но это не совсем точно. Вы можете воссоздать метод CesiumJS ComputeFixedToICRF. Это очень обратный инжиниринг и не полное решение, но попытки сделать эти преобразования, по меньшей мере, нетривиальны.

Ссылка на документацию по методу ComputeFixedToICRF в цезии: https://cesiumjs.org/Cesium/Build/Documentation/Transforms.html?classFilter=transf#.computeFixedToIcrfMatrix

Здесь есть пакет Satellite.js, который также выполняет преобразование ECF в ECI: https://github.com/shashwatak/satellite-js/blob/develop/src/transforms.js .