Eine kurze Einführung in unsere Flugsimulations-Software

Veröffentlicht am 15.09.2020
Um sicherzustellen, dass jeder Raketenstart so erfolgreich wie möglich verläuft, müssen wir bereits von vornherein überprüfen, ob unsere Flugsoftware mit Herausforderungen wie ungenauen Sensorwerten, Windstößen, oder Telemetrieausfällen zurechtkommt. Dafür benutzen wir die Funktionen einer selbstentwickelten Simulationssoftware, die wir hier gerne kurz vorstellen möchten.

Eine historische Perspektive

Am 04.06.1996 endete der erste Flug der europäischen Ariane 5-Rakete in einem katastrophalen Fehlschlag: Rund 30 Sekunden nach dem Start drehte sie sich plötzlich vom geplanten Kurs ab, wodruch das Hüllenmaterial unter der immensen Belastung der aerodynamischen Kräfte kollabierte. Die Rakete zerbrach in mehrere Teile, explodierte, und zerstörte schätzungsweise 370 Millionen Euro an Flughardware.

Einige Tage nach dem Vorfall deckte eine Untersuchung auf, dass der Hauptgrund für die Probleme ein ungeschütztes Stück Code im Flugcomputer war, von den angenommen wurde, es sei komplett sicher. Leider stützte sich diese Annahme auf ähnlichen Code der älteren Ariane 4-Rakete, und es wurden keine weiteren Tests mit der vorhergesagten Flugbahn der Ariane 5 durchgeführt.

Ein Beispielergebnis aus einer Simulation mit dem Ziel, einige grundlegende Flugparameter zu berechnen Ein Beispielergebnis aus einer Simulation mit dem Ziel, einige grundlegende Flugparameter zu berechnen

Warum wir eine Flugsimulations-Software benötigen

Auch wenn wir keine Raketen in voller Größe bauen, führt doch jeder fehlgeschlagene Start zu finanziellen Schäden und einer Menge Arbeit. Besonders wenn das Problem durch einen kleinen Fehler hervorgerufen wird, der einfach während der Tests übersehen wurde, ist das besonders ärgerlich. Aber wie findet man Fehler, die normalerweise nur während des Fluges auftreten können? Ganz einfach, indem man die Rakete und ihre Umgebung simuliert! Um zu verstehen, wie die Simulation intern funktioniert, empfehlen wir entweder einen Blick auf den letzten Absatz dieses Artikels, oder auf den Code der Simulation auf GitHub (https://github.com/Atmoventus/atmoventus-rocketsim) zu werfen. Davor möchten wir aber kurz die wichtigsten Features der Software vorstellen:

Abschätzen von Flugparametern

Eine der interessantesten Anwendungen einer Software zur Flugbahnvorhersage ist grob zu wissen, wie hoch und schnell die Rakete maximal fliegt. Diese Informationen helfen enorm bei der Auswahl von passenden Materialien, sodass die Flughardware den hohen Belastungen während des Fluges standhalten kann.

Ein Beispiel für Windprofile, die von ADM-Aeolus gemessen werden (Bild: ESA/VirES) Ein Beispiel für Windprofile, die von ADM-Aeolus gemessen werden (Bild: ESA/VirES)

Windsimulation

Wind ist einer der wichtigsten Faktoren während des Fluges einer Rakete. Er sorgt dafür, dass die Rakete überhaupt erst von einer perfekten Flugbahn und Ausrichtung abweicht, und führt im schlimmsten Fall zu unkontrollierten Oszillationen, Instabilitäten, einem niedrigeren Apogäum, oder dazu dass die Rakete am Fallschirm weit vom vorhergesehenen Landeplatz weggetragen wird. Durch die Simulation von Wind können wir hingegen optimieren, wann genau welche Fallschirme geöffnet werden sollen, wie schnell unser Stabilisierungssystem reagieren soll, und wo die Rakete landet. Aber wo findet man passende Daten über Wind? Reguläre Wettervorhersagen enthalten nur die Windgeschwindigkeiten direkt über dem Boden, Lizenzen für globale Wettermodelle sind oft kostspielig und enthalten teilweise nur Windgeschwindigkeiten auf ca. 5 verschiedenen Höhen, und Live-Daten von offenen Wetterstationen sind nicht flächendeckend genug verteilt. Glücklicherweise hat die ESA Ende 2018 den Satelliten ADM-Aeolus, benannt nach dem griechischen Gott für Wind, gestartet. Er benutzt einen Lidar-Sensor um mithilfe der Dopplerverschiebung die Geschwindigkeit von Partikeln in der Atmosphäre auf bis zu 30 km Höhe zu messen. Wir können diese Information nutzen, um realistische Windprofile an spezifischen Orten zu generieren, an denen wir gerne einen Start simulieren würden. Wir können dabei sogar die Zeit anpassen, um mögliche Effekte von verschiedenen Jahres- oder Tageszeiten zu betrachten, wenn Daten für diesen Zeitraum verfügbar sind.

Testen unseres Stabilisierungsalgorithmus

Um die Abstimmung unserer Stabilisierungsalgorithmen zu vereinfachen, kann die Simulation den genauen Flugcode enthalten, der auch auf unserer Rakete ausgeführt wird. Dieser Code greift dann auf simulierte Sensoren und Motoren zu und versucht, Steuerungsentscheidungen zu treffen, die wiederum die simulierte Flugbahn beeinflussen. Auf diese Weise haben wir ein vollständig geschlossenes System, in dem wir unsere Software testen und optimieren können, bevor wir einen Flug in der realen Welt ausprobieren. Wir können sogar verschiedene Arten von Regelalgorithmen ausprobieren, die von rein mathematischen Ansätzen bis hin zu Rückkopplungsschleifen oder sogar Reinforcement Learning reichen.

Die Rakete kippt in einer 3D-Flugvisualisierung über Die Rakete kippt in einer 3D-Flugvisualisierung über

Generieren von Visualisierungen

So hilfreich Rohdaten manchmal auch sein mögen, ist es trotzdem immer interessant, die Rakete fliegen zu sehen. Wir können Flugbahnen visualisieren, indem wir Flugdaten aus der Simulation in eine 3D-Modellierungssoftware oder sogar in eine Videospiel-Engine exportieren, um einen genaueren Blick auf das Verhalten der Rakete zu werfen.

Emulieren von ungenauer Hardware

Der Hauptprozessor in unseren Raketen ist auf viele verschiedene Sensoren und Aktoren angewiesen, um Einblick in seine Umgebung zu gewinnen und auf Veränderungen zu reagieren: Beschleunigungsmesser, Barometer, Gyroskope, Funkmodule, Motoren usw. Die Simulationssoftware kann Daten aus der Simulation extrahieren, eine vordefinierte Menge an Schwankungen, Offsets und Ungenauigkeiten hinzufügen und diese verarbeiteten Daten schließlich an unsere Flugsoftware weitergeben. Auf diese Weise können wir sicherstellen, dass unser System mit den Problemen umgehen kann, die Sensoren in der realen Welt verursachen, so dass wir es nicht einfach auf die Zusammenarbeit mit perfekten Werten optimieren. Dasselbe ist auch für Aktoren, also Motoren oder Funkmodule, möglich. Die Simulation könnte beispielsweise zufällige Prozentsätze der Funkkommunikation verhindern, oder die Motoren könnten etwas langsamer oder schneller laufen als vorgesehen. Auf diese Weise können wir Erfahrungen sammeln und ein robustes System aufbauen, das den Herausforderungen der realen Welt gewachsen ist.

Wie die Simulation funktioniert

Um herauszufinden, was eine Rakete dazu bringt, sich so charakteristisch zu bewegen, müssen wir einige grundlegende Kräfte berücksichtigen: Auftrieb, Luftwiderstand, Schub und die Gravitationskraft. Während einige andere Einflüsse wie der Magnus-Effekt oder der Coriolis-Effekt ebenfalls die Art und Weise verändern, wie sich eine Rakete verhält, können sie in unserem Fall einfach ignoriert werden, insbesondere wegen ihrer geringen Stärke.

Beginnen wir mit der Gravitationskraft: Sie beschreibt die Anziehung zwischen zwei Massen und kann mithilfe des Newtonschen Gravitationsgesetzes berechnet werden. Drei Variablen beeinflussen ihre Stärke: die erste Masse, die zweite Masse und der Abstand zwischen den Schwerpunkten der Massen. In unserem Fall betrachten wir nur die Gravitationskraft zwischen der Erde und unserer Rakete, da die Anziehung auf andere Planeten oder Sterne im Vergleich dazu vernachlässigbar ist. Die erste Masse ist also die ungefähre Masse der Erde, während die zweite Masse die Masse unserer Rakete ist, die sich mit der Zeit ändert, wenn wir langsam unseren gesamten Treibstoff verbrennen. Die Ermittlung des Abstands zwischen den beiden Objekten ist ebenfalls recht simpel, da wir einfach die Summe aus der ungefähren Entfernung vom Erdkern zu unserer Startrampe und der Höhe unserer Rakete während des Fluges bilden können.

Es folgt der Schub: Er wird durch einen oder mehrere Raketenmotoren erzeugt, indem Treibstoff mit hoher Geschwindigkeit ausgestoßen wird, um die Rakete zu beschleunigen. Die Größe dieser Kraft kann entweder berechnet oder gemessen werden, aber in unserem Fall stellt der Hersteller unserer Raketentriebwerke bereits Diagramme zur Verfügung, aus denen die Stärke der im Laufe der Zeit erzeugten Kraft hervorgeht. Die Stärke ist jedoch nicht das einzige, was in Bezug auf den Schub interessant ist. Da sich unsere Triebwerke in einem steuerbaren Gimbal befinden, können wir die Richtung des Schubs ändern, um unsere Flugbahn und Ausrichtung aktiv zu steuern. Dies ist möglich, weil wir immer dann ein Drehmoment um den Massenschwerpunkt der Rakete erzeugen, wenn der Gimbal angewinkelt ist.

Auftrieb und Luftwiderstand sind die bei weitem interessantesten Kräfte, die während des Fluges wirken: Der Luftwiderstand wirkt in Richtung der Luftströmung relativ zur Rakete, während der Auftrieb senkrecht zum Luftwiderstand wirkt. Beide Kräfte zusammen bewirken, dass die Rakete während des Fluges abgebremst wird und sich dreht (daher erzeugen diese aerodynamischen Kräfte auch ein Drehmoment um den Massenmittelpunkt der Rakete). Ihre Stärke wird mit Hilfe der Luftwiderstands- und Auftriebsgleichung berechnet, die von der Geschwindigkeit der Luftströmung, dem Luftdruck und einem Koeffizienten abhängt, der spezifisch für das Raketendesign, den Angriffswinkel und die Geschwindigkeit der Rakete ist. Dieser Koeffizient wird normalerweise in einem Windkanal oder durch eine Fluiddynamiksoftware bestimmt. Da wir derzeit keinen Zugang zu einem Windkanal haben, verwenden wir den letzteren Ansatz.

Jetzt kennen wir die wichtigsten Kräfte und Drehmomente, die während des Fluges auf unsere Rakete wirken, aber wie können wir diese in eine Position und eine Orientierung umsetzen? Indem wir die Masse und das Trägheitsmoment verwenden, können wir diese Werte in eine lineare und eine Winkelbeschleunigung umwandeln, die die Ableitungen der linearen und der Winkelgeschwindigkeit in Bezug auf die Zeit sind, die wiederum die Ableitungen der Position und der Orientierung in Bezug auf die Zeit sind. Es gibt also einen Weg, von einem Ende zum anderen zu gelangen, aber da alle Kräfte und Momente eng gekoppelt und voneinander abhängig sind, ist eine analytische Lösung dieses Problems nahezu unmöglich. Glücklicherweise gibt es eine Fülle von Möglichkeiten, diese Art von Problemen iterativ zu lösen: Wir verwenden die Runge-Kutta-Methode vierter Ordnung, um die resultierenden Differenzialgleichungen zu lösen. Diese Methode berechnet die Position und Orientierung, indem kleine Teile des Fluges in einem bestimmten Muster simuliert werden, was dazu führt, dass der Gesamtfehler der simulierten Flugbahn proportional zu dem verwendeten Zeitschritt hoch vier ist. In der Praxis bedeutet dies, dass ein Ergebnis mit einer Zeitschrittgröße von 0,25s etwa sechzehnmal so genau ist wie eine Simulation mit einem Zeitschritt von 0,5s, während die Ausführung nur doppelt so lange dauert.

Alles in allem bietet uns diese Software eine unglaubliche Flexibilität, wobei sie sogar schnell genug ist, um beispielsweise eine automatische Parameterabstimmung zu ermöglichen, wenn wir sie brauchen. Auf diese Weise können wir sicher sein, dass viele Fehlerquellen während des Fluges bereits ausgiebig getestet wurden, bevor wir unsere Motoren überhaupt starten, sodass wir schnelle, effiziente und sichere Flugstabilisierungssysteme entwickeln können.