Преобразование кадра SGP4 TEME в J2000

Я ознакомился с моделью SGP4. Проблема, с которой я столкнулся, заключается в том, что результаты находятся в кадре TEME.

Как преобразовать TEME в J2000?

Был бы рад также, если вы предложите способ в pythonили julia.

Хорошо, я сдаюсь. Что такое рама TEME? Гугление не помогло.

Ответы (4)

Проблема решается с помощью пакетов Skyfieldи в python.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
не могли бы вы объяснить days=time - 2451545часть? Я не очень понимаю, что здесь происходит. Дата и время, когда вы хотите преобразовать TEME timeв J2000? Это должно быть выражено в днях?
Привет, показанный выше код Python с использованием skyfield и astropy не работает, потому что я предполагаю, что он был написан в предыдущей версии Python. Поскольку я полностью новичок в питоне, мне нужна помощь. Как нужно изменить этот код, чтобы его можно было правильно использовать с python 3.9.2. Я снова разместил код здесь ниже, потому что я уже пытался запустить его, и я думаю, что в исходном коде присутствуют некоторые ошибки (время должно быть временем, а дата и время импорта отсутствовали). Большое спасибо! PS: я пока не умею писать комментарии, поэтому свои вопросы перевожу в ответы, к сожалению
...... Саша Вот код: pastebin.com/4e87Qj94
@Raksha 2451545 - это юлианская дата полудня UTC 1 января 2000 года. Это близко к эпохе J2000, то есть полдень TT 1 января 2000 года.
@SachaTholl Опубликованный код бесполезен. Я не понимаю, почему это принятый и несколько высоко оцененный ответ. Переменная timeиспользуется, но никогда не определяется. Ошибаются imports. Это не сработало бы в python 2.7, не говоря уже о python 3.

Я опубликовал пакет julia под названием SatelliteToolbox.jl , в котором есть все преобразования, связанные с моделью IAU-76/FK5 (ITRF, MOD, TOD, GCRF, PEF и т. д.), и теперь я также добавил поддержку TEME. Однако вам нужно использовать masterветку, потому что она еще не выпущена.

Чтобы установить пакет из master, вы можете сделать это:

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

Если у вас есть вектор, представленный в TEME r_teme, вы можете преобразовать его в J2000, используя:

D_J2000_TEME = rTEMEtoGCRF(JD_TT)
r_j2000 = D_J2000_TEME*r_teme

где JD_TTюлианский день по земному времени. Если у вас есть только юлианский день в формате UTC, вы можете использовать JD_TT = JD_UTCtoTT(JD_UTC).

Этот пакет также имеет собственную реализацию SGP4 ( пока без битов SDP4 ). Вычисленные векторы от пропагатора орбиты (положение и скорость) представлены в TEME и могут быть преобразованы в J2000 с помощью описанной выше процедуры.

Обратите внимание, что определение TEME в этом пакете совпадает с определением, используемым Vallado, поскольку у нас нет «официального» определения TEME. Кроме того, все эти функции преобразования были тщательно протестированы на примерах в папке книги Вальядо (как вы можете видеть в ./test/).

ОБНОВИТЬ

С новейшим коммитом это еще проще:

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)
Я так не думаю, это было опубликовано в этом году: спросил 2 месяца назад
Совершенно верно @RonanArraesJardimChagas. Американский формат даты сбивает с толку

Тарлан дал правильный ответ, но я хотел присоединиться к тем, кто не использует Python или какое-либо другое программное обеспечение, которое здесь не обсуждается.

По общему мнению, преобразование непосредственно между инерциальными системами отсчета становится запутанным и нетривиальным. В результате было бы лучше перевести TEME в фиксированную/псевдофиксированную систему отсчета, прежде чем преобразовывать ее в выбранную вами инерциальную систему отсчета.

Это работает не только для J2000, но и для любого фрейма. Преобразование координат TEME в ECF довольно распространено, особенно в телекоммуникационных компаниях, которые хотят знать, какое покрытие будут обеспечивать их спутники. Оттуда переход к ECF к любой инерциальной системе отсчета, в которой вы работаете, будет тривиальным, если вы понимаете взаимосвязь между вашей фиксированной и инерциальной системами координат.

Очень поздний комментарий, но не является ли преобразование из EC (E) F в другой кадр ECI нетривиальным, если принять во внимание такие факторы, как прецессия, нутация и полярное движение?

Как преобразовать TEME в J2000? [используя Python]

См.: " astropysics/astropysics/coords/coordsys.py ", который находится в пакете Astrophysics .

Смотрите также:

" Отслеживание следов спутников на поверхности Земли " или

« Пересмотр отчета Spacetrack #3: Rev 2 », Приложение C — Система координат TEME.

Исходный код (C++, FORTRAN, Java, MATLAB, Pascal. Всего: 1 229 282 байт, ZIP-файл).

Я не могу найти там ничего, относящегося к фрейму TEME, у вас есть номер строки? Или, если ничего нет, может быть, объясните, как можно было бы использовать различные части здесь, чтобы выполнить преобразование TEME <-> J2000?
@Chris Насколько я знаю, астропия может преобразовать ITRS в J2000. Для TEME->ITRS я использовал Skyfield. Добавил код в качестве ответа.