Cada voo é guardado na unidade do Nano como um registo de voo com o nome flightlog<tag>-<n>.aclz, com uma página flightinfo<tag>-<n>.html correspondente ao lado que resume o voo. A etiqueta (tag) são os últimos quatro caracteres do número de série do Nano e n é o número do voo.
Por predefinição, o registo é um ficheiro ACLZ, o formato comprimido próprio do Nano. Se definir log_format como 0 nas definições, passa a ser um ficheiro CSV. Esta página descreve ambos e as colunas que cada um fornece.
Porque é que o ACLZ é a predefinição
O ACLZ grava exatamente o mesmo voo que um CSV, com a mesma precisão, em cerca de um décimo quinto do espaço, e recomendamos mantê-lo como predefinição.
- Voos mais longos. Até 38 000 amostras num registo, contra 22 000 num CSV (20 000 com
include_pressure). A 417 Hz, é a diferença entre captar uma descida longa por completo e ficar sem espaço no registo. - Mais voos na unidade. Um voo típico ocupa algumas dezenas de kilobytes em ACLZ, por isso a unidade comporta os 39 voos que o Nano guarda. Em CSV, cerca de dez voos típicos enchem a unidade, e um registo CSV de duração completa ocupa sozinho a maior parte.
- Mais dados. Cada registo ACLZ guarda também a altitude em bruto, exatamente como o barómetro a mediu antes de qualquer processamento, e a pressão. Assim pode ver sempre o que o TrueFuse e o TruePath fizeram, e o Altimeter Cloud pode mostrar a curva em bruto ao lado da processada.
- Nada se perde na compressão. O CSV que transfere do Altimeter Cloud é exatamente o CSV que o Nano teria escrito, algarismo a algarismo.
- Assinado duas vezes. O Nano assina o próprio ficheiro e o CSV em que se expande, por isso um CSV transferido do Altimeter Cloud pode continuar a ser verificado por si só.
- Mais rápido de manusear. Ficheiros pequenos copiam-se e carregam-se mais depressa, o que se nota sobretudo ao carregar diretamente do Nano por USB.
Não é possível abrir um ficheiro ACLZ numa folha de cálculo. Carregue-o no Altimeter Cloud (gratuito, sem conta) para ver os gráficos e transferir um CSV, ou abra a página de informação do voo ao lado para uma vista rápida diretamente da unidade. Escolha CSV apenas se precisar de abrir registos diretamente da unidade numa folha de cálculo e os seus voos forem suficientemente curtos para caber.
| ACLZ (predefinição) | CSV | |
|---|---|---|
| Amostras por voo | Até 38 000 | Até 22 000 (20 000 com include_pressure) |
| Tamanho de um voo típico | Algumas dezenas de KB | Algumas centenas de KB |
| Coluna de altitude em bruto | Sim | Não |
| Coluna de pressão | Sim | Rev 1 a 3 sempre; Rev 4 e posteriores só com include_pressure |
| Abre numa folha de cálculo | Não: carregue-o e depois transfira um CSV | Sim |
| Assinatura | Ed25519, sobre o ficheiro e sobre o CSV em que se expande | Ed25519, sobre o ficheiro |
O funcionamento interno do ACLZ, e como lê-lo com o seu próprio software, é descrito no manual de software, com um conversor de referência.
Como está organizado um registo CSV
Um CSV, quer seja escrito pelo Nano quer transferido do Altimeter Cloud, tem três partes por esta ordem: um bloco de linhas de cabeçalho com um resumo do voo e as definições com que foi gravado, uma única linha em branco, e depois uma linha de nomes de colunas que começa por Time(ms), seguida de uma linha por cada amostra gravada.
Se estiver a escrever um parser, procure a linha que começa por Time(ms) em vez de contar linhas, e trate tudo a partir daí como dados. O cabeçalho está organizado em pares de etiqueta e valor lado a lado, para se ler de forma arrumada numa folha de cálculo: um par à esquerda, um par ao meio e, na revisão 4 e posteriores, mais um par à direita com os valores de movimento.
O cabeçalho
O cabeçalho contém tudo o que é preciso para compreender o voo sem ler uma única linha de dados.
- Resumo do voo. O apogeu e o seu tempo, a altura e o tempo de aterragem, a velocidade máxima de subida, a velocidade de aterragem e a média de amostras por segundo.
- Identificação. O nome do dispositivo, os três números de concorrente e o número de série.
- Condições e definições. A temperatura da placa e a tensão da bateria no início e no fim do voo, a versão do firmware, a revisão da placa e as definições individuais usadas, como a velocidade de amostragem, o modo híbrido, a orientação, a proteção de lançamento, o rácio de amostras e a paragem da gravação.
- Processamento. As versões do TrueFuse e do TruePath que processaram o voo e se o TrueFuse foi aplicado, como o lançamento foi confirmado e como foi definido o momento da descolagem.
- Revisão 4 e posteriores. O ângulo da calha, o eixo dominante, os desvios e a qualidade da calibração, o desvio de sincronização dos sensores e qualquer saturação dos sensores. O lado direito acrescenta estatísticas de movimento: tempos de fim da combustão e de ejeção, velocidades no fim da combustão e na descida, as acelerações máximas e médias durante a subida, a combustão e a descida, e a arfagem, o rolamento, a guinada e a inclinação no lançamento.
- Os voos recuperados têm uma linha
Recovered,1. - Adjusted log indica «no» num voo original, e mostra se o registo foi entretanto recalculado no Altimeter Cloud com outra pressão ou temperatura.
O campo Verification hash contém a assinatura digital Ed25519 do registo, que permite a qualquer pessoa confirmar que o ficheiro não foi alterado. Os registos de firmware anterior a 1.52 têm aqui um hash HMAC-SHA256. Consulte Verificação de registos de voo.
A cadeia de definições
Um único campo Settings string agrupa numa linha a configuração usada no voo. As chaves configuráveis correspondem às opções da página Definições.
| Chave | Contém |
|---|---|
| fp | Pressão ao nível do mar usada para calcular a altura (hPa), fixa em 1013,25 |
| ft | Temperatura usada (°C), fixa em 15 |
| ut | Se foi usada a temperatura do sensor, sempre 0 |
| ss | Velocidade de amostragem (Hz) |
| sr | Rácio de amostras |
| ms | Máximo de amostras |
| ld | Altura de deteção de lançamento (m) |
| lp | Proteção de lançamento (mG) |
| sl | Bloqueio de arranque |
| rs | Paragem da gravação |
| mp | Manter alimentação |
| hm | Modo híbrido |
| or | Orientação |
| se | Sincronização ativa (Rev 4 e posteriores) |
| os, ii, kf | Definições internas de tratamento da pressão (sobreamostragem e filtro) |
| rcp | A referência do solo captada no lançamento |
| rmi | Tempo de lançamento, em milissegundos |
| cgx, cgy, cgz | Desvios de calibração do giroscópio guardados (Rev 4 e posteriores) |
| cax, cay, caz | Desvios de calibração do acelerómetro guardados (Rev 4 e posteriores) |
| zbb | Indicador de teste interno, sempre 0 num voo normal |
| sda, sdm, sdn, sds | Referência do solo no arranque: a média aparada e a mediana da altitude das leituras na plataforma, quantas foram feitas e a sua dispersão (cm) |
| sbf, sbt | A primeira leitura do sensor de pressão após ligar e a sua leitura no fim do aquecimento (hPa) |
As colunas de dados
Depois da linha em branco e dos nomes das colunas, cada linha é uma amostra gravada, por esta ordem. As colunas de movimento (aceleração, giroscópio, arfagem, rolamento, guinada e inclinação) existem nas placas da revisão 4 e posteriores.
| Coluna | Unidades | Formato | O que é |
|---|---|---|---|
| Time(ms) | ms | 2 casas decimais | Tempo desde a descolagem, com a descolagem como zero |
| Altitude(m) | m | 3 casas decimais | Altura acima da plataforma, após TrueFuse e TruePath |
| Velocity(m/s) | m/s | 2 casas decimais | Velocidade vertical, calculada a partir da altitude processada |
| acceleration_x(mG) | mG | Números inteiros | Aceleração ao longo do eixo X da placa |
| acceleration_y(mG) | mG | Números inteiros | Aceleração ao longo do eixo Y |
| acceleration_z(mG) | mG | Números inteiros | Aceleração ao longo do eixo Z |
| acceleration_total(mG) | mG | 1 casa decimal | Magnitude total da aceleração sem o 1 g da gravidade, por isso fica perto de zero em repouso |
| gyro_x | °/s | Números inteiros | Velocidade de rotação em torno do eixo X |
| gyro_y | °/s | Números inteiros | Velocidade de rotação em torno do eixo Y |
| gyro_z | °/s | Números inteiros | Velocidade de rotação em torno do eixo Z |
| Board temp(C) | °C | 2 casas decimais | Temperatura do sensor, a cada 50 linhas e em branco nas linhas intermédias |
| pitch | graus | 2 casas decimais | Ângulo de atitude, seguido pelo giroscópio a partir do seu zero na plataforma |
| roll | graus | 2 casas decimais | Ângulo de atitude, seguido pelo giroscópio a partir do seu zero na plataforma |
| yaw | graus | 2 casas decimais | Ângulo de atitude, seguido pelo giroscópio a partir do seu zero na plataforma |
| tilt | graus | 2 casas decimais | Ângulo em relação à vertical |
| Pressure(hPa) | hPa | 6 casas decimais | Pressão do ar correspondente à altitude processada, calculada com a atmosfera padrão. Sempre presente num CSV obtido de um registo ACLZ; num CSV escrito pelo Nano, só com include_pressure definido como 1 |
| Raw altitude(m) | m | 3 casas decimais | Altura acima da plataforma exatamente como o barómetro a mediu, antes de qualquer processamento. Só em CSV obtidos de registos ACLZ |
- O tempo é medido a partir da descolagem. O Nano guarda os segundos antes de o lançamento ser confirmado, por isso as primeiras linhas têm tempos negativos: 5 segundos à taxa máxima e, antes disso, mais 3 segundos a 50 Hz num registo ACLZ ou a 20 Hz num CSV.
- Os tempos são escritos com duas casas decimais de milissegundo, a partir do relógio próprio do sensor, por isso as linhas ficam uniformemente espaçadas mesmo a 833 Hz.
- Com o modo híbrido ligado, a descida é registada a uma taxa mais baixa, por isso o espaçamento entre linhas muda. Use sempre a coluna Time em vez de contar linhas.
- Os eixos de aceleração e do giroscópio são os eixos próprios da placa, alinhados com o foguete de acordo com a orientação.
- Cada linha de dados termina com uma vírgula, por isso um parser rigoroso verá um campo vazio no fim de cada linha.
Altitude e Raw altitude partilham o mesmo zero, por isso pode representar uma contra a outra e ver exatamente o que o processamento alterou. As duas sobrepõem-se durante a maior parte do voo e só se separam onde o lançamento, uma carga de ejeção ou um pico de pressão perturbaram o barómetro.
Nomes das colunas
A linha de nomes de colunas em cada caso, exatamente como aparece:
CSV obtido de um registo ACLZ (Rev 4 e posteriores) 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 escrito pelo Nano (Rev 4 e posteriores; Pressure(hPa) só com 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 obtido de um registo ACLZ (Rev 1 a 3) Time(ms),Altitude(m),Pressure(hPa),Velocity(m/s),Board temp(C),Raw altitude(m) CSV escrito pelo Nano (Rev 1 a 3) Time(ms),Altitude(m),Pressure(hPa),Velocity(m/s),Board temp(C)
Os registos ACLZ de firmware mais antigo, criados antes de a coluna de altitude em bruto ser acrescentada, expandem-se sem ela.
Placas das revisões 1 a 3
As placas sem sensor de movimento usam o mesmo ficheiro com a mesma forma, só que mais simples. As colunas de movimento não existem e o cabeçalho não tem estatísticas de movimento do lado direito. A coluna Pressure(hPa) fica em terceiro lugar, logo a seguir a Altitude, em ambos os formatos, e um CSV obtido de um registo ACLZ acrescenta Raw altitude(m) no fim. Tudo o resto nesta página aplica-se da mesma forma.