Elke vlucht wordt op de schijf van de Nano opgeslagen als vluchtlog met de naam flightlog<tag>-<n>.aclz, met ernaast een bijbehorende pagina flightinfo<tag>-<n>.html die de vlucht samenvat. De tag bestaat uit de laatste vier tekens van het serienummer van de Nano en n is het vluchtnummer.
Standaard is de log een ACLZ-bestand, het eigen gecomprimeerde formaat van de Nano. Zet je log_format in de instellingen op 0, dan is het in plaats daarvan een CSV-bestand. Deze pagina beschrijft beide, en de kolommen die je van elk krijgt.
Waarom ACLZ de standaard is
ACLZ legt precies dezelfde vlucht vast als een CSV, met dezelfde precisie, in ongeveer een vijftiende van de ruimte, en we raden aan het als standaard te laten staan.
- Langere vluchten. Tot 38 000 meetwaarden in één log, tegenover 22 000 voor een CSV (20 000 met
include_pressure). Op 417 Hz is dat het verschil tussen een lange daling volledig vastleggen en een volle log. - Meer vluchten op de schijf. Een typische vlucht is als ACLZ een paar tientallen kilobytes, dus de schijf kan alle 39 vluchten bevatten die de Nano bewaart. Als CSV vullen ongeveer tien typische vluchten de schijf, en een CSV-log van volledige lengte neemt in zijn eentje het grootste deel in.
- Meer data. Elke ACLZ-log bewaart ook de ruwe hoogte, precies zoals de barometer die mat vóór elke verwerking, en de druk. Zo kun je altijd zien wat TrueFuse en TruePath hebben gedaan, en kan de Altimeter Cloud de ruwe curve naast de verwerkte tonen.
- Bij de compressie gaat niets verloren. De CSV die je van de Altimeter Cloud downloadt, is precies de CSV die de Nano zou hebben geschreven, cijfer voor cijfer.
- Twee keer ondertekend. De Nano ondertekent het bestand zelf en de CSV waarin het wordt uitgepakt, zodat een CSV die je van de Altimeter Cloud downloadt nog steeds op zichzelf kan worden geverifieerd.
- Sneller in gebruik. Kleine bestanden worden sneller gekopieerd en geüpload, wat je het meest merkt als je direct vanaf de Nano via USB uploadt.
Een ACLZ-bestand kun je niet in een spreadsheet openen. Upload het naar de Altimeter Cloud (gratis, geen account nodig) om de grafieken te zien en een CSV te downloaden, of open de vluchtinfopagina ernaast voor een snelle blik direct vanaf de schijf. Kies alleen voor CSV als je logs direct vanaf de schijf in een spreadsheet moet openen en je vluchten kort genoeg zijn om te passen.
| ACLZ (standaard) | CSV | |
|---|---|---|
| Meetwaarden per vlucht | Tot 38 000 | Tot 22 000 (20 000 met include_pressure) |
| Grootte van een typische vlucht | Een paar tientallen KB | Een paar honderd KB |
| Kolom ruwe hoogte | Ja | Nee |
| Drukkolom | Ja | Rev 1 tot 3 altijd; Rev 4 en later alleen met include_pressure |
| Opent in een spreadsheet | Nee: upload hem en download dan een CSV | Ja |
| Handtekening | Ed25519, over het bestand en over de CSV waarin het wordt uitgepakt | Ed25519, over het bestand |
Hoe ACLZ intern werkt, en hoe je het met je eigen software leest, wordt behandeld in de softwarehandleiding, met een referentieconverter.
Hoe een CSV-log is opgebouwd
Een CSV, of hij nu door de Nano is geschreven of van de Altimeter Cloud is gedownload, heeft drie delen in deze volgorde: een blok headerrijen met een samenvatting van de vlucht en de instellingen waarmee hij is opgenomen, één lege rij, dan een rij kolomnamen die begint met Time(ms), gevolgd door één rij per opgenomen meetwaarde.
Schrijf je een parser, zoek dan de rij die begint met Time(ms) in plaats van rijen te tellen, en behandel alles vanaf daar als data. De header is opgebouwd als paren van label en waarde naast elkaar, zodat hij netjes leest in een spreadsheet: een paar links, een paar in het midden en, bij revisie 4 en later, nog een paar rechts met de bewegingsgegevens.
De header
De header bevat alles wat je nodig hebt om de vlucht te begrijpen zonder één datarij te lezen.
- Vluchtsamenvatting. Het apogeum en het tijdstip ervan, de landingshoogte en het tijdstip, de maximale stijgsnelheid, de landingssnelheid en het gemiddelde aantal meetwaarden per seconde.
- Identificatie. De apparaatnaam, alle drie de deelnemersnummers en het serienummer.
- Omstandigheden en instellingen. De temperatuur van het bordje en de accuspanning aan het begin en einde van de vlucht, de firmwareversie, de revisie van het bordje en de afzonderlijke instellingen waarmee is gevlogen, zoals bemonsteringssnelheid, hybride modus, oriëntatie, lanceerbeveiliging, bemonsteringsverhouding en opname stoppen.
- Verwerking. Welke versies van TrueFuse en TruePath de vlucht hebben verwerkt en of TrueFuse is toegepast, hoe de lancering werd bevestigd en hoe het lanceertijdstip werd bepaald.
- Revisie 4 en later. De railhoek, de dominante as, de kalibratie-offsets en -kwaliteit, de offset van de sensorsynchronisatie en eventuele sensorverzadiging. De rechterkant voegt bewegingsstatistieken toe: tijdstippen van brandsluiting en uitwerpen, snelheden bij brandsluiting en daling, de maximale en gemiddelde versnellingen tijdens de klim, het branden en de daling, en de stamp, rol, gier en helling bij de lancering.
- Herstelde vluchten hebben een rij
Recovered,1. - Adjusted log staat op ‘no’ bij een originele vlucht, en toont of de log sindsdien op de Altimeter Cloud is herberekend met een andere druk of temperatuur.
Het veld Verification hash bevat de digitale handtekening met Ed25519 van de log, waarmee iedereen kan bevestigen dat het bestand niet is gewijzigd. Logs van firmware vóór 1.52 hebben hier in plaats daarvan een HMAC-SHA256-hash. Zie Vluchtlogverificatie.
De instellingenstring
Eén veld Settings string bundelt de configuratie die voor de vlucht is gebruikt in één regel. De configureerbare sleutels komen overeen met de opties op de pagina Instellingen.
| Sleutel | Bevat |
|---|---|
| fp | Luchtdruk op zeeniveau gebruikt om de hoogte te berekenen (hPa), vast op 1013,25 |
| ft | Gebruikte temperatuur (°C), vast op 15 |
| ut | Of de sensortemperatuur is gebruikt, altijd 0 |
| ss | Bemonsteringssnelheid (Hz) |
| sr | Bemonsteringsverhouding |
| ms | Maximaal aantal meetwaarden |
| ld | Lanceerdetectiehoogte (m) |
| lp | Lanceerbeveiliging (mG) |
| sl | Opstartvergrendeling |
| rs | Opname stoppen |
| mp | Voeding behouden |
| hm | Hybride modus |
| or | Oriëntatie |
| se | Synchronisatie aan (Rev 4 en later) |
| os, ii, kf | Interne instellingen voor drukverwerking (oversampling en filter) |
| rcp | Het grondreferentiepunt vastgelegd bij de lancering |
| rmi | Lanceertijd, in milliseconden |
| cgx, cgy, cgz | Opgeslagen kalibratie-offsets van de gyroscoop (Rev 4 en later) |
| cax, cay, caz | Opgeslagen kalibratie-offsets van de versnellingsmeter (Rev 4 en later) |
| zbb | Interne testvlag, altijd 0 bij een normale vlucht |
| sda, sdm, sdn, sds | Grondreferentiepunt bij het opstarten: het getrimde gemiddelde en de mediaan van de hoogte uit de metingen op het lanceerplatform, hoeveel er zijn gedaan, en hun spreiding (cm) |
| sbf, sbt | De eerste meting van de druksensor na het aanzetten en zijn meting aan het einde van de opwarmtijd (hPa) |
De datakolommen
Na de lege rij en de kolomnamen is elke rij één opgenomen meetwaarde, in deze volgorde. De bewegingskolommen (versnelling, gyroscoop, stamp, rol, gier en helling) zijn er op bordjes van revisie 4 en later.
| Kolom | Eenheden | Formaat | Wat het is |
|---|---|---|---|
| Time(ms) | ms | 2 decimalen | Tijd vanaf de lancering, met de lancering als nul |
| Altitude(m) | m | 3 decimalen | Hoogte boven het lanceerplatform, na TrueFuse en TruePath |
| Velocity(m/s) | m/s | 2 decimalen | Verticale snelheid, berekend uit de verwerkte hoogte |
| acceleration_x(mG) | mG | Hele getallen | Versnelling langs de X-as van het bordje |
| acceleration_y(mG) | mG | Hele getallen | Versnelling langs de Y-as |
| acceleration_z(mG) | mG | Hele getallen | Versnelling langs de Z-as |
| acceleration_total(mG) | mG | 1 decimaal | Totale grootte van de versnelling zonder de 1 g zwaartekracht, zodat hij in rust rond nul ligt |
| gyro_x | °/s | Hele getallen | Draaisnelheid om de X-as |
| gyro_y | °/s | Hele getallen | Draaisnelheid om de Y-as |
| gyro_z | °/s | Hele getallen | Draaisnelheid om de Z-as |
| Board temp(C) | °C | 2 decimalen | Sensortemperatuur, op elke 50e rij en leeg op de rijen ertussen |
| pitch | graden | 2 decimalen | Standhoek, door de gyroscoop gevolgd vanaf zijn nulpunt op het lanceerplatform |
| roll | graden | 2 decimalen | Standhoek, door de gyroscoop gevolgd vanaf zijn nulpunt op het lanceerplatform |
| yaw | graden | 2 decimalen | Standhoek, door de gyroscoop gevolgd vanaf zijn nulpunt op het lanceerplatform |
| tilt | graden | 2 decimalen | Hoek ten opzichte van verticaal |
| Pressure(hPa) | hPa | 6 decimalen | Luchtdruk voor de verwerkte hoogte, berekend met de standaardatmosfeer. Altijd in een CSV uit een ACLZ-log; in een CSV die door de Nano is geschreven alleen met include_pressure op 1 |
| Raw altitude(m) | m | 3 decimalen | Hoogte boven het lanceerplatform precies zoals de barometer die mat, vóór elke verwerking. Alleen in CSV's uit ACLZ-logs |
- De tijd wordt gemeten vanaf de lancering. De Nano bewaart de seconden voordat de lancering werd bevestigd, dus de eerste rijen hebben negatieve tijden: 5 seconden op volle rate, en daarvoor nog 3 seconden op 50 Hz in een ACLZ-log of 20 Hz in een CSV.
- Tijden worden geschreven tot op twee decimalen van een milliseconde, volgens de eigen klok van de sensor, zodat de rijen zelfs op 833 Hz gelijkmatig verdeeld zijn.
- Met hybride modus aan wordt de daling op een lagere rate gelogd, dus de afstand tussen de rijen verandert. Gebruik altijd de kolom Time in plaats van rijen te tellen.
- De assen van versnelling en gyroscoop zijn de eigen assen van het bordje, die volgens de oriëntatie op de raket zijn uitgelijnd.
- Elke datarij eindigt met een komma, dus een strikte parser ziet aan het einde van elke rij één leeg veld.
Altitude en Raw altitude delen hetzelfde nulpunt, dus je kunt ze tegen elkaar uitzetten en precies zien wat de verwerking heeft veranderd. Het grootste deel van de vlucht liggen ze over elkaar heen, en ze wijken alleen af waar de lancering, een uitwerplading of een drukpiek de barometer verstoorde.
Kolomnamen
De rij met kolomnamen in elk geval, precies zoals hij verschijnt:
CSV uit een ACLZ-log (Rev 4 en later) 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) CSV geschreven door de Nano (Rev 4 en later; Pressure(hPa) alleen met 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 uit een ACLZ-log (Rev 1 tot 3) Time(ms),Altitude(m),Pressure(hPa),Velocity(m/s),Board temp(C),Raw altitude(m) CSV geschreven door de Nano (Rev 1 tot 3) Time(ms),Altitude(m),Pressure(hPa),Velocity(m/s),Board temp(C)
ACLZ-logs van oudere firmware, gemaakt voordat de kolom met ruwe hoogte werd toegevoegd, worden zonder die kolom uitgepakt.
Bordjes van revisie 1 tot 3
Bordjes zonder bewegingssensor gebruiken hetzelfde bestand in dezelfde vorm, alleen eenvoudiger. De bewegingskolommen ontbreken, en de header heeft rechts geen bewegingsstatistieken. De kolom Pressure(hPa) staat in beide formaten op de derde plaats, direct na Altitude, en een CSV uit een ACLZ-log voegt aan het einde Raw altitude(m) toe. Al het andere op deze pagina geldt op dezelfde manier.