2

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   
4

3 に答える 3

3

この質問をしてから 3 週間が経ちましたので、役に立たないと思いますが、とにかく、アーカイブについては...

私は Python SGP4 ルーチンを持っておらず、それらをテストすることもできませんが、通常、SGP4 ルーチンは、TEME (真の赤道、平均分点: https://en.wikipedia ) と呼ばれる慣性 (非回転) 参照フレームで位置と速度を返します。 .org/wiki/Earth-centered_inertial#TEME )。この参照系で地球の緯度/経度を計算すると、間違った結果が得られます。最初に TEME システムを地球と一緒に回転する回転システム (ECEF のようなもの: https://en.wikipedia.org/wiki/ECEF ) に変換してから、緯度/経度を計算する必要があります。

単純なものではないので、この変換用のライブラリがあることを願っています。

よろしく。

于 2013-04-06T18:21:32.787 に答える
3

計算で地球の回転を考慮する必要があります。経度の代わりに、地心赤経を計算しました。ウィキペディアの時角に関する記事を読むことから始めます。

于 2013-05-16T17:49:51.110 に答える