【问题标题】:outputs not matching from sgp4 in C++, pyephem and Heavens Above输出与 C++、pyephem 和 Heavens Above 中的 sgp4 不匹配
【发布时间】:2016-02-03 12:53:44
【问题描述】:

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

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

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

将结果与Heavens Above 中的预测通行证进行比较,结果差异很大。例如,对于预测的通行证,在几秒到大约 90 秒之间。最大高度接缝并没有那么错误,虽然天堂之上是全度数,这使得它很难比较。为了排除它们只是在确定卫星是否可见的算法上有所不同,我将其与 sattrak 中的数据进行了比较,确认计算出的位置实际上是不同的。

我也尝试过使用 python 的 pyephem 库,这似乎很方便。我尝试了以下方法来计算接下来的五次传球:

#!/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 秒。

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

有没有人知道,为什么我没有得到预期的结果?在我看来,使用未更改的 passpredict 程序几乎不会搞砸。

我并不关心我会使用 C++ 还是 python,只要我得到好的结果。另外,python-sgp4看起来很不错,我很有信心,一旦我做对了,我可以很容易地在python和C++之间进行转换。

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

非常感谢您!

【问题讨论】:

    标签: python pyephem satellite orbital-mechanics sgp4


    【解决方案1】:

    简化扰动模型是一组五个数学模型(SGP、SGP4、SDP4、SGP8 和 SDP8),用于计算卫星和空间碎片相对于地心惯性坐标系的轨道状态向量。这组模型通常被统称为 SGP4,因为该模型的使用频率很高,尤其是 NORAD 和 NASA 生产的两线元素组。这些模型预测了由地球形状、阻力、辐射和来自太阳和月球等其他天体的引力效应引起的扰动效应。简化的一般扰动 (SGP) 模型适用于轨道周期小于 225 分钟的近地物体。简化的深空扰动 (SDP) 模型适用于轨道周期大于 225 分钟的物体,其对应的高度为 5,877.5 公里,假设为圆形轨道。 SGP4 模型是由 Ken Cranford 于 1970 年开发的。该模型是通过简化 Lane 和 Cranford 的更广泛的分析理论获得的,该理论将 Brouwer 的解用于其引力模型,并将功率密度函数用于其大气模型。 SGP4 MATLAB 版本返回卫星在四个坐标系中的状态向量,即 TEME、ITRS、GCRS 和 TOD。 SGP4 Python 版本在三个坐标系(即 TEME、ITRS 和 GCRS)中返回卫星的状态向量。您可以通过以下链接使用我的 SGP4 的 Python 版本:https://www.researchgate.net/publication/358351066_SGP4_Python_code 或者您可以通过以下链接使用我的 SGP4 的 MATLAB 版本:https://www.researchgate.net/publication/346217793_SGP4_MATLAB_code 您需要了解 Heavens-above 产生结果的坐标系。为此,请使用 Heavens-Above 结果检查我的 SGP4 的不同输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-18
      • 2021-11-19
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多