【问题标题】:Why am i getting a difference between matlab's "lla2eci" and "sgp4.propagate"?为什么我在 matlab 的“lla2eci”和“sgp4.propagate”之间有所不同?
【发布时间】:2019-12-17 18:39:29
【问题描述】:

我在这方面没有经验,但在过去的几天里,我用 python 编写了一些代码来跟踪(希望是)国际空间站。我已经完成了数学计算,并且让这方面的工作正常进行,但只有当我使用 matlab 的 lla2eci 注入卫星位置时。为了得到正确的答案,我从实时数据中获取卫星子点的纬度和经度,然后使用 matlab 将其转换为 eci。这种方法为我提供了正确的国际空间站视角(方位角和仰角),我已经使用 pyephem 方法使用 iss.compute(home) 确认了它们,其中“home”是我的 lla。

我将 matlab 的 lla2eci 与 Satellite.propagate(...) 得到的结果进行比较,在时间 = 2019 12 16 8 53 19 时,我得到以下结果:

Matlab lla2eci: x,y,z = (3873.9, -902.18, -4969.9) sgp4 传播:x,y,z= (-4082.5, 3458.3, -4195.1)

我必须在这里遗漏一些东西!任何帮助将不胜感激,我很高兴回答任何问题以澄清。

【问题讨论】:

    标签: matlab tracker satellite sgp4


    【解决方案1】:

    看问题,好像没有考虑海拔高度?

    由于您的目标是使用 python 代码跟踪国际空间站,我可以建议稍微不同的方法吗?

    1. 空间对象的 TLE 值可在以下网址获得:https://www.space-track.org/,请在此注册。
    2. 然后使用 sgp4(https://pypi.org/project/sgp4/) 和 spacetrack(https://pypi.org/project/spacetrack/) 库在 python 中找到卫星的位置。

    示例代码如下所示:

    from sgp4.earth_gravity import wgs84
    from sgp4.io import twoline2rv
    from spacetrack import SpaceTrackClient 
    from datetime import datetime
    
    #generate TLE from database    
    st = SpaceTrackClient('YOUR_USERNAME', 'YOUR_PASSWORD')
    tle = st.tle_latest(norad_cat_id=[<ISS_NORAD_CAT_ID>], ordinal=1, format='tle')
    
    line1 = tle[:69]
    line2 = tle[70:-7]
    
    #create satellite object
    satellite = twoline2rv(line1, line2, wgs84)
    
    date_time = datetime.utcnow()
    
    #find position
    sat_position, sat_velocity = satellite.propagate(date_time.year, date_time.month,... 
                       date_time.day, date_time.hour, date_time.minute, date_time.second)
    

    使用您自己的用户名、密码和 norad ID。 欢迎来到stackoverflow :)

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 2019-10-04
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      相关资源
      最近更新 更多