Ich versuche, die Umlaufbahn einer sun-synchronous satellite
. Die Anfangsdaten werden durch die TLE definiert.
Die Umlaufbahn des Satelliten wird vom Operator durch Manöver gesteuert. Das heißt, die Auswirkungen von Störungen werden kompensiert, die Umlaufbahn des Satelliten bleibt immer sonnensynchron .
Gibt es eine Möglichkeit, die Umlaufbahn unter Berücksichtigung der obigen Bedingungen zu propagieren und die Berechnungen für die kepletschen Elemente durchzuführen ?
Ich habe das SGP4-Modell ausprobiert, aber es ist in diesem Fall nicht geeignet.
TLEs berücksichtigen bereits den Luftwiderstand bis zu einem gewissen Punkt (überprüfen Sie, ob BSTAR negativ ist, wenn dies der Fall ist, dann berücksichtigt das TLE, dass Manöver durchgeführt wurden). Ein positiver BSTAR reduziert die (mittlere) große Halbachse im Laufe der Zeit, ein Effekt des Luftwiderstands. J2, J3 und J4 werden jeweils teilweise berücksichtigt (denken Sie an die Näherung der Taylor-Reihe mit auf Null gesetzt).
Wenn Sie eine sonnensynchrone Umlaufbahn haben, muss mindestens J2 berücksichtigt werden, da es sonst keine solche Umlaufbahn geben könnte. Alle anderen Störungen werden nur auf Basis von Ausbreitungsdauer und Simulationstreue benötigt: Wie lange läuft die Simulation und wie genau soll sie sein. 2 Wochen und geringe Genauigkeit bedeuten, dass die SGP4-Ausgabe in Ordnung ist.
Ich glaube, SGP8 wird Sonnen- und Mondstörungen berücksichtigen, aber nicht SGP4.
In Bezug darauf, welchen Orbit-Propagator Sie verwenden sollten, hängt davon ab. Wenn Sie eine Weltraummission entwerfen, die in einer sonnensynchronen Umlaufbahn operiert, ist normalerweise ein J2 besser. In diesen Fällen hat die Mission normalerweise Möglichkeiten, sich auf der geplanten Umlaufbahn zu halten und alle Störungen außer J2 zu vermeiden. Daher ist ein J2-Propagator besser. Wenn Sie andererseits einen echten Satelliten mit einem echten TLE verbreiten, ist SGP4 viel genauer.
Wenn Sie Julia und SatelliteToolbox.jl verwenden, können Sie den Propagator sehr einfach auswählen. Zum Beispiel für einen reinen J2-Propagator:
julia> orbp = init_orbit_propagator(Val{:J2}, Orbit(0.0,7130982.0,0.001111,98.405*pi/180,pi/2,0.0,0.0))
julia> (o,r,v) = propagate!(orbp, collect(0:3:24)*60*60)
julia> r
9-element Array{Array{T,1} where T,1}:
[5.30372e-7, 7.12306e6, 3.58655e-6]
[-9.98335e5, 2.14179e6, -6.72549e6]
[-5.75909e5, -5.83674e6, -4.06734e6]
[6.65317e5, -5.69201e6, 4.2545e6]
[9.62557e5, 2.37418e6, 6.65228e6]
[-1.10605e5, 7.11845e6, -231186.0]
[-1.02813e6, 1.90664e6, -6.79145e6]
[-4.82921e5, -5.97389e6, -3.87579e6]
[750898.0, -5.53993e6, 4.43709e6]
Dieser propagierte die Umlaufbahn 24 Stunden lang und speicherte die Informationen alle 3 Stunden. Für SGP4 können Sie dann Folgendes tun:
julia> orbp = init_orbit_propagator(Val{:sgp4}, Orbit(0.0,7130982.0,0.001111,98.405*pi/180,pi/2,0.0,0.0))
julia> (o,r,v) = propagate!(orbp, collect(0:3:24)*60*60)
julia> r
9-element Array{Array{T,1} where T,1}:
[-2159.7, 7.13166e6, -14607.2]
[-1.00096e6, 2.1411e6, -6.73899e6]
[-5.78906e5, -5.83897e6, -4.08451e6]
[6.64614e5, -5.70129e6, 4.24735e6]
[9.6287e5, 2.37768e6, 6.64987e6]
[-1.12629e5, 7.12679e6, -2.45705e5]
[-1.03066e6, 1.90639e6, -6.80469e6]
[-4.86132e5, -5.97626e6, -3.89338e6]
[7.5014e5, -5.54932e6, 4.42998e6]
Wenn Ihre Umlaufbahn in der Datei definiert ist sat.tle
, können Sie die Umlaufbahn folgendermaßen verbreiten:
julia> tle = read_tle("sat.tle")
1-element Array{SatelliteToolbox.TLE,1}:
TLE
==========================================================
Name: Test
Satellite number: 6251
International designator: 62025E
Epoch (Year): 6
Epoch (Day): 176.82412014
Element set number: 398
Inclination: 58.05790000 deg
RAAN: 54.04250000 deg
Argument of perigee: 139.15680000 deg
Mean anomaly: 221.18540000 deg
Mean motion (n): 15.56387291 revs/day
Revolution number: 677
B*: 0.000000 1/[er]
1 d
---.--- n: 0.000000 rev/day²
2 dt
1 d²
---.--- n: 0.000000 rev/day³
6 dt²
==========================================================
julia> orbp = init_orbit_propagator(Val{:sgp4}, tle[1])
julia> (o,r,v) = propagate!(orbp, collect(0:3:24)*60*60)
julia> r
9-element Array{Array{T,1} where T,1}:
[3.98829e6, 5.49898e6, 928.983]
[4.77232e6, 4.45027e6, -1.90764e6]
[4.99362e6, 2.89039e6, -3.60054e6]
[4.62067e6, 1.00698e6, -4.88731e6]
[3.69211e6, -9.77058e5, -5.62356e6]
[2.31243e6, -2.82934e6, -5.72624e6]
[6.40617e5, -4.33414e6, -5.18251e6]
[-1.1272e6, -5.31664e6, -4.05161e6]
[-2.77972e6, -5.66325e6, -2.45952e6]
Chris