1

我在这方面没有经验,但在过去的几天里,我在 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)

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

4

1 回答 1

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 :)

于 2019-12-20T23:03:31.500 回答