Simulation einer Rakete
Inhaltsverzeichnis
Projektdefinition
Vision
Die Flugbahn einer auf der Erde startenden Rakete soll unter Berücksichtigung des Treibstoffverbrauchs, der Eigendrehung der Rakete, den Anziehungskräften zwischen Erde und Mond und so weiter, berechnet und angezeigt werden.
Strategie
Mittels einer geeigneten Programmierumgebung soll eine grafische Benutzeroberfläche (GUI) erstellt werden, über die Benutzerdaten eingelesen und an eine Berechnungsroutine weitergeleitet werden. Nach den Berechnungen soll die Flugbahn der Rakete mit diversen Daten (Geschwindigkeiten, Höhe, ...) angezeigt werden.
Projektentwurf
Programmierung
Architektur
Die verwendete Programmierumgebung ist Matlab, da Probleme wie grafische Anzeigen, Differentialgleichungen, ... in Matlab mittels bereits bestehenden Funktionen gelöst werden können.
Datenverwaltung
Parameter, die vom Benutzer gespeichert und geladen werden können, werden als Typdateien persistiert. Feste Konstanten, wie zum Beispiel die Newton'sche Gravitationskonstante γ, werden automatisch beim Ablauf des Skripts initialisiert und sind nicht veränderlich.
Fachkonzept
Algorithmen, die öfter als einmal verwendet werden, werden als eigene Funktionen mit geeigneten Parametern ausgelagert, um Fehleranfälligkeit zu verringern bzw. die Übersichtlichkeit des Programms zu erhöhen.
Physikalische Probleme
Die Startsquenz der Rakete wird mittels der Raketengleichung nach Konstantin Ziolkowski berechnet.
In ihrer allgemeinen Form lautet sie folgendermaßen:
[math]F = \dot{p} = m \cdot \frac{dv}{dt} + u \cdot \frac{dm}{dt} = 0[/math]
[math]\mbox{m...Masse der Rakete}[/math]
[math]\mbox{u...Austroemgeschwindigkeit der Gase}[/math]
Für die Erd- bzw. Mondanziehungskräfte wird die Newton'sche Gravitationsformel verwendet:
[math]F = \gamma \cdot \frac{m1 \cdot m2}{r^2}[/math]
[math]\gamma \mbox{...Gravitationskonstante}[/math]
[math]\mbox{m1...Masse des Planeten}[/math]
[math]\mbox{m2...Masse der Rakete}[/math]
[math]\mbox{r...Abstand Rakete zu Planetenmittelpunkt}[/math]
Schließlich ergibt sich durch Ausrechnen der Beschleunigungen für die Rakete folgende vektorielle Differentialgleichung:
- Zeitabhängigkeit: Schubbeschleunigung, da die Rakete während dem Treibstoffausstoß zeitlich linear an Masse verliert.
- Wegabhängigkeit: Gravitationskräfte, da diese abhängig vom Abstand der Körper sind.
[math]\vec a = \vec a_s(t) - \vec a_e(h) - \vec a_m(h)[/math]
[math]a_s \mbox{...Schubbeschleunigung}[/math]
[math]a_e \mbox{...Erdbeschleunigung}[/math]
[math]a_m \mbox{...Mondbeschleunigung}[/math]
Um das Gravitationsfeld der Erde zu verlassen benötigt ein Objekt mindestens eine bestimmte Geschwindigkeit, die sich II. Kosmische Geschwindigkeit nennt. Diese beträgt für die Erde annähernd 11,2 km/s.
Beim Vorbeiflug am Mond ist die Rakete deshalb aber viel zu schnell, um durch die Mondanziehungskraft wieder zurückgeschleudert zu werden. Aus diesem Grund ist ein Bremsmanöver in Mondnähe durchzuführen.
Der Benutzer kann frei wählen, ob er die Parameter für den Bremsschub selbst eingeben möchte (Mondabstand und Zielgeschwindigkeit) oder ob das Programm eine automatische Geschwindigkeitskorrektur in Mondnähe vornehmen soll.
Um in der Mondumlaufbahn zu bleiben ist die sogenannte I. Kosmische Geschwindigkeit einzuhalten. Diese errechnet sich durch Gleichsetzen der kinetischen mit der potentiellen Energie.
Die Berechnung für die I. Kosmische Geschwindigkeit ergibt:
[math]v_1 = \sqrt{\gamma \cdot \frac{m}{r}}[/math]
[math]\gamma \mbox{...Gravitationskonstante}[/math]
[math]\mbox{m...Masse des Mondes}[/math]
[math]\mbox{r...Radius der Umlaufbahn}[/math]
Projektrealisierung
Programmierung
- Wie bereits erwähnt wurde das Problem mittels Matlab 7.2 gelöst.
- Zur Gestaltung der grafischen Benutzeroberfläche wurde das Matlab-Tool GUIDE verwendet.
- Die Darstellung der Flugbahn der Rakete erfolgt mittels einem patch() - Befehl, um die Farbe der gezeichneten Linie abhängig von der Geschwindigkeit der Rakete darstellen zu können. Für die Zeichnung von Erde und Mond genügt der Befehl fill(), welcher einen Polygonzug erzeugt und danach mit einer Farbe auffüllt.
Physikalische Probleme
- Die oben vorgestellte Differentialgleichung musste in die x- und y-Anteile der Vektoren zerlegt werden, um ein Differentialgleichungssystem zu erhalten.
- Zur numerischen Lösung der Differentialgleichung wurde der ode45-Solver herangezogen, da dieser ein gutes Verhältnis zwischen Genauigkeit und Berechnungsgeschwindigkeit besitzt.
- Die Anfangswerte für den Solver werden teilweise vom Benutzer selbst eingegeben, da dieser die Startposition auf der Erde der Rakete bestimmen kann.
Codeauszüge
- Lösungsfunktion für das Differentialgleichungssystem - das Herzstück der Applikation
%Differentialgleichungssystem %Erklaerung der verwendeten Variablen y %y(1): Weg x-Richtung %y(2): Geschwindigkeit x-Richtung %y(3): Weg y-Richtung %y(4): Geschwindigkeit y-Richtung function [fx] = posx(t,y) %Vektoradditionen, Zerlegungen, ... flugdaten = ermittleFlugdaten(y, ma); %Schubbeschleunigung a = Schub(t, flugdaten); %Erdbeschleunigung ge = Erdanziehung(flugdaten); %Mondbeschleunigung gm = Mondanziehung(flugdaten); %Loesungsvektor in der Form %[1. Ableitung (Geschwindigkeit); 2. Ableitung (Beschleunigung)] dxdt = [y(2); a(1) - ge(1) - gm(1)]; dydt = [y(4); a(2) - ge(2) - gm(2)]; %Rueckgabe fx = [dxdt; dydt]; end
%Ist nocht Treibstoff vorhanden? if (t <= rakete.t_brennschluss) a = rakete.u*rakete.dm/(rakete.m0 - rakete.dm*t) * ... [cos(phi_start + phi_step*t); sin(phi_start + phi_step*t)]; end
g = gam*me/(flugdaten.h_erde)^2 * ... [flugdaten.sx_erde/flugdaten.h_erde; flugdaten.sy_erde/flugdaten.h_erde];
%Raketenflugbahn x_patch = [s_x(1:end-1); s_x(2:end)]; y_patch = [s_y(1:end-1); s_y(2:end)]; v_patch = [v_res(1:end-1); v_res(2:end)] ./ max(v_res); patch(x_patch, y_patch, v_patch, 'EdgeColor', 'interp', 'LineWidth', 1);
Screenshots
Über die grafische Benutzeroberfläche können verschiedene Startparameter angegeben und Daten für den Bremsschub in Mondnähe festgelegt werden. Weiters ist es möglich sämtliche Eingabeparameter zu Speichern bzw. zu Laden. | Fehler beim Erstellen des Vorschaubildes: Datei fehlt |
In der Abbildung auf der rechten Seite sieht man das Ergebnis eines Erde-Mond-Erde-Fluges mit einer festgelegten Zielgeschwindigkeit von 1150 m/s in Mondnähe. | Fehler beim Erstellen des Vorschaubildes: Datei fehlt |
Hier noch das Ergebnis von einem Flug mit automatischem Bremsschub. Dabei wird auf die I. Kosmische Geschwindigkeit des Mondes in Abhängigkeit der jeweiligen Höhe gebremst, wenn die Rakete die senkrechte Achse des Mondes schneidet. | Fehler beim Erstellen des Vorschaubildes: Datei fehlt |
Download
Das Projekt liegt als Source-Code in einem ZIP-Archiv vor. Um das Programm zu starten, muss die Datei gui.m ausgeführt werden.
Download der Raketensimulation