Вывод не совпадает с sgp4 в C++, pyephem и Heavens Above

Я пытаюсь предсказать, рассчитать позиции и предсказать проходы спутника LEO из файла TLE. Для удобства я просто беру международную космическую станцию.

До сих пор я загружал библиотеки spg4 и библиотеки sgp4 для C++ и рассматривал два примера программ sattrak и passpredict. Первый дает положение земного спутника в системе координат ECI, а последний предсказывает, когда он будет виден из определенного места на земле.

Единственное, что я до сих пор делал - это входил в недавний файл TLE, изменял позицию наблюдателя и компилировал его, один раз с включенным make-файлом и один раз через g++ foo.cpp -o bar /usr/lib/libsgp4

Сравнивая результаты с предсказанными проходами на Небесах Выше, результаты значительно отличаются. Для прогнозируемых проходов, например, от нескольких секунд до примерно 90 секунд. Максимальная высота швов не так уж и неправильна, хотя Heavens Above округляется на полных градусах, что затрудняет сравнение. Чтобы исключить, что они просто отличаются по своему алгоритму определения того, виден ли спутник, я сравнил его с данными из саттрака, подтвердив, что вычисленные позиции на самом деле разные.

Я также попробовал то же самое, используя библиотеку pyephem для python, которая, кажется, очень удобна. Я попробовал следующее, чтобы вычислить следующие пять проходов:

#!/usr/bin/python

import sys 
import math
import ephem

iss = ephem.readtle("ISS Zarya", 
        "1 25544U 98067A   16034.21638441  .00007171  00000-0  11436-3 0  9997",
        "2 25544  51.6442  11.1183 0006796  73.3436  50.5136 15.54391313983985")

observer = ephem.Observer()
observer.lat = '48'
observer.lon = '16'
observer.elevation = 179
observer.horizon = '10' 
print("observer:\nLattitude: ", observer.lat,"\n Longitude: ", observer.lon,"\n", "horizon: ", observer.horizon,"\n")

for p in range(5):
    tr, azr, tt, altt, ts, azs = observer.next_pass(iss)
    rise = tr
    print("===============================")
    while tr < ts:
        observer.date = tr
        iss.compute(observer)
        tr = ephem.Date(tr + 10 * ephem.minute)
    print("Rise:        ", rise)
    print("Set time:    ", ts)
    print("Duration:    ",math.floor((ts-rise)*60*24), "min", math.floor(((ts-rise)*60*24)%1*60), "s")  
    print("Max. Alt:     %4.2f \n" % (math.degrees(altt)))

    observer.date = tr + ephem.minute

Однако результаты не совпадают с Heavens Above (или кодом C++), хотя разница всегда меньше 10 секунд.

Честно говоря, я ничего не знаю о процедурах libastro, используемых в pyephem, и, следовательно, не доверяю им до 100%. Пожалуйста, поправьте меня, если я ошибаюсь.

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

Меня не волнует, буду ли я использовать C++ или python, если получу хорошие результаты. Кроме того, python-sgp4 выглядит так хорошо, что я вполне уверен, что могу легко обмениваться между python и C++, как только у меня получится.

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

Заранее большое спасибо!

0 ответов

Другие вопросы по тегам