Simulation einer Rakete: Unterschied zwischen den Versionen

Aus Physik
Zur Navigation springen Zur Suche springen
K
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 12: Zeile 12:
 
==== Datenverwaltung ====
 
==== Datenverwaltung ====
 
Parameter, die vom Benutzer gespeichert und geladen werden können, werden als Typdateien persistiert.
 
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.
+
Feste Konstanten, wie zum Beispiel die Newton'sche Gravitationskonstante γ, werden automatisch beim Ablauf des Skripts initialisiert und sind nicht veränderlich.
   
 
==== Fachkonzept ====
 
==== Fachkonzept ====
Zeile 18: Zeile 18:
   
 
=== Physikalische Probleme ===
 
=== Physikalische Probleme ===
==== Raketenstart ====
 
 
Die Startsquenz der Rakete wird mittels der Raketengleichung nach Konstantin Ziolkowski berechnet.<br>
 
Die Startsquenz der Rakete wird mittels der Raketengleichung nach Konstantin Ziolkowski berechnet.<br>
 
'''In ihrer allgemeinen Form lautet sie folgendermaßen:'''<br>
 
'''In ihrer allgemeinen Form lautet sie folgendermaßen:'''<br>
Zeile 66: Zeile 65:
 
</ul>
 
</ul>
 
=== Codeauszüge ===
 
=== Codeauszüge ===
  +
<ul>
''Folgen in Kürze...''
 
  +
<li>Lösungsfunktion für das Differentialgleichungssystem - das Herzstück der Applikation</li>
  +
<pre>
  +
%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
  +
</pre>
  +
<li>Berechnung der Schubkraft nach Raketengleichung mit Vektornormierung</li>
  +
<pre>
  +
%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
  +
</pre>
  +
<li>Berechnung der Erdanziehungskraft mit Vektornormierung</li>
  +
<pre>
  +
g = gam*me/(flugdaten.h_erde)^2 * ...
  +
[flugdaten.sx_erde/flugdaten.h_erde; flugdaten.sy_erde/flugdaten.h_erde];
  +
</pre>
  +
<li>Färbiger Plot der Flugbahn</li>
  +
<pre>
  +
%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);
  +
</pre>
  +
</ul>
  +
 
=== Screenshots ===
 
=== Screenshots ===
 
<table>
 
<table>
Zeile 73: Zeile 125:
 
<td>[[Image:raketensim gui.jpg|thumb|Grafische Benutzeroberfläche]]</td>
 
<td>[[Image:raketensim gui.jpg|thumb|Grafische Benutzeroberfläche]]</td>
 
</tr>
 
</tr>
<tr>
+
<tr valign=top>
<td>In der Abbildung auf der rechten Seite, sieht man das Ergebnis eines Erde-Mond-Erde-Fluges mit einer festgelegten Zielgeschwindigkeit von
+
<td>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.</td>
 
1150 m/s in Mondnähe.</td>
<td>[[Image:raketensim_flug1.jpg|thumb|Flug mit manuellem Bremsschub]]</td>
+
<td>[[Image:raketensim_flug1.png|thumb|Flug mit manuellem Bremsschub]]</td>
  +
</tr>
  +
<tr valign=top>
  +
<td>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.</td>
  +
<td>[[Image:raketensim_flug2.png|thumb|Flug mit automatischem Bremsschub]]</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
  +
  +
== 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.<br>
  +
[[Media:RaketenSim_18062006.zip|Download der Raketensimulation]]
   
 
== Autor ==
 
== Autor ==
gernot_k@sbox.tugraz.ac.at
+
[mailto:gernot_k@sbox.tugraz.ac.at gernot_k]

Aktuelle Version vom 3. März 2007, 10:17 Uhr

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
    
  • Berechnung der Schubkraft nach Raketengleichung mit Vektornormierung
  •     %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
    
  • Berechnung der Erdanziehungskraft mit Vektornormierung
  •     g = gam*me/(flugdaten.h_erde)^2 * ...
            [flugdaten.sx_erde/flugdaten.h_erde; flugdaten.sy_erde/flugdaten.h_erde];
    
  • Färbiger Plot der Flugbahn
  •     %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
Grafische Benutzeroberfläche
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
Flug mit manuellem Bremsschub
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
Flug mit automatischem Bremsschub

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

Autor

gernot_k