我正在尝试预测从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,但我认为,我没有机会混淆坐标系,这是另一篇文章中的问题。
非常感谢你!