输出与C ++,pyephem和Heavens Above中的sgp4不匹配

时间:2016-02-03 12:53:44

标签: python pyephem satellite orbital-mechanics sgp4

我正在尝试预测从TLE文件计算位置并预测LEO卫星的传球。 为方便起见,我只需乘坐国际空间站。

我到目前为止所做的是下载spg4库sgp4 libraries for C++并查看两个示例程序 sattrak passpredict 。前者在 ECI 坐标系中给出地球卫星的位置,并且预测从地球上的某个位置可以看到它。

我到目前为止唯一做的就是输入一个最近的TLE文件,更改观察者位置并编译它,一次使用包含的makefile,一次通过g ++ foo.cpp -o bar / usr / lib / libsgp4

将结果与Heavens Above中预测的通过进行比较,结果差别很大。对于预测的通过,例如,在几秒到大约90秒之间。最大高度接缝并没有错,尽管Heavens Above完全度数,这使得很难进行比较。为了排除他们在确定卫星是否可见的算法上的不同,我将其与来自 sattrak 的数据进行了比较,确认计算的位置实际上是不同的。

我也尝试使用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 ++代码)不匹配,但差异总是低于10s。

老实说,我对pyephem中使用的libastro例程一无所知,因此不相信它们100%。如果我错了,请纠正我。

有没有人有想法,为什么我没有得到预期的结果?在我看来,使用未更改的 passpredict 程序几乎没有可能搞砸它。

只要我得到好的结果,我真的不关心我是否会使用C ++或python。此外,python-sgp4看起来非常好,我很自信,一旦我做对了,我就可以轻松地在python和C ++之间进行交换。

我真的希望,有一个人可以帮助我,因为我现在很无助,甚至没有一个最小的例子。我知道,已经有一个similar post,但我认为,我没有机会混淆坐标系,这是另一篇文章中的问题。

非常感谢你!

0 个答案:

没有答案