Python SGP4 1.1 计算错误轨道
我正在使用Python的SGP4 1.1模块来计算一个中地球轨道(MEO)卫星的位置和速度。通过与STK和JSatTrak对比,我发现返回的位置和速度值不太对。这个卫星应该大约每6小时重复一次轨道,但这个程序显示的重复时间是4小时47分钟51秒。我是不是哪里做错了?
from sgp4.earth_gravity import wgs72
from sgp4.io import twoline2rv
from math import atan2, cos, pi, sin, sqrt, tan
from datetime import datetime
def calculate(options):
x = options[0]
y = options[1]
z = options[2]
# Constants (WGS ellipsoid)
a = 6378.137
e = 8.1819190842622e-2
# Calculation
b = sqrt(pow(a,2) * (1-pow(e,2)))
ep = sqrt((pow(a,2)-pow(b,2))/pow(b,2))
p = sqrt(pow(x,2)+pow(y,2))
th = atan2(a*z, b*p)
lon = atan2(y, x)
lat = atan2((z+ep*ep*b*pow(sin(th),3)), (p-e*e*a*pow(cos(th),3)))
n = a/sqrt(1-e*e*pow(sin(lat),2))
alt = str(p/cos(lat)-n)
lat = str((lat*180)/pi)
lon = str((lon*180)/pi)
#print "%s %s %s" % (lat, lon, alt)
return (lat, lon, alt)
line1 = '1 1U 001001 14001.00000000 .00000000 00000+0 00000+0 0 00022'
line2 = '2 1 0.0891 294.8098 0002843 64.8653 0.5014 5.00115502 09'
satellite = twoline2rv(line1, line2, wgs72)
position1, velocity1 = satellite.propagate(2013, 3, 1, 0, 0, 1)
position2, velocity2 = satellite.propagate(2013, 3, 1, 4, 47, 52)
lat1,lon1,alt1 = calculate(position1)
lat2,lon2,alt2 = calculate(position2)
print lat1 + " " + lon1 + " " + alt1
print lat2 + " " + lon2 + " " + alt2
print "\n\n"
print position1
print position2
3 个回答
1
简化深空扰动模型(SDP)适用于那些轨道周期超过225分钟的物体,这大约对应于5777.5公里的高度,前提是它们的轨道是圆形的。因此,对于中地球轨道(MEO)卫星,你需要使用SDP4或SDP8模型。
3
在你的计算中,需要考虑地球的自转。你计算的不是经度,而是地心赤经。可以先去看看维基百科上关于时角的文章,了解一下相关内容。
4
你问这个问题已经三周了,我想这对你可能没什么帮助,不过为了记录下来,我还是说一下。
我没有Python的SGP4程序,也不能测试它们,但通常SGP4程序会返回一个叫做TEME的参考框架中的位置和速度,这个框架是一个不随地球自转的惯性参考系(也就是固定不动的)。你现在是在这个参考系下计算地球的经纬度,这样会得到错误的结果。你应该先把TEME系统转换成一个跟随地球自转的系统(比如ECEF),然后再计算经纬度。
我希望有一些库可以帮助你完成这个转换,因为这个转换并不简单。
祝好。