Inhaltsverzeichnis

Orbit-Matrix — welche Rakete erreicht welchen Orbit von welcher Rampe

Die dritte Seite des Trios: Startplätze liefert das Wo, Trägerraketen das Womit — hier werden beide gegen die Zielbahn gerechnet. Die Frage lautet: welche Kombination aus Rampe, Träger und Zielorbit geht, und was kostet sie?

Wie auf den beiden anderen Seiten gilt: alle Zahlen sind gerechnet, das Programm in Abschnitt 5 erzeugt sie aus std.astro.launch und std.astro.orbit.

Bahntypen · Startplätze · Trägerraketen · std.astro.launch · std.astro.orbit


1. Zwei Fragen, nicht eine

„Kann Rakete X von Rampe Y in Orbit Z„ zerfällt in zwei getrennte Prüfungen, und nur die erste hat eine harte Antwort:

  1. Geometrie. Eine Bahn mit einer Neigung kleiner als die Breite des Startplatzes ist vom Start weg nicht erreichbar — die Bahnebene muss den Startpunkt enthalten. AInclinationReachable beantwortet das mit ja oder nein, unabhängig von jeder Rakete. Wer die Bahn trotzdem will, muss die Ebene nachträglich drehen, und das ist teuer.
  2. Energie. Was die Bahn an Geschwindigkeitsbedarf kostet, gegen das, was der Träger liefern kann. Hier gibt es kein Ja/Nein, sondern eine Nutzlastkurve.

Die vier Zielbahnen dieser Seite:

Kürzel Bahn Wofür Quelle
LEO 28.5 400 km Kreisbahn, 28.5° Neigung klassische niedrige Bahn, Referenzfall der Herstellerangaben
ISS 51.6 400 km Kreisbahn, 51.6° Versorgung der Raumstation
Tiangong 387 km Kreisbahn, 41.47° chinesische Raumstation, Shenzhou und Tianzhou Umlaufzeit 92.3 min
Hubble 510 km Kreisbahn, 28.4687° Wartungs- und Anflugbahn des Weltraumteleskops Q2513
SSO 97.5 700 km Kreisbahn, 97.5° rückläufig Erdbeobachtung, sonnensynchron Rundwert, siehe unten
GEO 35 786 km Kreisbahn, 0° Kommunikation, geostationär

Die beiden neuen Ziele sind über verschiedene Größen belegt, und die Bibliothek rechnet die jeweils andere daraus:

 
Die 97.5° für die SSO-Spalte sind gerundet. ASunSyncInclination liefert für 700 km Bahnhöhe 98.188° (Bahntypen). Für den Energiebedarf, den diese Seite rechnet, macht die Differenz wenige m/s aus; für eine Missionsauslegung wäre sie erheblich.

2. Der Geschwindigkeitsbedarf je Rampe

Ab Boden, mit 1500 m/s Aufstiegsverlusten. GEO über eine Hohmann-Bahn aus dem 400-km-Parkorbit mit anschließendem Ebenenwechsel im Apogäum:

Rampe Breite LEO 28.5 ISS 51.6 Tiangong Hubble SSO 97.5 GEO
Kourou 5.2° 8991 9111 9044 9053 9625 13070
Sriharikota 13.72° 8991 9111 9044 9053 9625 13536
Wenchang 19.61° 8991 9111 9044 9053 9625 13863
Starbase 26.00° 8991 9111 9044 9053 9625 14219
Xichang 28.25° 8991 9111 9044 9053 9625 14345
SLC-40 28.56° (9000) 9111 9044 (9065) 9625 14362
LC-39A 28.61° (9006) 9111 9044 (9072) 9625 14365
Tanegashima 30.40° (9253) 9111 9044 (9317) 9625 14465
Uchinoura 31.25° (9371) 9111 9044 (9433) 9625 14513
SLC-4E 34.63° (9838) 9111 9044 (9897) 9625 14702
Taiyuan 38.85° (10421) 9111 9044 (10476) 9625 14937
Jiuquan 40.97° (10714) 9111 9044 (10766) 9625 15055
Baikonur 45.60° (11355) 9111 (9621) (11402) 9625 15311
Wostotschny 51.88° (12221) (9151) (10499) (12262) 9625 15657
Plessezk 62.92° (13726) (10700) (12037) (13755) 9625 16251
Andøya 69.29° (14581) (11594) (12919) (14603) 9625 16585

Werte in Klammern: die Zielneigung liegt unter der Startbreite — geometrisch nicht direkt erreichbar. Die Zahl enthält den nachträglichen Ebenenwechsel als Näherung und ist als Preisschild für einen Umweg zu lesen, nicht als Flugplan.

Werte in Klammern: die Zielneigung liegt unter der Startbreite — geometrisch nicht direkt erreichbar. Der Aufstieg geht dann auf die kleinste erreichbare Neigung, und AAzimuthPenalty schlägt den nachträglichen Ebenenwechsel auf. Diese Zahlen sind ein Preisschild für einen Umweg, kein Flugplan.

Das Auffällige an dieser Tabelle sind die Spalten ohne Streuung:

3. Die Matrix: Nutzlast je Träger und Ziel

Jeder Träger startet von seiner tatsächlichen Rampe. Die veröffentlichte LEO-Nutzlast gilt als Referenzpunkt bei der Bahn mit der kleinsten von dort erreichbaren Neigung; für jede andere Bahn wird der Mehrbedarf über die Raketengleichung auf die Nutzlast umgelegt — mit der Austrittsgeschwindigkeit der jeweiligen Oberstufe.

Träger @ Rampe Oberstufe (Isp) LEO 28.5 ISS 51.6 Tiangong Hubble SSO 97.5 GEO
Spectrum @ Andøya ~320 s 0.2 t 0.5 t 0.3 t 0.2 t 0.9 t 0.10 t
Falcon 9 @ SLC-40 Merlin Vacuum, 348 s 22.7 t 22.0 t 22.5 t 22.3 t 18.9 t 4.73 t
Ariane 64 @ Kourou Vinci, 457 s 21.3 t 20.8 t 21.1 t 21.0 t 18.5 t 8.59 t
Angara A5 @ Wostotschny RD-0124A, 359 s 10.1 t 24.2 t 16.5 t 10.0 t 21.2 t 3.82 t
Long March 5B @ Wenchang YF-75D, 442 s 24.8 t 24.2 t 24.5 t 24.5 t 21.5 t 8.07 t

Was die Matrix zeigt:

 
Diese Nutzlastzahlen sind ein Modell, keine Herstellerangaben. Sie entstehen aus einer einzigen veröffentlichten Referenznutzlast, die über die Raketengleichung auf andere Bahnen verschoben wird. Nicht enthalten: Verkleidungsgrenzen, Struktur- und Bergungsreserven, reale Stufungspunkte, Startfenster, Sicherheitskorridore, Drosselung. Die Spalten sind untereinander vergleichbar; gegen ein Datenblatt sind sie es nicht.

Probe: Für Ariane 64 liefert das Modell 8.59 t GEO gegenüber 11.5 t GTO im Datenblatt — GEO liegt hinter GTO, die Größenordnung passt also. Für Falcon 9 stehen 4.73 t GEO gegen 8.3 t GTO. Wo das Modell danebenliegt, liegt es zu niedrig.

4. Die kurze Antwort

Ziel geht von Kosten ab Boden was den Ausschlag gibt
LEO 28.5 jeder Rampe bis 28.5° Breite 8991 m/s darüber nur mit Ebenenwechsel
ISS 51.6 jeder Rampe bis 51.6° 9111 m/s Plessezk und Andøya fallen heraus
Tiangong 41.47 jeder Rampe bis 41.47° 9044 m/s Jiuquan liegt 0.5 Grad darunter — deshalb starten die Shenzhou-Flüge dort
Hubble 28.47 jeder Rampe bis 28.47° 9053 m/s Cape liegt knapp darüber; siehe unten
SSO 97.5 jeder Rampe 9625 m/s rückläufig, deshalb überall gleich und überall teurer
GEO am besten Kourou 13 070…16 585 m/s die einzige Zielbahn, bei der die Startbreite den Preis bestimmt

Die Rampenwahl ist eine Ja/Nein-Frage, keine Preisfrage — mit einer Ausnahme. Für jede Bahn, deren Neigung über der Startbreite liegt, kostet der Aufstieg überall dasselbe. Erst beim GEO, wo am Ende auf 0 Grad gedreht wird, zahlt sich eine äquatornahe Rampe in Geschwindigkeit aus.

Und die Kombinationen, die nicht gehen: 28.5-Grad-Bahnen von Wostotschny, Plessezk oder Andøya; die ISS-Bahn von Plessezk oder Andøya; die Tiangong-Bahn von Baikonur aufwärts; die Hubble-Bahn von allem oberhalb von Xichang. Nicht „teuer“, sondern von der Geometrie ausgeschlossen — der Startpunkt liegt außerhalb der Bahnebene.

5. Die Programme

Teil A — der dv-Bedarf aus Abschnitt 2:

unit main;
import std.astro.launch;
import std.astro.orbit;
import std.math;
import std.io;
import std.string;

fn Grad(g: f64): f64 { return g * Pi() / 180.0; }
fn f(v: f64, d: int64): pchar { return FloatToStr(v, d); }

// dv ab Boden bis Kreisbahn. retro = true dreht den Drehgewinn um.
// Aufstieg auf die Zielhoehe ueber eine 200-km-Parkbahn (ADvAscentToOrbit),
// Drehgewinn aus der ZIELNEIGUNG (ARotationGainForInclination).
fn dvBoden(breiteGrad: f64, hoehe: f64, zielGrad: f64): f64 {
    var breite: f64 := Grad(breiteGrad);
    var ziel:   f64 := Grad(zielGrad);
    var rPark:  f64 := ARadiusEarth() + 200000.0;
    var r:      f64 := ARadiusEarth() + hoehe;
    // Liegt die Zielneigung unter der Startbreite, ist sie direkt nicht
    // erreichbar: dann rechnet der Aufstieg auf die kleinste erreichbare
    // Neigung, und AAzimuthPenalty schlaegt den Ebenenwechsel auf.
    var iAuf:   f64 := ziel;
    if !AInclinationReachable(breite, ziel) { iAuf := breite; }
    var gewinn: f64 := ARotationGainForInclination(AEarthRotation(), ARadiusEarth(), breite, iAuf);
    var dv:     f64 := ADvAscentToOrbit(AMuEarth(), rPark, r, 1500.0, gewinn);
    var strafe: f64 := AAzimuthPenalty(ACircularSpeed(AMuEarth(), r), breite, ziel);
    return dv + strafe;
}

fn spalte(breite: f64, zielGrad: f64, hoehe: f64): void {
    Print(" | ");
    if AInclinationReachable(Grad(breite), Grad(zielGrad)) {
        Print(f(dvBoden(breite, hoehe, zielGrad), 0));
    } else {
        Print(StrConcat("(", StrConcat(f(dvBoden(breite, hoehe, zielGrad), 0), ")")));
    }
}

// Hoehe aus der Umlaufzeit: Tiangong ist ueber die Periode belegt, nicht ueber die Hoehe
fn hoeheAusPeriode(minuten: f64): f64 {
    return ASemiMajorFromPeriod(AMuEarth(), minuten * 60.0) - ARadiusEarth();
}

fn zeile(name: pchar, breite: f64): void {
    var rLeo:   f64 := ARadiusEarth() + 400000.0;
    var rGeo:   f64 := 42164000.0;
    var leoMin: f64 := dvBoden(breite, 400000.0, breite);
    var hoh:    f64 := AHohmannDv(AMuEarth(), rLeo, rGeo);
    var plane:  f64 := APlaneChangeDv(ACircularSpeed(AMuEarth(), rGeo), Grad(breite));
    Print(name);
    spalte(breite, 28.5, 400000.0);   // LEO 400 km, 28.5 Grad
    spalte(breite, 51.6, 400000.0);   // ISS
    spalte(breite, 41.47, hoeheAusPeriode(92.3));  // Tiangong
    spalte(breite, 28.4687, 510200.0);             // Hubble
    spalte(breite, 97.5, 700000.0);    // SSO 700 km, rueckl.
    Print(" | "); PrintLn(f(leoMin + hoh + plane, 0));
}

fn main(): int64 {
    PrintLn("Rampe         | LEO 28.5 | ISS 51.6 | Tiangong | Hubble | SSO 97.5 | GEO   (m/s ab Boden)");
    zeile("Kourou        ",  5.2);
    zeile("Sriharikota   ", 13.7172);
    zeile("Wenchang      ", 19.6145);
    zeile("Starbase      ", 25.997);
    zeile("Xichang       ", 28.2456);
    zeile("SLC-40        ", 28.5619);
    zeile("LC-39A        ", 28.6083);
    zeile("Tanegashima   ", 30.4);
    zeile("Uchinoura     ", 31.2519);
    zeile("SLC-4E        ", 34.633);
    zeile("Taiyuan       ", 38.8491);
    zeile("Jiuquan       ", 40.9675);
    zeile("Baikonur      ", 45.6);
    zeile("Wostotschny   ", 51.8846);
    zeile("Plessezk      ", 62.9167);
    zeile("Andoya        ", 69.294167);
    PrintLn("");
    PrintLn("() = Inklination kleiner als Startbreite: nicht direkt erreichbar,");
    PrintLn("     Wert enthaelt den Ebenenwechsel als Naeherung.");
    PrintLn(StrConcat("Tiangong-Hoehe aus 92.3 min Periode: ", StrConcat(f(hoeheAusPeriode(92.3) / 1000.0, 1), " km")));
    PrintLn(StrConcat("Hubble-Periode aus 510.2 km Hoehe:  ", StrConcat(f(APeriod(AMuEarth(), ARadiusEarth() + 510200.0) / 60.0, 2), " min")));
    PrintLn(StrConcat("Hohmann LEO(400 km) -> GEO: ", f(AHohmannDv(AMuEarth(), ARadiusEarth()+400000.0, 42164000.0), 1)));
    PrintLn(StrConcat("Ebenenwechsel 28.5 Grad im GEO: ", f(APlaneChangeDv(ACircularSpeed(AMuEarth(), 42164000.0), Grad(28.5)), 1)));
    return 0;
}

Ausgabe:

Rampe         | LEO 28.5 | ISS 51.6 | Tiangong | Hubble | SSO 97.5 | GEO   (m/s ab Boden)
Kourou         | 8991 | 9111 | 9044 | 9053 | 9625 | 13070
Sriharikota    | 8991 | 9111 | 9044 | 9053 | 9625 | 13536
Wenchang       | 8991 | 9111 | 9044 | 9053 | 9625 | 13863
Starbase       | 8991 | 9111 | 9044 | 9053 | 9625 | 14219
Xichang        | 8991 | 9111 | 9044 | 9053 | 9625 | 14345
SLC-40         | (9000) | 9111 | 9044 | (9065) | 9625 | 14362
LC-39A         | (9006) | 9111 | 9044 | (9072) | 9625 | 14365
Tanegashima    | (9253) | 9111 | 9044 | (9317) | 9625 | 14465
Uchinoura      | (9371) | 9111 | 9044 | (9433) | 9625 | 14513
SLC-4E         | (9838) | 9111 | 9044 | (9897) | 9625 | 14702
Taiyuan        | (10421) | 9111 | 9044 | (10476) | 9625 | 14937
Jiuquan        | (10714) | 9111 | 9044 | (10766) | 9625 | 15055
Baikonur       | (11355) | 9111 | (9621) | (11402) | 9625 | 15311
Wostotschny    | (12221) | (9151) | (10499) | (12262) | 9625 | 15657
Plessezk       | (13726) | (10700) | (12037) | (13755) | 9625 | 16251
Andoya         | (14581) | (11594) | (12919) | (14603) | 9625 | 16585

() = Inklination kleiner als Startbreite: nicht direkt erreichbar,
     Wert enthaelt den Ebenenwechsel als Naeherung.
Tiangong-Hoehe aus 92.3 min Periode: 387.3 km
Hubble-Periode aus 510.2 km Hoehe:  94.83 min
Hohmann LEO(400 km) -> GEO: 3854.0
Ebenenwechsel 28.5 Grad im GEO: 1513.7

Teil B — die Nutzlastmatrix aus Abschnitt 3:

unit main;
import std.astro.launch;
import std.astro.orbit;
import std.math;
import std.io;
import std.string;

fn Grad(g: f64): f64 { return g * Pi() / 180.0; }
fn f(v: f64, d: int64): pchar { return FloatToStr(v, d); }

// Aufstieg auf die Zielhoehe ueber eine 200-km-Parkbahn (ADvAscentToOrbit),
// Drehgewinn aus der ZIELNEIGUNG (ARotationGainForInclination).
fn dvBoden(breiteGrad: f64, hoehe: f64, zielGrad: f64): f64 {
    var breite: f64 := Grad(breiteGrad);
    var ziel:   f64 := Grad(zielGrad);
    var rPark:  f64 := ARadiusEarth() + 200000.0;
    var r:      f64 := ARadiusEarth() + hoehe;
    // Liegt die Zielneigung unter der Startbreite, ist sie direkt nicht
    // erreichbar: dann rechnet der Aufstieg auf die kleinste erreichbare
    // Neigung, und AAzimuthPenalty schlaegt den Ebenenwechsel auf.
    var iAuf:   f64 := ziel;
    if !AInclinationReachable(breite, ziel) { iAuf := breite; }
    var gewinn: f64 := ARotationGainForInclination(AEarthRotation(), ARadiusEarth(), breite, iAuf);
    return ADvAscentToOrbit(AMuEarth(), rPark, r, 1500.0, gewinn)
         + AAzimuthPenalty(ACircularSpeed(AMuEarth(), r), breite, ziel);
}

fn dvGeo(breiteGrad: f64): f64 {
    return dvBoden(breiteGrad, 400000.0, breiteGrad)
         + AHohmannDv(AMuEarth(), ARadiusEarth() + 400000.0, 42164000.0)
         + APlaneChangeDv(ACircularSpeed(AMuEarth(), 42164000.0), Grad(breiteGrad));
}

// Nutzlast bei Mehrbedarf: Tsiolkovsky rueckwaerts auf die Nutzlast angewandt
fn nutzlast(mRefT: f64, dvRef: f64, dvZiel: f64, ispOben: f64): f64 {
    return mRefT * ExpF64(0.0 - (dvZiel - dvRef) / AExhaustSpeed(ispOben));
}

// Hoehe aus der Umlaufzeit
fn hoeheAusPeriode(minuten: f64): f64 {
    return ASemiMajorFromPeriod(AMuEarth(), minuten * 60.0) - ARadiusEarth();
}

fn rakete(name: pchar, breite: f64, mRefT: f64, ispOben: f64): void {
    var dvRef: f64 := dvBoden(breite, 400000.0, breite);
    Print(name);
    Print(" | ");  Print(f(nutzlast(mRefT, dvRef, dvBoden(breite, 400000.0, 28.5), ispOben), 1));
    Print(" | ");  Print(f(nutzlast(mRefT, dvRef, dvBoden(breite, 400000.0, 51.6), ispOben), 1));
    Print(" | ");  Print(f(nutzlast(mRefT, dvRef, dvBoden(breite, hoeheAusPeriode(92.3), 41.47), ispOben), 1));
    Print(" | ");  Print(f(nutzlast(mRefT, dvRef, dvBoden(breite, 510200.0, 28.4687), ispOben), 1));
    Print(" | ");  Print(f(nutzlast(mRefT, dvRef, dvBoden(breite, 700000.0, 97.5),  ispOben), 1));
    Print(" | ");  PrintLn(f(nutzlast(mRefT, dvRef, dvGeo(breite), ispOben), 2));
}

fn main(): int64 {
    PrintLn("Rakete/Rampe            | LEO 28.5 | ISS 51.6 | Tiangong | Hubble | SSO 97.5 |  GEO   (t)");
    rakete("Spectrum @ Andoya       ", 69.294167,  1.0, 320.0);
    rakete("Falcon 9 @ SLC-40       ", 28.5619,   22.8, 348.0);
    rakete("Ariane 64 @ Kourou      ",  5.2,      21.6, 457.0);
    rakete("Angara A5 @ Wostotschny ", 51.8846,   24.5, 359.0);
    rakete("Long March 5B @ Wenchang", 19.6145,   25.0, 442.0);
    PrintLn("");
    PrintLn(StrConcat("Referenz-dv Falcon 9 (i = Rampenbreite): ", f(dvBoden(28.5619, 400000.0, 28.5619), 0)));
    PrintLn(StrConcat("Austrittsgeschwindigkeit Merlin Vacuum:  ", f(AExhaustSpeed(348.0), 0)));
    return 0;
}

Ausgabe:

Rakete/Rampe            | LEO 28.5 | ISS 51.6 | Tiangong | Hubble | SSO 97.5 |  GEO   (t)
Spectrum @ Andoya        | 0.2 | 0.5 | 0.3 | 0.2 | 0.9 | 0.10
Falcon 9 @ SLC-40        | 22.7 | 22.0 | 22.5 | 22.3 | 18.9 | 4.73
Ariane 64 @ Kourou       | 21.3 | 20.8 | 21.1 | 21.0 | 18.5 | 8.59
Angara A5 @ Wostotschny  | 10.1 | 24.2 | 16.5 | 10.0 | 21.2 | 3.82
Long March 5B @ Wenchang | 24.8 | 24.2 | 24.5 | 24.5 | 21.5 | 8.07

Referenz-dv Falcon 9 (i = Rampenbreite): 8991
Austrittsgeschwindigkeit Merlin Vacuum:  3413

6. Was diese Seite über die Bibliothek verrät

Diese Seite hat drei Lücken in std.astro.launch aufgedeckt. Alle drei sind inzwischen geschlossen, und das Programm oben rechnet mit den neuen Funktionen statt mit Handkorrekturen:

Was weiterhin Anwenderlogik bleibt: die Nutzlastumrechnung. nutzlast() im Programm ist vier Zeilen Raketengleichung, die jede solche Auswertung neu schreiben muss.