Jeder Flug wird auf dem Laufwerk des Nano als Flugprotokoll mit dem Namen flightlog<tag>-<n>.aclz gespeichert, daneben eine passende Seite flightinfo<tag>-<n>.html mit einer Zusammenfassung des Flugs. Das Tag besteht aus den letzten vier Zeichen der Seriennummer des Nano, und n ist die Flugnummer.
Standardmäßig ist das Protokoll eine ACLZ-Datei, das eigene komprimierte Format des Nano. Setzen Sie log_format in den Einstellungen auf 0, ist es stattdessen eine CSV-Datei. Diese Seite beschreibt beide und die Spalten, die Sie jeweils erhalten.
Warum ACLZ der Standard ist
ACLZ zeichnet genau denselben Flug wie eine CSV mit derselben Genauigkeit in etwa einem Fünfzehntel des Platzes auf, und wir empfehlen, es als Standard zu belassen.
- Längere Flüge. Bis zu 38.000 Messwerte in einem Protokoll, gegenüber 22.000 bei einer CSV (20.000 mit
include_pressure). Bei 417 Hz ist das der Unterschied zwischen einem vollständig erfassten langen Sinkflug und einem vollen Protokoll. - Mehr Flüge auf dem Laufwerk. Ein typischer Flug ist als ACLZ einige zehn Kilobyte groß, sodass das Laufwerk die vollen 39 Flüge aufnimmt, die der Nano speichert. Als CSV füllen etwa zehn typische Flüge das Laufwerk, und ein CSV-Protokoll in voller Länge belegt allein den Großteil davon.
- Mehr Daten. Jedes ACLZ-Protokoll enthält außerdem die rohe Höhe, genau so, wie das Barometer sie vor jeder Verarbeitung gemessen hat, und den Druck. So sehen Sie immer, was TrueFuse und TruePath getan haben, und die Altimeter Cloud kann die Rohkurve neben der verarbeiteten darstellen.
- Bei der Komprimierung geht nichts verloren. Die CSV, die Sie von der Altimeter Cloud herunterladen, ist genau die CSV, die der Nano geschrieben hätte, Ziffer für Ziffer.
- Zweifach signiert. Der Nano signiert die Datei selbst und die CSV, zu der sie entpackt wird, sodass eine von der Altimeter Cloud heruntergeladene CSV auch für sich allein verifiziert werden kann.
- Schneller zu handhaben. Kleine Dateien lassen sich schneller kopieren und hochladen, was Sie vor allem beim Hochladen direkt vom Nano über USB merken.
Eine ACLZ-Datei lässt sich nicht in einer Tabellenkalkulation öffnen. Laden Sie sie auf die Altimeter Cloud hoch (kostenlos, ohne Konto), um die Diagramme zu sehen und eine CSV herunterzuladen, oder öffnen Sie für einen schnellen Blick direkt vom Laufwerk die Fluginfo-Seite daneben. Wählen Sie CSV nur, wenn Sie Protokolle direkt vom Laufwerk in einer Tabellenkalkulation öffnen müssen und Ihre Flüge kurz genug dafür sind.
| ACLZ (Standard) | CSV | |
|---|---|---|
| Messwerte pro Flug | Bis zu 38.000 | Bis zu 22.000 (20.000 mit include_pressure) |
| Größe eines typischen Flugs | Einige zehn KB | Einige hundert KB |
| Spalte für die rohe Höhe | Ja | Nein |
| Druckspalte | Ja | Rev 1 bis 3 immer; ab Rev 4 nur mit include_pressure |
| Öffnet sich in einer Tabellenkalkulation | Nein: hochladen, dann eine CSV herunterladen | Ja |
| Signatur | Ed25519, über die Datei und über die CSV, zu der sie entpackt wird | Ed25519, über die Datei |
Wie ACLZ intern funktioniert und wie Sie es mit eigener Software lesen, wird im Software-Handbuch beschrieben, mit einem Referenzkonverter.
Aufbau eines CSV-Protokolls
Eine CSV, ob vom Nano geschrieben oder von der Altimeter Cloud heruntergeladen, besteht aus drei Teilen in dieser Reihenfolge: einem Block von Kopfzeilen mit einer Zusammenfassung des Flugs und den Einstellungen, mit denen er aufgezeichnet wurde, einer einzelnen Leerzeile, dann einer Zeile mit Spaltennamen, die mit Time(ms) beginnt, gefolgt von einer Zeile pro aufgezeichnetem Messwert.
Wenn Sie einen Parser schreiben, suchen Sie die Zeile, die mit Time(ms) beginnt, statt Zeilen zu zählen, und behandeln Sie alles ab dort als Daten. Der Header ist als nebeneinanderliegende Paare aus Bezeichnung und Wert aufgebaut, damit er in einer Tabellenkalkulation übersichtlich ist: ein Paar links, ein Paar in der Mitte und ab Revision 4 ein weiteres Paar rechts mit den Bewegungswerten.
Der Header
Der Header enthält alles, was Sie brauchen, um den Flug zu verstehen, ohne eine einzige Datenzeile zu lesen.
- Flugzusammenfassung. Das Apogäum und sein Zeitpunkt, Landehöhe und Landezeitpunkt, die maximale Steiggeschwindigkeit, die Landegeschwindigkeit und die durchschnittlichen Messwerte pro Sekunde.
- Identifikation. Der Gerätename, alle drei Teilnehmernummern und die Seriennummer.
- Bedingungen und Einstellungen. Platinentemperatur und Akkuspannung zu Beginn und am Ende des Flugs, die Firmware-Version, die Board-Revision und die einzelnen geflogenen Einstellungen, etwa Aufzeichnungsrate, Hybridmodus, Einbaulage, Startschutz, Abtastverhältnis und Aufzeichnungsende.
- Verarbeitung. Welche Versionen von TrueFuse und TruePath den Flug verarbeitet haben und ob TrueFuse angewendet wurde, wie der Start bestätigt wurde und wie der Abhebezeitpunkt festgelegt wurde.
- Ab Revision 4. Der Schienenwinkel, die dominante Achse, die Kalibrierungsoffsets und ihre Qualität, der Offset der Sensorsynchronisierung und eine eventuelle Sensorsättigung. Die rechte Seite ergänzt Bewegungsstatistiken: Zeitpunkte von Brennschluss und Ausstoß, Geschwindigkeit bei Brennschluss und im Sinkflug, maximale und durchschnittliche Beschleunigung im Steigflug, in der Brennphase und im Sinkflug sowie Nicken, Rollen, Gieren und Neigung beim Start.
- Wiederhergestellte Flüge haben eine Zeile
Recovered,1. - Adjusted log lautet bei einem Originalflug „no“ und zeigt an, ob das Protokoll seitdem auf der Altimeter Cloud mit einem anderen Druck oder einer anderen Temperatur neu berechnet wurde.
Das Feld Verification hash enthält die digitale Ed25519-Signatur des Protokolls, mit der jeder bestätigen kann, dass die Datei nicht verändert wurde. Protokolle von Firmware vor 1.52 haben hier stattdessen einen HMAC-SHA256-Hash. Siehe Flugprotokoll-Überprüfung.
Die Einstellungszeichenkette
Ein einzelnes Feld Settings string fasst die für den Flug verwendete Konfiguration in einer Zeile zusammen. Die konfigurierbaren Schlüssel entsprechen den Optionen auf der Seite Einstellungen.
| Schlüssel | Inhalt |
|---|---|
| fp | Für die Höhenberechnung verwendeter Luftdruck auf Meereshöhe (hPa), fest auf 1013,25 |
| ft | Verwendete Temperatur (°C), fest auf 15 |
| ut | Ob die Sensortemperatur verwendet wurde, immer 0 |
| ss | Aufzeichnungsrate (Hz) |
| sr | Abtastverhältnis |
| ms | Maximale Messwerte |
| ld | Starterkennungshöhe (m) |
| lp | Startschutz (mG) |
| sl | Startsperre |
| rs | Aufzeichnungsende |
| mp | Maintain power |
| hm | Hybridmodus |
| or | Einbaulage |
| se | Sync enable (ab Rev 4) |
| os, ii, kf | Interne Einstellungen der Druckverarbeitung (Oversampling und Filter) |
| rcp | Der beim Start erfasste Bodenbezug |
| rmi | Startzeitpunkt in Millisekunden |
| cgx, cgy, cgz | Gespeicherte Kalibrierungsoffsets des Gyroskops (ab Rev 4) |
| cax, cay, caz | Gespeicherte Kalibrierungsoffsets des Beschleunigungssensors (ab Rev 4) |
| zbb | Internes Testflag, bei einem normalen Flug immer 0 |
| sda, sdm, sdn, sds | Bodenbezug beim Start: getrimmter Mittelwert und Median der Höhe aus den Rampenmesswerten, ihre Anzahl und ihre Streuung (cm) |
| sbf, sbt | Der erste Messwert des Drucksensors nach dem Einschalten und sein Messwert am Ende der Aufwärmphase (hPa) |
Die Datenspalten
Nach der Leerzeile und den Spaltennamen ist jede Zeile ein aufgezeichneter Messwert, in dieser Reihenfolge. Die Bewegungsspalten (Beschleunigung, Gyroskop, Nicken, Rollen, Gieren und Neigung) gibt es bei Boards ab Revision 4.
| Spalte | Einheit | Format | Bedeutung |
|---|---|---|---|
| Time(ms) | ms | 2 Dezimalstellen | Zeit ab dem Abheben, mit dem Abheben als Null |
| Altitude(m) | m | 3 Dezimalstellen | Höhe über der Startrampe, nach TrueFuse und TruePath |
| Velocity(m/s) | m/s | 2 Dezimalstellen | Vertikalgeschwindigkeit, aus der verarbeiteten Höhe berechnet |
| acceleration_x(mG) | mG | Ganze Zahlen | Beschleunigung entlang der X-Achse der Platine |
| acceleration_y(mG) | mG | Ganze Zahlen | Beschleunigung entlang der Y-Achse |
| acceleration_z(mG) | mG | Ganze Zahlen | Beschleunigung entlang der Z-Achse |
| acceleration_total(mG) | mG | 1 Dezimalstelle | Betrag der Gesamtbeschleunigung abzüglich 1 g Schwerkraft, in Ruhe also nahe null |
| gyro_x | °/s | Ganze Zahlen | Drehrate um die X-Achse |
| gyro_y | °/s | Ganze Zahlen | Drehrate um die Y-Achse |
| gyro_z | °/s | Ganze Zahlen | Drehrate um die Z-Achse |
| Board temp(C) | °C | 2 Dezimalstellen | Sensortemperatur, in jeder 50. Zeile und in den Zeilen dazwischen leer |
| pitch | Grad | 2 Dezimalstellen | Lagewinkel, vom Gyroskop ausgehend von seinem Nullpunkt auf der Startrampe verfolgt |
| roll | Grad | 2 Dezimalstellen | Lagewinkel, vom Gyroskop ausgehend von seinem Nullpunkt auf der Startrampe verfolgt |
| yaw | Grad | 2 Dezimalstellen | Lagewinkel, vom Gyroskop ausgehend von seinem Nullpunkt auf der Startrampe verfolgt |
| tilt | Grad | 2 Dezimalstellen | Winkel zur Senkrechten |
| Pressure(hPa) | hPa | 6 Dezimalstellen | Luftdruck zur verarbeiteten Höhe, mit der Standardatmosphäre berechnet. In einer CSV aus einem ACLZ-Protokoll immer; in einer vom Nano geschriebenen CSV nur mit include_pressure auf 1 |
| Raw altitude(m) | m | 3 Dezimalstellen | Höhe über der Startrampe genau so, wie das Barometer sie gemessen hat, vor jeder Verarbeitung. Nur in CSVs aus ACLZ-Protokollen |
- Die Zeit wird ab dem Abheben gemessen. Der Nano behält die Sekunden vor der Bestätigung des Starts, daher haben die ersten Zeilen negative Zeiten: 5 Sekunden mit voller Rate und davor weitere 3 Sekunden mit 50 Hz in einem ACLZ-Protokoll oder 20 Hz in einer CSV.
- Die Zeiten werden mit zwei Nachkommastellen einer Millisekunde aus der eigenen Uhr des Sensors geschrieben, sodass die Zeilen selbst bei 833 Hz gleichmäßig verteilt sind.
- Bei eingeschaltetem Hybridmodus wird der Sinkflug mit niedrigerer Rate aufgezeichnet, sodass sich der Abstand zwischen den Zeilen ändert. Verwenden Sie immer die Zeitspalte, statt Zeilen zu zählen.
- Die Achsen von Beschleunigung und Gyroskop sind die eigenen Achsen der Platine, die sich je nach Einbaulage nach der Rakete ausrichten.
- Jede Datenzeile endet mit einem abschließenden Komma, sodass ein strenger Parser am Ende jeder Zeile ein leeres Feld sieht.
Altitude und Raw altitude haben denselben Nullpunkt, sodass Sie beide gegeneinander auftragen und genau sehen können, was die Verarbeitung geändert hat. Die beiden liegen den größten Teil des Flugs übereinander und trennen sich nur dort, wo der Start, eine Ausstoßladung oder eine Druckspitze das Barometer gestört hat.
Spaltennamen
Die Zeile mit den Spaltennamen in jedem Fall, genau so, wie sie erscheint:
CSV aus einem ACLZ-Protokoll (ab Rev 4) Time(ms),Altitude(m),Velocity(m/s),acceleration_x(mG),acceleration_y(mG),acceleration_z(mG),acceleration_total(mG),gyro_x,gyro_y,gyro_z,Board temp(C),pitch,roll,yaw,tilt,Pressure(hPa),Raw altitude(m) Vom Nano geschriebene CSV (ab Rev 4; Pressure(hPa) nur mit include_pressure 1) Time(ms),Altitude(m),Velocity(m/s),acceleration_x(mG),acceleration_y(mG),acceleration_z(mG),acceleration_total(mG),gyro_x,gyro_y,gyro_z,Board temp(C),pitch,roll,yaw,tilt,Pressure(hPa) CSV aus einem ACLZ-Protokoll (Rev 1 bis 3) Time(ms),Altitude(m),Pressure(hPa),Velocity(m/s),Board temp(C),Raw altitude(m) Vom Nano geschriebene CSV (Rev 1 bis 3) Time(ms),Altitude(m),Pressure(hPa),Velocity(m/s),Board temp(C)
ACLZ-Protokolle älterer Firmware, die vor Einführung der Spalte für die rohe Höhe entstanden sind, werden ohne diese entpackt.
Boards der Revisionen 1 bis 3
Boards ohne Bewegungssensor verwenden dieselbe Datei im selben Aufbau, nur einfacher. Die Bewegungsspalten fehlen, und der Header hat auf seiner rechten Seite keine Bewegungsstatistiken. Die Spalte Pressure(hPa) steht in beiden Formaten an dritter Stelle, direkt nach Altitude, und eine CSV aus einem ACLZ-Protokoll fügt am Ende Raw altitude(m) hinzu. Alles andere auf dieser Seite gilt genauso.