←  Übersicht

Wasserrakete · Flugzustandsautomat · Fallschirmauslösung

Woher die Rakete weiß, was gerade passiert

Ein Fallschirm zur falschen Zeit ist schlimmer als keiner. Zu früh zerreißt er, zu spät nützt er nichts. Also muss die Rakete selbst erkennen, in welcher Flugphase sie ist — ohne Uhr, ohne Fernsteuerung, in einer Sekunde.

Kapitel 1

Warum nicht einfach ein Timer?

Der naheliegende Gedanke: Beim Start eine Stoppuhr laufen lassen und nach, sagen wir, 4,2 Sekunden den Fallschirm auswerfen. Das funktioniert erstaunlich oft — und genau darin liegt die Gefahr.

Denn wovon hängt die Flugzeit ab? Vom Wasserdruck, von der Wassermenge, von der Düse, vom Gewicht, vom Wind, von der Temperatur. Ein Timer, der bei 6 bar richtig liegt, liegt bei 5 bar daneben. Er misst nicht, was die Rakete tut — er misst nur, wie lange man gewartet hat.

Der Grundgedanke

Ein Zustandsautomat dreht das um. Statt Zeit abzuzählen, führt die Rakete Buch darüber, in welcher Phase sie gerade ist — und wechselt erst dann in die nächste, wenn die Sensoren das auch hergeben.

Sie fragt nicht „wie lange ist es her?“, sondern „drückt es mich noch nach oben?“, „steige ich noch?“, „falle ich schon?“. Das sind Fragen, die Sensoren beantworten können.

Kapitel 2

Die neun Zustände

Die Rakete ist immer in genau einem Zustand — nie in zweien, nie in keinem. Das klingt banal, ist aber die eigentliche Stärke: Man kann für jeden Zustand einzeln aufschreiben, was erlaubt ist und was nicht, und keine Kombination fällt durchs Raster.

IDLEuntätig
Arm-
Schalter
ARMEDscharf
Schub
ASCENTSchubphase
Brenn-
schluss
COASTINGSteigflug
Steigen
endet
APOGEEScheitel
Sinken
DESCENTSinkflug
Ruhe
LANDEDgelandet
Nur zwei Rückwege: ARMED → IDLE per Entschärfen, und jederzeit → ERROR bei einer Störung. Aus einem Flugzustand geht es nie zurück.
0
IDLE — untätig
Der Flugrechner läuft, misst und funkt, aber nichts kann ausgelöst werden. Der Boden-Nullpunkt für die Höhe wird laufend neu gesetzt.
1
ARMED — scharf
Bereit zum Start. Die Auslöselogik ist ab hier grundsätzlich freigegeben, aber sämtliche weiteren Sperren gelten weiterhin.
2
POWERED_ASCENT — Schubphase
Das Wasser wird ausgestoßen, die Rakete beschleunigt.
Erkennung: |Beschleunigung| − 9,81 > 15 m/s², 3 Zyklen lang
3
COASTING — Steigflug ohne Antrieb
Das Wasser ist raus. Die Rakete steigt weiter, wird aber langsamer.
Erkennung: |Beschleunigung| < 2 m/s², 5 Zyklen
4
APOGEE — Scheitelpunkt
Der höchste Punkt. Hier ist die Rakete am langsamsten — der beste Moment für einen Fallschirm, weil die Kräfte am kleinsten sind.
Erkennung: Steiggeschwindigkeit < 0,5 m/s, 3 Zyklen
5
DROGUE_DESCENT — Sinkflug
Die Rakete fällt.
Erkennung: Geschwindigkeit < −1 m/s, 5 Zyklen — oder 3000 ms Zeitablauf
6
MAIN_DESCENT — zweite Sinkphase
Bei großen Raketen der Hauptschirm. Bei dieser Wasserrakete gibt es nur einen Schirm, der Zustand bleibt aber erhalten.
7
LANDED — gelandet
Alles steht still. Aufzeichnung wird gedrosselt, Funk schaltet auf Sparbetrieb.
Erkennung: Beschleunigungsschwankung < 0,5 m/s² und Höhenänderung < 0,2 m, 10 Zyklen
8
ERROR — Störung
Etwas ist grundlegend falsch. Nichts wird ausgelöst.

Warum überall „x Zyklen lang“?

Kein einzelner Messwert löst je einen Wechsel aus. Die Bedingung muss mehrere Male hintereinander erfüllt sein — man nennt das Entprellen.

Der Grund ist praktisch: Ein Sensor liefert ab und zu Unsinn. Ein Stoß gegen das Rohr, eine Störung auf der Datenleitung, ein einzelner Ausreißer. Würde ein einziger Wert genügen, könnte ein Wackler auf der Rampe „Start“ bedeuten. Bei 100 Messungen pro Sekunde kosten 3 Zyklen nur 30 Millisekunden — für einen Menschen nichts, für einen Störimpuls aber unmöglich zu überstehen.

Der Fall, der ohne Notausgang hängenbliebe

Der Übergang APOGEE → DROGUE_DESCENT hat zusätzlich einen Zeitablauf von 3 Sekunden. Warum?

Der normale Weg ist „ich sinke messbar“. Wenn das Barometer aber gerade in diesem Moment spinnt oder die Rakete im Scheitel merkwürdig ruhig steht, könnte diese Bedingung nie eintreten — und die Rakete bliebe für immer in APOGEE hängen, ohne je einen Fallschirm auszuwerfen.

Der Zeitablauf ist das Sicherheitsnetz: Spätestens 3 Sekunden nach dem Scheitelpunkt geht es weiter, auch ohne Sensorbestätigung. Hier ist ein Timer richtig — nicht als Hauptweg, sondern als Rückfallebene für den Fall, dass der Hauptweg schweigt.

Kapitel 3

Die Sperrkette: sechs Bedingungen, alle müssen stimmen

Der Zustand allein löst nichts aus. Bevor auch nur gedacht wird, einen Fallschirm auszuwerfen, muss eine ganze Kette von Bedingungen erfüllt sein. Reißt eine, passiert nichts.

1
Flugzustand weit genug
Vor ARMED wird grundsätzlich nichts ausgelöst.
2
Arm-Schalter physisch betätigt
Ein echter Schalter in der 9-V-Zündleitung. Kein Funkbefehl kann ihn ersetzen.
3
Durchgang der Zündleitung geprüft
Ist die Zündpille überhaupt angeschlossen?
4
Sensoren melden sich gesund
Barometer und Beschleunigungssensor müssen in diesem Zyklus gültige Werte geliefert haben.
5
Nicht unterhalb der Sperrhöhe
Ganz knapp über dem Boden wird nie ausgelöst — dort richtet ein Schirm nur Schaden an.
6
Kanal noch nicht ausgelöst
Eine Einmal-Sperre pro Kanal. Zweimal zünden gibt es nicht.

Die wichtigste Entwurfsentscheidung des ganzen Projekts

Die Sperrkette benutzt ausschließlich die rohen Sensorwerte — niemals die schön gefilterten Werte aus dem Navigationsfilter.

Das wirkt zunächst falsch: Der gefilterte Wert ist doch genauer? Ja — solange der Filter funktioniert. Aber ein Filter ist ein Programm mit eigenen Fehlern, und wenn er sich irrt, irrt er sich oft still und überzeugt.

Wie berechtigt diese Vorsicht war, hat sich am 29. August 2026 gezeigt: Der Navigationsfilter behauptete nach 53 Minuten, die Rakete befinde sich 1,26 Milliarden Meter entfernt und bewege sich mit 1,3 Millionen Metern pro Sekunde. Hätte die Auslöselogik diesem Wert vertraut, hätte sie eine völlig unsinnige Höhe für ihre Entscheidungen benutzt. Weil sie es nicht tut, war der Vorfall eine Kuriosität statt eines Unfalls.

Das Prinzip dahinter, allgemein: Eine sicherheitsrelevante Entscheidung darf nicht von etwas abhängen, das kompliziert genug ist, um still falsch zu sein.

Was heute wirklich passiert

Reine Logik, keine Pyrotechnik

Es existiert noch keine Zündelektronik. Der Flugrechner berechnet jeden Zyklus, ob er auslösen würde, und funkt das als Merker mit — aber es wird kein einziger Ausgang geschaltet. In 2,5 Stunden Dauerlauf gab es dabei null Verletzungen der Sperrkette.

Das ist eine bequeme Art, eine Sicherheitslogik zu erproben: Man kann sie im Flug beobachten, ohne dass ein Fehler etwas anrichtet.

Kapitel 4

Ein Schirm, zwei Zündungen

Große Raketen werfen zwei Fallschirme: einen kleinen Bremsschirm am Scheitelpunkt und den großen Hauptschirm erst kurz über dem Boden. So treibt die Rakete nicht kilometerweit ab.

Eine Wasserrakete fliegt dafür nicht hoch genug — zwischen 20 und 100 Metern ist kein Platz für zwei sinnvoll getrennte Auslösehöhen. Die zwei Zündkanäle werden deshalb anders genutzt:

BetriebsartKanal 1Kanal 2gedacht für
TWO_STAGE_ALTITUDE Bremsschirm, hoch Hauptschirm, tief große Raketen — vorhanden, aber nicht aktiv
REDUNDANT_TIMED Schirm auswerfen dieselbe Ladung 1,5 s später nochmal zünden diese Rakete — Kanal 2 ist die Reserve, falls die erste Ladung versagt

Beide Betriebsarten bleiben im Code. Die nicht genutzte wird nicht gelöscht — sie kostet nichts und wäre bei einer größeren Rakete wieder die richtige.

Ein offener Widerspruch, der ausdrücklich notiert ist

In der Betriebsart TWO_STAGE_ALTITUDE steht die Auslösehöhe für Kanal 2 bei 100 m, die für Kanal 1 bei 20 m. Kanal 2 wird aber erst geprüft, nachdem Kanal 1 ausgelöst hat — also unterhalb von 20 m. Damit ist die 100-m-Bedingung immer schon erfüllt und beide würden praktisch gleichzeitig feuern, statt gestaffelt.

Das steht so als Warnung im Quelltext. Diese Betriebsart ist derzeit nicht aktiv, und der Widerspruch muss geklärt werden, bevor sie je für einen echten Flug gewählt wird. Ein bekannter Fehler mit Notiz ist deutlich besser als ein unbekannter.

Kapitel 5

Wie man so etwas testet, ohne zu fliegen

Hier steckt ein echtes Problem: Die Zustandsmaschine soll Ereignisse erkennen, die es auf dem Schreibtisch nicht gibt. Man kann eine Rakete nicht auf Kommando in den Scheitelpunkt bringen.

Erfundene Sensordaten, echter Code

Die Lösung: Dem Flugrechner werden beim Start erfundene Messwerte gefüttert, die einen kompletten Flug nachbilden — Schub, Brennschluss, Scheitelpunkt, Sinkflug, Landung. Die Zustandsmaschine merkt davon nichts; sie sieht Zahlen und reagiert. Der Code, der dabei läuft, ist derselbe, der auch fliegt.

Der Trick mit dem zweiten Test

Der Übergang mit dem 3-Sekunden-Zeitablauf hat ein Testproblem: Beim nachgebildeten Flug greift immer der normale Weg zuerst — das Sinken wird ja sauber erkannt. Der Zeitablauf wird nie ausgelöst und bliebe damit ungetestet.

Deshalb gibt es einen zweiten, eigenen Test, der genau das Gegenteil tut: Er simuliert eine Rakete, die im Scheitelpunkt einfach hängenbleibt, und prüft, ob das Sicherheitsnetz greift. Ein Sicherheitsnetz, das nie einzeln geprüft wurde, ist kein Sicherheitsnetz — man weiß dann nur, dass man es nicht gebraucht hat.

Ein Test, der nur bestehen kann, beweist nichts

Am 29. August 2026 wurde eine Sicherheitsfunktion ergänzt: Entschärfen per Funk. Dabei fiel auf, dass die Funktion disarm() die Rakete bedingungslos zurück nach IDLE versetzte — also auch mitten im Flug. Das hätte die Rakete aus ihrer Flugsequenz geworfen: keine Scheitelpunkterkennung mehr, keine Auslösung, kein Fallschirm.

Der Fehler wurde behoben und ein Test dafür geschrieben. Entscheidend war aber der nächste Schritt: Der Test wurde gegen die kaputte Version laufen gelassen, um zu prüfen, ob er überhaupt durchfällt. Tat er. Erst damit war er ein Beleg und nicht nur eine grüne Zeile.

Prüfung auf der HardwareErgebnis
Entschärfen aus ARMED wird angenommenOK
Entschärfen aus IDLE gilt als Erfolg (schon sicher)OK
Entschärfen im Flug wird verweigertOK
Flugzustand bleibt dabei unverändertOK
Vollständiger Flug: alle acht Phasen in richtiger ReihenfolgeOK
Zeitablauf-Rückfallebene greift eigenständigOK
Sperrkette: 0 Verletzungen in 2,5 h DauerlaufOK
Kapitel 6

Warum es kein Scharfschalten per Funk gibt

Die Bodenstation kann die Rakete per Funk entschärfen, aber nicht scharfschalten. Das ist kein Versehen und keine unfertige Funktion — es ist eine ausdrücklich festgehaltene Entscheidung.

Die Asymmetrie

Entschärfen macht das System sicherer. Scharfschalten macht es gefährlicher. Deshalb dürfen die beiden nicht gleich behandelt werden, obwohl sie technisch fast identisch wären.

Ein Funkbefehl zum Scharfschalten würde eine Sicherheitsebene aushebeln, die es aus gutem Grund gibt: Störungen auf dem Funkkanal, ein falsch adressiertes Gerät, und vor allem das Fehlen jeder Prüfung, ob überhaupt ein Mensch bei der Rakete steht. Ein physischer Schalter beantwortet all das von selbst.

In der Luft- und Raumfahrt ist genau das üblich: Sichern aus der Ferne ist erlaubt, Scharfschalten nicht.

Damit die Entscheidung nicht irgendwann stillschweigend erodiert, steht sie an drei Stellen: im Protokolldokument mit Datum und Begründung, als Kommentar im Quelltext — und als Test, der ausdrücklich prüft, dass die Befehle CMD_ARM und CMD_FIRE nicht existieren. Ein späteres Hinzufügen bricht diesen Test und erzwingt damit eine bewusste Entscheidung statt einer beiläufigen.

Beim Einbau des Entschärfens fiel übrigens auf, dass es zunächst gar nicht funktionieren konnte: Der Funkempfang war im Zustand ARMED abgeschaltet — also ausgerechnet dort, wo der Befehl einen Sinn hat. Die Funktion wäre reine Zierde gewesen. Behoben, und auf der Hardware bestätigt: Befehl abgesetzt, Antwort nach 0,36 Sekunden, Rakete in IDLE, und sie schaltet sich auch nicht von selbst wieder scharf.

Kapitel 7

Was noch offen ist

  • Der Arm-Schalter ist noch nicht verbaut. Derzeit schaltet sich der Flugrechner 15 Sekunden nach dem Einschalten selbst scharf — ein Behelf für Bodentests, der vor einem echten Flug durch den physischen Schalter ersetzt werden muss.
  • Es gibt keine Zündelektronik. Die gesamte Auslöselogik ist bisher reine Rechnung.
  • Alle Schwellwerte sind vorläufig. 15 m/s² für den Start, 20 m für die Auslösung, 1,5 s für die Reservezündung — plausibel gewählt, aber keiner davon an einem echten Flug überprüft. Sie stehen alle an einer Stelle in flight_config.hpp, damit sie nach dem ersten Flug gemeinsam nachgezogen werden können.
  • Der Widerspruch bei den Auslösehöhen in der nicht genutzten Betriebsart (Kapitel 4) muss geklärt werden, bevor sie je gewählt wird.

Der rote Faden durch das ganze Kapitel: Fast alles ist am Schreibtisch belegt und nichts im Flug. Ein Test im Ruhezustand kann eine gute Zustandsmaschine nicht von einer unterscheiden, die einfach nie den Zustand wechselt.

Anhang

Begriffe

Zustandsautomat
Ein Programm, das immer in genau einem von mehreren festgelegten Zuständen ist und nur über klar definierte Bedingungen wechselt. Der Vorteil: Man kann jeden Zustand einzeln durchdenken.
Entprellen
Eine Bedingung muss mehrere Messungen hintereinander erfüllt sein, bevor sie zählt. Schützt gegen einzelne Ausreißer.
Sperrkette (Interlock)
Eine Reihe von Bedingungen, die alle erfüllt sein müssen. Eine einzige nicht erfüllte Bedingung verhindert die Auslösung.
Scheitelpunkt (Apogäum)
Der höchste Punkt der Flugbahn. Dort ist die Rakete am langsamsten — der schonendste Moment, um einen Fallschirm zu öffnen.
Rückfallebene
Ein zweiter Weg für den Fall, dass der erste schweigt. Hier: der 3-Sekunden-Zeitablauf, falls das Sinken nie erkannt wird.
Einmal-Sperre (One-Shot-Latch)
Ein Merker, der nach der ersten Auslösung gesetzt bleibt, damit derselbe Kanal nicht zweimal zündet.
Quelltext: src/flight/flight_state_machine.cpp und src/flight/deployment_interlock.hpp. Alle Schwellwerte in src/flight/flight_config.hpp. Der Navigationsfilter, den diese Logik bewusst nicht benutzt, ist in docs/Filter_Erklaert.html erklärt.

Schreiben Sie einen Kommentar