Chaque vol est sauvegardé sur le lecteur du Nano sous la forme d'un journal de vol nommé flightlog<tag>-<n>.aclz, accompagné d'une page flightinfo<tag>-<n>.html qui résume le vol. L'étiquette correspond aux quatre derniers caractères du numéro de série du Nano et n est le numéro de vol.
Par défaut, le journal est un fichier ACLZ, le format compressé propre au Nano. Si vous réglez log_format sur 0 dans les paramètres, c'est un fichier CSV. Cette page décrit les deux, ainsi que les colonnes de chacun.
Pourquoi ACLZ est le format par défaut
ACLZ enregistre exactement le même vol qu'un CSV, avec la même précision, dans environ un quinzième de l'espace, et nous recommandons de le garder par défaut.
- Des vols plus longs. Jusqu'à 38 000 échantillons dans un journal, contre 22 000 pour un CSV (20 000 avec
include_pressure). À 417 Hz, c'est la différence entre capturer intégralement une longue descente et manquer de place. - Plus de vols sur le lecteur. Un vol typique pèse quelques dizaines de kilo-octets en ACLZ, de sorte que le lecteur contient les 39 vols que le Nano conserve. En CSV, une dizaine de vols typiques remplissent le lecteur, et un journal CSV complet en occupe à lui seul la majeure partie.
- Plus de données. Chaque journal ACLZ conserve aussi l'altitude brute, exactement telle que mesurée par le baromètre avant tout traitement, ainsi que la pression. Vous voyez donc toujours ce qu'ont fait TrueFuse et TruePath, et Altimeter Cloud peut tracer la courbe brute à côté de la courbe traitée.
- Rien n'est perdu à la compression. Le CSV téléchargé depuis Altimeter Cloud est exactement celui que le Nano aurait écrit, chiffre pour chiffre.
- Signé deux fois. Le Nano signe le fichier lui-même et le CSV qu'il génère, de sorte qu'un CSV téléchargé depuis Altimeter Cloud peut toujours être vérifié seul.
- Plus rapide à manipuler. Les petits fichiers se copient et s'envoient plus vite, ce qui se remarque surtout lors de l'envoi direct depuis le Nano en USB.
Un fichier ACLZ ne s'ouvre pas dans un tableur. Envoyez-le sur Altimeter Cloud (gratuit, sans compte) pour voir les graphiques et télécharger un CSV, ou ouvrez la page d'infos du vol qui l'accompagne pour un aperçu rapide directement sur le lecteur. Ne choisissez CSV que si vous devez ouvrir les journaux directement dans un tableur et que vos vols sont assez courts.
| ACLZ (par défaut) | CSV | |
|---|---|---|
| Échantillons par vol | Jusqu'à 38 000 | Jusqu'à 22 000 (20 000 avec include_pressure) |
| Taille d'un vol typique | Quelques dizaines de Ko | Quelques centaines de Ko |
| Colonne d'altitude brute | Oui | Non |
| Colonne de pression | Oui | Toujours sur Rev 1 à 3 ; sur Rev 4 et ultérieures seulement avec include_pressure |
| S'ouvre dans un tableur | Non : envoyez-le, puis téléchargez un CSV | Oui |
| Signature | Ed25519, sur le fichier et sur le CSV qu'il génère | Ed25519, sur le fichier |
Le fonctionnement interne d'ACLZ, et la façon de le lire avec votre propre logiciel, sont décrits dans le manuel logiciel, avec un convertisseur de référence.
Structure d'un journal CSV
Un CSV, qu'il soit écrit par le Nano ou téléchargé depuis Altimeter Cloud, comporte trois parties dans cet ordre : un bloc de lignes d'en-tête avec un résumé du vol et les paramètres d'enregistrement, une seule ligne vide, puis une ligne de noms de colonnes commençant par Time(ms), suivie d'une ligne par échantillon enregistré.
Si vous écrivez un analyseur, cherchez la ligne qui commence par Time(ms) plutôt que de compter les lignes, et traitez tout ce qui suit comme des données. L'en-tête est organisé en paires libellé et valeur côte à côte, pour une lecture claire dans un tableur : une paire à gauche, une paire au milieu et, à partir de la révision 4, une autre paire à droite avec les valeurs de mouvement.
L'en-tête
L'en-tête contient tout ce qu'il faut pour comprendre le vol sans lire une seule ligne de données.
- Résumé du vol. L'apogée et son instant, la hauteur et l'instant d'atterrissage, la vitesse ascensionnelle maximale, la vitesse d'atterrissage et le nombre moyen d'échantillons par seconde.
- Identification. Le nom de l'appareil, les trois numéros de concurrent et le numéro de série.
- Conditions et paramètres. La température de la carte et la tension de la batterie au début et à la fin du vol, la version du firmware, la révision de la carte et chacun des paramètres du vol, comme la fréquence d'échantillonnage, le mode hybride, l'orientation, la protection au décollage, le rapport d'échantillonnage et l'arrêt de l'enregistrement.
- Traitement. Les versions de TrueFuse et TruePath qui ont traité le vol et si TrueFuse a été appliqué, la façon dont le décollage a été confirmé et dont l'instant du décollage a été fixé.
- Révision 4 et ultérieures. L'angle du rail, l'axe dominant, les décalages et la qualité d'étalonnage, le décalage de synchronisation des capteurs et une éventuelle saturation. La partie droite ajoute des statistiques de mouvement : instants de fin de combustion et d'éjection, vitesses en fin de combustion et en descente, accélérations maximales et moyennes pendant la montée, la combustion et la descente, ainsi que le tangage, le roulis, le lacet et l'inclinaison au décollage.
- Les vols récupérés comportent une ligne
Recovered,1. - Adjusted log indique « no » pour un vol d'origine, et signale si le journal a depuis été recalculé sur Altimeter Cloud avec une autre pression ou température.
Le champ Verification hash contient la signature numérique Ed25519 du journal, qui permet à chacun de confirmer que le fichier n'a pas été modifié. Les journaux des firmwares antérieurs à 1.52 contiennent ici un hachage HMAC-SHA256. Voir Vérification des journaux de vol.
La chaîne de paramètres
Un seul champ Settings string regroupe sur une ligne la configuration utilisée pour le vol. Les clés configurables correspondent aux options de la page Paramètres.
| Clé | Contenu |
|---|---|
| fp | Pression au niveau de la mer utilisée pour calculer la hauteur (hPa), fixée à 1013,25 |
| ft | Température utilisée (°C), fixée à 15 |
| ut | Utilisation ou non de la température du capteur, toujours 0 |
| ss | Fréquence d'échantillonnage (Hz) |
| sr | Rapport d'échantillonnage |
| ms | Échantillons maximum |
| ld | Hauteur de détection du décollage (m) |
| lp | Protection au décollage (mG) |
| sl | Verrouillage au démarrage |
| rs | Arrêt de l'enregistrement |
| mp | Comportement après l'atterrissage |
| hm | Mode hybride |
| or | Orientation |
| se | Synchronisation des capteurs (Rev 4 et ultérieures) |
| os, ii, kf | Réglages internes de traitement de la pression (suréchantillonnage et filtre) |
| rcp | La référence au sol relevée au décollage |
| rmi | Instant du décollage, en millisecondes |
| cgx, cgy, cgz | Décalages d'étalonnage du gyroscope enregistrés (Rev 4 et ultérieures) |
| cax, cay, caz | Décalages d'étalonnage de l'accéléromètre enregistrés (Rev 4 et ultérieures) |
| zbb | Indicateur de test interne, toujours 0 lors d'un vol normal |
| sda, sdm, sdn, sds | Référence au sol au démarrage : moyenne tronquée et médiane de l'altitude des mesures sur la rampe, leur nombre et leur dispersion (cm) |
| sbf, sbt | La première mesure du capteur de pression après la mise sous tension et sa mesure à la fin de sa mise en température (hPa) |
Les colonnes de données
Après la ligne vide et les noms de colonnes, chaque ligne est un échantillon enregistré, dans cet ordre. Les colonnes de mouvement (accélération, gyroscope, tangage, roulis, lacet et inclinaison) existent sur les cartes de révision 4 et ultérieures.
| Colonne | Unité | Format | Description |
|---|---|---|---|
| Time(ms) | ms | 2 décimales | Temps depuis le décollage, le décollage valant zéro |
| Altitude(m) | m | 3 décimales | Hauteur au-dessus de la rampe, après TrueFuse et TruePath |
| Velocity(m/s) | m/s | 2 décimales | Vitesse verticale, calculée à partir de l'altitude traitée |
| acceleration_x(mG) | mG | Nombres entiers | Accélération selon l'axe X de la carte |
| acceleration_y(mG) | mG | Nombres entiers | Accélération selon l'axe Y |
| acceleration_z(mG) | mG | Nombres entiers | Accélération selon l'axe Z |
| acceleration_total(mG) | mG | 1 décimale | Module de l'accélération totale, gravité de 1 g retirée, donc proche de zéro au repos |
| gyro_x | °/s | Nombres entiers | Vitesse de rotation autour de l'axe X |
| gyro_y | °/s | Nombres entiers | Vitesse de rotation autour de l'axe Y |
| gyro_z | °/s | Nombres entiers | Vitesse de rotation autour de l'axe Z |
| Board temp(C) | °C | 2 décimales | Température du capteur, une ligne sur 50 et vide sur les lignes intermédiaires |
| pitch | degrés | 2 décimales | Angle d'attitude, suivi par le gyroscope à partir de son zéro sur la rampe |
| roll | degrés | 2 décimales | Angle d'attitude, suivi par le gyroscope à partir de son zéro sur la rampe |
| yaw | degrés | 2 décimales | Angle d'attitude, suivi par le gyroscope à partir de son zéro sur la rampe |
| tilt | degrés | 2 décimales | Angle par rapport à la verticale |
| Pressure(hPa) | hPa | 6 décimales | Pression de l'air correspondant à l'altitude traitée, calculée avec l'atmosphère standard. Toujours présente dans un CSV issu d'un journal ACLZ ; dans un CSV écrit par le Nano, seulement avec include_pressure réglé sur 1 |
| Raw altitude(m) | m | 3 décimales | Hauteur au-dessus de la rampe exactement telle que mesurée par le baromètre, avant tout traitement. Uniquement dans les CSV issus de journaux ACLZ |
- Le temps est mesuré depuis le décollage. Le Nano conserve les secondes précédant la confirmation du décollage, donc les premières lignes ont des temps négatifs : 5 secondes à pleine fréquence, et 3 secondes de plus avant cela à 50 Hz dans un journal ACLZ ou 20 Hz dans un CSV.
- Les temps sont écrits au centième de milliseconde, à partir de l'horloge propre du capteur, de sorte que les lignes sont régulièrement espacées même à 833 Hz.
- Avec le mode hybride activé, la descente est enregistrée à une fréquence plus basse, l'espacement des lignes change donc. Utilisez toujours la colonne de temps plutôt que de compter les lignes.
- Les axes d'accélération et de gyroscope sont ceux de la carte, alignés sur la fusée selon l'orientation.
- Chaque ligne de données se termine par une virgule, de sorte qu'un analyseur strict verra un champ vide à la fin de chaque ligne.
Altitude et Raw altitude partagent le même zéro : vous pouvez tracer l'une contre l'autre et voir exactement ce que le traitement a modifié. Les deux se superposent sur la majeure partie du vol et ne divergent que là où le décollage, une charge d'éjection ou un pic de pression a perturbé le baromètre.
Noms de colonnes
La ligne des noms de colonnes dans chaque cas, exactement telle qu'elle apparaît :
CSV issu d'un journal ACLZ (Rev 4 et ultérieures) 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 écrit par le Nano (Rev 4 et ultérieures ; Pressure(hPa) seulement avec 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 issu d'un journal ACLZ (Rev 1 à 3) Time(ms),Altitude(m),Pressure(hPa),Velocity(m/s),Board temp(C),Raw altitude(m) CSV écrit par le Nano (Rev 1 à 3) Time(ms),Altitude(m),Pressure(hPa),Velocity(m/s),Board temp(C)
Les journaux ACLZ des anciens firmwares, antérieurs à l'ajout de la colonne d'altitude brute, se décompressent sans elle.
Cartes de révision 1 à 3
Les cartes sans capteur de mouvement utilisent le même fichier sous la même forme, en plus simple. Les colonnes de mouvement sont absentes, et l'en-tête n'a pas de statistiques de mouvement dans sa partie droite. La colonne Pressure(hPa) est en troisième position, juste après Altitude, dans les deux formats, et un CSV issu d'un journal ACLZ ajoute Raw altitude(m) à la fin. Tout le reste de cette page s'applique de la même façon.