The Nano is built around a very high quality pressure sensor and, on Revision 4 and later, a motion sensor as well. This page explains where its numbers come from, how accurate they are, and the few things that can affect them, so you know what to expect from your data.
The pressure sensor
Altitude on the Nano comes from measuring air pressure, using the Bosch BMP581, one of the most accurate barometric sensors available. It is a 24-bit capacitive sensor with a relative accuracy of around half a metre, and noise low enough to pick out altitude changes of just a few centimetres. Its capacitive design is a step on from the piezoresistive sensors used in earlier designs, with much lower noise, lower power draw and higher data rates. It also measures its own temperature and compensates its pressure readings on the chip, which keeps the raw pressure accurate as the sensor warms or cools.
We run the BMP581 at 80 Hz with 16 times oversampling: for every pressure value it outputs, it takes 16 internal measurements and averages them, so around 1,280 measurements a second feed into the data. That trades raw conversion speed for much lower noise, with plenty of speed in hand for even a fast boost. Put simply, the sensor is far more precise than the atmosphere it measures is predictable, so it is rarely the limiting factor in your results.
Revision 1 to 3 boards use the older Bosch BMP390, a piezoresistive sensor, at 50 Hz with 8 times oversampling, the most it supports. It is still a very capable sensor, and only a small number of early boards were made before the move to the BMP581.
launch_detect to 1 m, stand the Nano on a desk and wait for the green blips. Then throw it up onto something at least a metre and a half higher, such as the top of a tall cupboard, and leave it there. A throw usually doesn't give enough steady thrust for the quick launch route, so it confirms on height alone after 2.5 seconds, which is why it needs to land somewhere that keeps it above the launch detect height. The final height on the chart is the height of the cupboard above the desk, shown with surprising accuracy for a pressure-based measurement. Remember to set launch_detect back before you fly.How the altitude is worked out
The Nano converts the measured pressure into a height using the international standard atmosphere (ISA), the model used across aviation and competition flying, with a sea level pressure of 1013.25 hPa and a temperature of 15 °C. These values are fixed in the firmware and can't be changed, so every flight, and every flyer, is measured on exactly the same basis. The conversion matches the FAI formula exactly:
altitude (m) = ((15 + 273.15) ÷ 0.0065) × (1 − (pressure ÷ 1013.25)0.190266669)
Pressure is only part of the story, though. There are moments in every flight when the air pressure the sensor sees is wrong: the motor and the airflow upset it at launch, the ejection charge sends a pulse through the rocket, and wind and light can cause spikes. Even the air flowing past the vent holes can cause errors in the pressure. Taken on its own, a pressure trace would show those as false climbs and drops.
So when the flight is saved, the Nano runs our TrueFuse and TruePath processing over the whole flight. On Revision 4 and later, TrueFuse uses the motion sensor to hold the altitude true through the launch, where the pressure can't be trusted, and bridges other short pressure disturbances. TruePath then removes spikes such as the ejection pulse and smooths the trace. The altitude, velocity and apogee in your log come from that corrected trace, and the raw barometric altitude is kept alongside it, so you can always see what the sensor measured.
How it works, and how velocity and apogee are calculated, is on the TrueFuse, TruePath and apogee page.
The ground reference
Every height is measured from the pad, so the Nano needs a rock solid zero. At the end of start-up it takes a short burst of pressure readings, drops the highest and lowest and averages the rest, which gives a clean starting point even if the rocket is being moved.
While it waits on the pad it keeps a record of the last few seconds, and follows the slow drift in pressure as the weather changes while ignoring sudden steps such as fitting a nose cone. When a launch is detected, the zero for the whole flight is set from the average of the readings 4 to 8 seconds before that moment. Averaging four seconds of data removes the noise, and because those readings are from before lift-off, the climb itself can't drag the zero upwards.
The zero is the average of the readings 4 to 8 seconds before launch detect, all from before lift-off, and is used for the whole flight.
What affects the altitude in practice
The sensor itself is rarely the limit. What moves the numbers is the air on the day, the flight itself and how the Nano is installed.
The conditions on the day
The Nano works out height using the standard atmosphere: a ground-level air pressure of 1013.25 hPa and a temperature of 15 °C. On the day, the real air is almost never exactly that, and both affect how a change in pressure turns into a change in height:
- Temperature. Warm air is thinner than the standard assumes, so the rocket climbs further for the same drop in pressure, and cold air the opposite. The effect is roughly 1% for every 3 °C away from 15 °C.
- Air pressure. The pressure at the launch site depends on the weather and on how high the site is. When it differs from the standard, the height scales very slightly, by roughly 0.2% for every 10 hPa.
These are small effects, and you can correct for both after the flight. On the Altimeter Cloud flight chart, enter the actual ground-level pressure and the temperature on the day, and the chart recalculates the altitude to match. You can then download the adjusted flight log if you need it.
The flight itself
- Launch. The motor and the rush of air off the pad upset the pressure for a moment.
- Airflow past the vent holes. Speed and the rocket's angle to the airflow change the pressure the vent holes see.
- Transonic and supersonic flight. Near and above the speed of sound, shock waves around the rocket can cause large pressure errors.
- Ejection. The charge sends a pressure pulse through the rocket.
On their own these would show as false climbs and drops. TrueFuse and TruePath correct most of them when the flight is saved, and the raw barometric altitude is always kept in the log alongside the corrected one.
The installation
- Vent holes. The sensor is only as good as the air it can see. Too few, too small or badly placed holes make the reading lag or wander. See the vent hole calculator.
- Light. Pressure sensors are sensitive to light, so mount the Nano under its bay cover and keep the vent holes small. See installing the altimeter.
The Nano
- Warming up after USB. Charging warms the board a little. If the Nano has just been on USB, let it sit in flight mode for up to six minutes so it settles to the surrounding temperature before you launch.
- Very high altitude. The sensor is rated down to about 300 hPa, around 9,200 m (30,000 ft) on the standard atmosphere. Above that it will most likely keep recording a believable altitude, but its accuracy isn't characterised, so we can't vouch for it.
The motion sensor (Revision 4 and later)
Revision 4 and later boards also carry an ST LSM6DSO32 motion sensor, an accelerometer and gyroscope together. Both always run at their full ranges, so even a hard boost never runs off the scale. They give you the acceleration trace, the launch and rail angles and the tilt through the flight, help confirm a real launch, and are what TrueFuse uses to correct the altitude through the launch and other moments when the pressure can't be trusted.
| Property | Accelerometer | Gyroscope |
|---|---|---|
| Range | ±32 g | ±2,000 °/s |
| Resolution per count | 0.976 mg | 0.07 °/s |
| Output resolution | 16-bit | 16-bit |
With high_speed_sensor on, the default, the motion sensor samples at 1,667 Hz (or the gyro at 3,333 Hz with setting 2) and each logged row is the average of those samples. That counters motor and airframe vibration affecting the readings, so the logged acceleration, rotation and angles come out cleaner.
For the angles, the gyroscope tracks the rocket's attitude through the flight from a zero it measures on the pad. The accelerometer is only trusted where it really reads gravity, on the pad and in a slow descent, because thrust and spin make it misleading. That keeps motor thrust from dragging the angles off, which is where general-purpose fusion filters fall down in a rocket. There is no magnetometer, so the heading can still wander slowly, but over the short span of a flight the drift stays small.
To get the most from it, mount the Nano firmly and square to the rocket, calibrate the IMU, and let the rocket sit still on the pad for about a minute before launch so the Nano can fine-tune its gyro. A loose mount will throw the angles off.
What the log stores
Each column is saved to a precision that suits what it measures, rather than every last digit of the sensor, which keeps the files a manageable size with all the detail you need. ACLZ logs, the default, hold the same data to the same precision as a CSV, plus the raw barometric altitude before any processing.
| Column | Units | Saved as |
|---|---|---|
| Time | ms | 2 decimals (10 microseconds) |
| Altitude | m | 3 decimals |
| Velocity | m/s | 2 decimals |
| Acceleration X, Y, Z | mg | Whole numbers |
| Total acceleration | mg | 1 decimal |
| Gyro X, Y, Z | °/s | Whole numbers |
| Pitch, roll, yaw, tilt | degrees | 2 decimals |
| Board temperature | °C | 2 decimals, every 50th row |
Pressure (Rev 1 to 3, or with include_pressure) | hPa | 6 decimals, worked out from the final altitude |
Times are relative to lift-off, so the rows from the pad before launch are negative. The motion columns are on Revision 4 and later boards only. See flight log format for the full layout.