Every flight is saved to the Nano's drive as a flight log named flightlog<tag>-<n>.aclz, with a matching flightinfo<tag>-<n>.html page beside it summarising the flight. The tag is the last four characters of the Nano's serial number and n is the flight number.
By default the log is an ACLZ file, the Nano's own compressed format. If you set log_format to 0 in the settings it is a CSV file instead. This page describes both, and the columns you get from each.
Why ACLZ is the default
ACLZ records exactly the same flight as a CSV, to the same precision, in roughly a fifteenth of the space, and we recommend leaving it as the default.
- Longer flights. Up to 38,000 samples in one log, against 22,000 for a CSV (20,000 with
include_pressure). At 417 Hz that is the difference between capturing a long descent in full and running out of log. - More flights on the drive. A typical flight is a few tens of kilobytes as ACLZ, so the drive holds the full 39 flights the Nano keeps. As CSV, around ten typical flights fill the drive, and a full-length CSV log takes most of it on its own.
- More data. Every ACLZ log also keeps the raw altitude, exactly as the barometer measured it before any processing, and the pressure. So you can always see what TrueFuse and TruePath did, and the Altimeter Cloud can chart the raw trace beside the processed one.
- Nothing is lost in the compression. The CSV you download from the Altimeter Cloud is exactly the CSV the Nano would have written, digit for digit.
- Signed twice. The Nano signs the file itself and the CSV it expands to, so a CSV downloaded from the Altimeter Cloud can still be verified on its own.
- Quicker to handle. Small files copy and upload faster, which you notice most when uploading straight from the Nano over USB.
You can't open an ACLZ file in a spreadsheet. Upload it to the Altimeter Cloud (free, with no account needed) to see the charts and download a CSV, or open the flight info page beside it for a quick look straight off the drive. Only choose CSV if you need to open logs straight off the drive in a spreadsheet and your flights are short enough to fit.
| ACLZ (default) | CSV | |
|---|---|---|
| Samples per flight | Up to 38,000 | Up to 22,000 (20,000 with include_pressure) |
| Size of a typical flight | A few tens of KB | A few hundred KB |
| Raw altitude column | Yes | No |
| Pressure column | Yes | Rev 1 to 3 always; Rev 4 and later only with include_pressure |
| Opens in a spreadsheet | No: upload it, then download a CSV | Yes |
| Signature | Ed25519, over the file and over the CSV it expands to | Ed25519, over the file |
How ACLZ works inside, and how to read it with your own software, is covered in the software manual, with a reference converter.
How a CSV log is laid out
A CSV, whether written by the Nano or downloaded from the Altimeter Cloud, has three parts in this order: a block of header rows with a summary of the flight and the settings it was recorded with, a single blank row, then a row of column names starting with Time(ms), followed by one row per recorded sample.
If you are writing a parser, find the row that starts with Time(ms) rather than counting rows, and treat everything from there on as the data. The header is laid out as label and value pairs side by side, so it reads tidily in a spreadsheet: a pair on the left, a pair in the middle and, on Revision 4 and later, a further pair on the right with the motion figures.
The header
The header carries everything you need to understand the flight without reading a single data row.
- Flight summary. The apogee and its time, the landing height and time, the maximum upward velocity, the landing velocity and the average samples per second.
- Identification. The device tag, all three competitor tags and the serial number.
- Conditions and settings. The board temperature and battery voltage at the start and end of the flight, the firmware version, the board revision and the individual settings flown, such as sample speed, hybrid mode, orientation, launch protection, sample ratio and recording stop.
- Processing. Which versions of TrueFuse and TruePath processed the flight and whether TrueFuse was applied, how the launch was confirmed, and how lift-off time was set.
- Revision 4 and later. The rail angle, the dominant axis, the calibration offsets and quality, the sensor sync offset and any sensor saturation. The right-hand side adds motion statistics: burnout and ejection times, burnout and descent velocities, the maximum and average accelerations during the climb, the burn and the descent, and the launch pitch, roll, yaw and tilt.
- Recovered flights carry a
Recovered,1row. - Adjusted log reads "no" for an original flight, and shows if the log has since been recalculated on the Altimeter Cloud with a different pressure or temperature.
The Verification hash field holds the log's Ed25519 digital signature, which lets anyone confirm the file hasn't been altered. Logs from firmware before 1.52 carry an HMAC-SHA256 hash here instead. See flight log verification.
The settings string
A single Settings string field packs the configuration used for the flight into one line. The configurable keys match the options on the settings page.
| Key | Holds |
|---|---|
| fp | Sea level pressure used to work out height (hPa), fixed at 1013.25 |
| ft | Temperature used (°C), fixed at 15 |
| ut | Whether sensor temperature was used, always 0 |
| ss | Sample speed (Hz) |
| sr | Sample ratio |
| ms | Maximum samples |
| ld | Launch detect height (m) |
| lp | Launch protection (mG) |
| sl | Start-up lock |
| rs | Recording stop |
| mp | Maintain power |
| hm | Hybrid mode |
| or | Orientation |
| se | Sync enable (Rev 4 and later) |
| os, ii, kf | Internal pressure handling settings (oversampling and filter) |
| rcp | The ground reference captured at launch |
| rmi | Launch time, in milliseconds |
| cgx, cgy, cgz | Stored gyro calibration offsets (Rev 4 and later) |
| cax, cay, caz | Stored accelerometer calibration offsets (Rev 4 and later) |
| zbb | Internal test flag, always 0 on a normal flight |
| sda, sdm, sdn, sds | Start-up ground reference: the trimmed average and median altitude of the pad readings, how many were taken, and their spread (cm) |
| sbf, sbt | The pressure sensor's first reading after power-on and its reading at the end of its warm-up (hPa) |
The data columns
After the blank row and the column names, each row is one recorded sample, in this order. The motion columns (acceleration, gyro, pitch, roll, yaw and tilt) are on Revision 4 and later boards.
| Column | Units | Format | What it is |
|---|---|---|---|
| Time(ms) | ms | 2 decimals | Time from lift-off, with lift-off as zero |
| Altitude(m) | m | 3 decimals | Height above the pad, after TrueFuse and TruePath |
| Velocity(m/s) | m/s | 2 decimals | Vertical speed, worked out from the processed altitude |
| acceleration_x(mG) | mG | Whole numbers | Acceleration along the board's X axis |
| acceleration_y(mG) | mG | Whole numbers | Acceleration along the Y axis |
| acceleration_z(mG) | mG | Whole numbers | Acceleration along the Z axis |
| acceleration_total(mG) | mG | 1 decimal | Overall acceleration magnitude with the 1 g of gravity taken out, so it sits near zero at rest |
| gyro_x | °/s | Whole numbers | Rotation rate about the X axis |
| gyro_y | °/s | Whole numbers | Rotation rate about the Y axis |
| gyro_z | °/s | Whole numbers | Rotation rate about the Z axis |
| Board temp(C) | °C | 2 decimals | Sensor temperature, on every 50th row and blank on the rows between |
| pitch | degrees | 2 decimals | Attitude angle, tracked by the gyro from its zero on the pad |
| roll | degrees | 2 decimals | Attitude angle, tracked by the gyro from its zero on the pad |
| yaw | degrees | 2 decimals | Attitude angle, tracked by the gyro from its zero on the pad |
| tilt | degrees | 2 decimals | Angle away from vertical |
| Pressure(hPa) | hPa | 6 decimals | Air pressure for the processed altitude, worked out with the standard atmosphere. Always in a CSV from an ACLZ log; in a CSV written by the Nano only with include_pressure set to 1 |
| Raw altitude(m) | m | 3 decimals | Height above the pad exactly as the barometer measured it, before any processing. CSVs from ACLZ logs only |
- Time is measured from lift-off. The Nano keeps the seconds before the launch was confirmed, so the first rows have negative times: 5 seconds at the full rate, and 3 more seconds before that at 50 Hz in an ACLZ log or 20 Hz in a CSV.
- Times are written to two decimal places of a millisecond, from the sensor's own clock, so the rows are evenly spaced even at 833 Hz.
- With hybrid mode on, the descent is logged at a lower rate, so the spacing between rows changes. Always use the Time column rather than counting rows.
- The acceleration and gyro axes are the board's own axes, which line up with the rocket according to the orientation.
- Every data row ends with a trailing comma, so a strict parser will see one empty field at the end of each row.
Altitude and Raw altitude share the same zero, so you can plot one against the other and see exactly what the processing changed. The two lie on top of each other for most of the flight, and part only where the launch, an ejection charge or a pressure spike upset the barometer.
Column names
The row of column names in each case, exactly as it appears:
CSV from an ACLZ log (Rev 4 and 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 written by the Nano (Rev 4 and later; Pressure(hPa) only with 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 from an ACLZ log (Rev 1 to 3) Time(ms),Altitude(m),Pressure(hPa),Velocity(m/s),Board temp(C),Raw altitude(m) CSV written by the Nano (Rev 1 to 3) Time(ms),Altitude(m),Pressure(hPa),Velocity(m/s),Board temp(C)
ACLZ logs from older firmware, made before the raw altitude column was added, expand without it.
Revision 1 to 3 boards
Boards without the motion sensor use the same file in the same shape, just simpler. The motion columns are absent, and the header has no motion statistics on its right-hand side. The Pressure(hPa) column sits third, straight after Altitude, in both formats, and a CSV from an ACLZ log adds Raw altitude(m) at the end. Everything else on this page applies in the same way.