A A A A Автор Тема: Как проверить правильность координат ECEF из TLE  (Прочитано 2423 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AbrazivАвтор темы

  • Новичок
  • *
  • Сообщений: 46
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Abraziv
Доброго времени суток, набросал код для вычисления ECEF геостационара. Как проверить корректность? Может кто нибудь помочь?

Ниже прикрепляю файл TLE. Может кто нибудь сказать координаты, для следующей даты 28.03.2016 10:27:48.

У меня получилось следующее (в метрах):
"CHINASAT 6A (ZX 6A)     "
"1 37150U 10042A   16086.98471749 -.00000366  00000-0  00000-0 0  9999"
"2 37150   0.0201 153.9218 0001202 160.4468 350.0355  1.00272672 20453"
ECEF
x1  =  -2.42228e+07
y1  =  3.45058e+07
z1  =  22333.4

"ASIASAT 4               "
"1 27718U 03014A   16087.58527374 -.00000371  00000-0  00000+0 0  9997"
"2 27718   0.0012 228.9628 0001555  51.0006 238.2770  1.00274277 47487"
ECEF
x2  =  -2.24168e+07
y2  =  3.57035e+07
z2  =  14503.3

Заранее спасибо.

Оффлайн Upsilon

  • *****
  • Сообщений: 518
  • Благодарностей: 245
    • Сообщения от Upsilon
Norad 37150 на 28.03.2016 10:27:48 UT
x = -24235.5 km
y =  34509.6 km
z = -10.56 km

Norad 27718 на 28.03.2016 10:27:48 UT
x = -22420.8 km
y =  35716.5 km
z = -0.73 km

Оффлайн AbrazivАвтор темы

  • Новичок
  • *
  • Сообщений: 46
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Abraziv
Upsilon спасибо. Я забыл сказать что время привёл для utc+10, извиняюсь, можете ещё раз посмотреть? Или рассказать где можно посмотреть.

Оффлайн Upsilon

  • *****
  • Сообщений: 518
  • Благодарностей: 245
    • Сообщения от Upsilon
Norad 37150 на 28.03.2016 00:27:48 UT
x = -24225.2 km
y = 34503.8 km
z = 4.08 km

Norad 27718 на 28.03.2016 00:27:48 UT
x =-22418.7 km
y = 35703.1 km
z = 0.88 km

Оффлайн AbrazivАвтор темы

  • Новичок
  • *
  • Сообщений: 46
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Abraziv
Спасибо за ответ. Как понять где критерий истины?
Для расчёта я использовал библиотеку http://www.zeptomoby.com/satellites/
Какую лучше модель (sgp4,sgp8) использовать для расчёта эфемерид геостационаров?

Можете посмотреть свежим взглядом, может я где то ошибся или всё же библиотека глюченая.

cTle tleSGP4(key.toStdString(), mapTLE->value(key)[0].toStdString(),
                                        mapTLE->value(key)[1].toStdString());

cSatellite satSGP4 = cSatellite(_tleSGP4);

// Время использую UTC
cJulian julian(time.date().year(), time.date().month(),  time.date().day(),
                     time.time().hour(), time.time().minute(), time.time().second());

cEciTime eci = satSGP4.PositionEci(julian);

vector<cEci> vecPos;
vecPos.push_back(eci);

double t = julian.ToGmst();

// здесь перевожу ECI в ECEF (в метрах)
ECI2ECEF_POS(vecPos[0].Position().m_x * 1000.0,
                 vecPos[0].Position().m_y * 1000.0,
                 vecPos[0].Position().m_z * 1000.0,
                 t, x, y, z);


void ECI2ECEF_POS(double x, double y, double z,double t,
              double &X, double &Y, double &Z)
{
    double cos_s = cos(t);
    double sin_s = sin(t);

    X =   x * cos_s  + y * sin_s;
    Y =  -x * sin_s  + y * cos_s;
    Z = z;
}


В ECI И ECEF одинаковые, вот только они далеки от того что рассчитали вы.

Оффлайн Upsilon

  • *****
  • Сообщений: 518
  • Благодарностей: 245
    • Сообщения от Upsilon
Формат TLE не является точным видом записи орбиты. Каждая из моделей расчета дает чуть разные значения. Для ГС теоретически лучше использовать модели sdp. Мой расчет был по sgp. Расхождение в несколько километров при использовании разных моделей приемлимо, вот только z настораживает, слишком большое значение для геостационаров с таким малым наклонением.
Если вы используете готовую библиотеку, то вам остается лишь довериться автору.

Оффлайн AbrazivАвтор темы

  • Новичок
  • *
  • Сообщений: 46
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Abraziv
Я понимаю, что примерное, мне нужное лучшее из всех зол. А есть ли источники, с достаточно подробным описанием формул, чтобы написать свою библиотеку? Спасибо. Правда вот возьмусь писать библиотеку, а как я узнаю, что не допустил ошибок?

Оффлайн Upsilon

  • *****
  • Сообщений: 518
  • Благодарностей: 245
    • Сообщения от Upsilon

Оффлайн AbrazivАвтор темы

  • Новичок
  • *
  • Сообщений: 46
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Abraziv
Спасибо огромное. Буду думать.

Оффлайн AbrazivАвтор темы

  • Новичок
  • *
  • Сообщений: 46
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Abraziv
Скажите пожалуйста, самый левый столбец это время в минутах прошедшее с начала эпохи ?

Оффлайн Upsilon

  • *****
  • Сообщений: 518
  • Благодарностей: 245
    • Сообщения от Upsilon
Это время в минутах от момента времени, указанного в TLE.

Оффлайн AbrazivАвтор темы

  • Новичок
  • *
  • Сообщений: 46
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Abraziv
Ну я это и имел введу =)))
А какая кодировка всё так точнее SDP4 или SDP8 ? Или вопрос не корректный? Они для разных вещей.

Оффлайн AbrazivАвтор темы

  • Новичок
  • *
  • Сообщений: 46
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Abraziv
Скажите пожалуйста.
Количество дней прошедшее с начала года до даты в TLE это 86.98471749 - 1.5, я правильно понимаю?
« Последнее редактирование: 22 Апр 2016 [18:00:33] от Abraziv »

Оффлайн AbrazivАвтор темы

  • Новичок
  • *
  • Сообщений: 46
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Abraziv
Подскажите пожалуйста. Чтобы получить GMST, можно ли воспользоваться формулой:

GMST = 280.46061837 + 360.98564736629 * d + 0.000388 * t^2

Where
d = days since J2000.0 as before
t = julian centuries since J2000.0 = d / 36525

d это будет количество дней с 2000 года + 1 ?

Оффлайн Upsilon

  • *****
  • Сообщений: 518
  • Благодарностей: 245
    • Сообщения от Upsilon
Модели SGP учитывают несферичность Земли и атмосферное торможение. Модели SDP учитывают еще и лунно-солнечные возмущения.
86.98471749 - это количество дней, прошедших от 0 января 0 часов данного года, как бы странно это не звучало. Например, дата 16001.5 - это полдень 1 января.
У вас же есть готовая функция вычисления звездного гринвического времени, вот и проверьте результат формулы - совпадет или нет.

Оффлайн AbrazivАвтор темы

  • Новичок
  • *
  • Сообщений: 46
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Abraziv
GMST 3.36519  для cJulian julian(2016,3,28,0,27,48);
SGP8
ECI
x =  22863.3
y =  -35421.1
z =  7.63123
ECEF
X =  -14439.8
Y =  39609
Z =  7.63123

Бред. GMST хоть правильное ?

Оффлайн Upsilon

  • *****
  • Сообщений: 518
  • Благодарностей: 245
    • Сообщения от Upsilon
3.36518 радиан
И в чем вы видите бред?
Abraziv, такое впечатление, что вы сами не понимаете, что вам надо и главное - с какой точностью. Метровой точности по tle и аналитическим моделям расчета вы не получите в принципе. Чем вас не устроили результаты по готовым библиотекам, которые вы использовали изначально?

Оффлайн AbrazivАвтор темы

  • Новичок
  • *
  • Сообщений: 46
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Abraziv
"CHINASAT 6A (ZX 6A)     "
"1 37150U 10042A   16086.98471749 -.00000366  00000-0  00000-0 0  9999"
"2 37150   0.0201 153.9218 0001202 160.4468 350.0355  1.00272672 20453"
ECEF
x1  =  -2.42228e+07
y1  =  3.45058e+07
z1  =  22333.4

"ASIASAT 4               "
"1 27718U 03014A   16087.58527374 -.00000371  00000-0  00000+0 0  9997"
"2 27718   0.0012 228.9628 0001555  51.0006 238.2770  1.00274277 47487"
ECEF
x2  =  -2.24168e+07
y2  =  3.57035e+07
z2  =  14503.3


Norad 37150 на 28.03.2016 10:27:48 UT
x = -24235.5 km
y =  34509.6 km
z = -10.56 km

Norad 27718 на 28.03.2016 10:27:48 UT
x = -22420.8 km
y =  35716.5 km
z = -0.73 km


в координате z, она на много отличается. 30 км для меня существенно.

Оффлайн Upsilon

  • *****
  • Сообщений: 518
  • Благодарностей: 245
    • Сообщения от Upsilon
Вы сравниваете наборы координат с разницей в 10 часов. Разница не 30 км, меньше, но z странная. Я не думаю, что автор библиотеки мог накосячить. Проверяйте, что именно вы передаете в функцию.
Неплохо было бы посчитать не для одного момента времени, а для суток с шагом в час, например.

Оффлайн AbrazivАвтор темы

  • Новичок
  • *
  • Сообщений: 46
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Abraziv
Я проверил. Передаётся всё как надо и всё что нужно. Смотрел для разных моментов времени. 

Почему не в 30 ? По моему даже больше.
z1  =  22333.4
z = -10560