Starling 2 Max (D0012) — Altitude spike / shoot-up on takeoff, possible Z-axis accelerometer bias from thermal drift
-
Hi,
We're experiencing an issue on our Starling 2 Max (D0012) where the drone occasionally shoots upward aggressively right after takeoff. It seems like the flight controller may be overcompensating due to an incorrect gravity reading from the IMU.
Platform details:Starling 2 Max, Device ID: D0012
VIO: voxl-open-vins-server (OpenVINS)
Flight controller: PX4 via voxl-px4What we observed:
We logged voxl-inspect-imu data at standstill over several minutes with the fan removed to observe thermal behavior. The Z-axis accelerometer drifts from -9.81 m/s² at 34°C to approximately -9.90 m/s² at 54°C. That's roughly 0.005 m/s² per °C of temperature increase.
Temp 34.7°C → accl_z: -9.81
Temp 42.1°C → accl_z: -9.88
Temp 48.8°C → accl_z: -9.90
Temp 54.0°C → accl_z: -9.89Sometimes it even goes to 10 m/s2
X and Y accelerometer values remain stable across temperature (±0.02 m/s²). Gyro is also stable.
Our theory:
If the IMU reports gravity as -9.90 instead of -9.81, PX4's EKF2 thinks there's more downward acceleration than there actually is. On takeoff, it compensates by applying extra thrust, causing the upward spike. The issue seems to occur more frequently when the drone has been sitting powered on for several minutes before takeoff (higher IMU temperature).
What we've tried:IMU calibration at multiple temperatures and positions
Installed a heat sink to control cpu temperature
Thermal soak before VIO initialization
Cooling fan on the VOXL 2 to reduce operating temperature
ZUPT is enabled at startup (zupt_only_at_beginning: true)Questions:
Does PX4 on the VOXL platform use the IMU's reported gravity magnitude to scale thrust output? If so, would a 0.09 m/s² bias directly cause a thrust overshoot on takeoff?
Is there a recommended way to apply temperature-compensated IMU calibration on the Starling 2 Max? Does voxl-calibrate-imu support multi-point temperature compensation?
Should we be adjusting any EKF2 parameters to be more tolerant of Z-axis accelerometer bias drift?
Has anyone else experienced this shoot-up behavior on the Starling 2 platform?
Any calibration tips?
Any guidance would be appreciated. Happy to share full logs if needed.
Thanks -
@shiva-rv Try heating up the IMU by stressing the CPU then shooting it with air to create a large thermal gradient between the silicon of the VOXL2 and the IMU die itself, I predict you'll see the Z bias jump like crazy, but X and Y not so much.
You might also observe that the temperature gradient determines the bias, not the absolute temperature, hence using a temperature model for compensation is useless, and not applied by modal: https://gitlab.com/voxl-public/voxl-sdk/services/qrb5165-imu-server/-/blob/master/server/src/imu_interface.cpp?ref_type=heads#L168
If you're curious about the physics of why MEMs IMUs like ICM42688 act this way I'm sure your favorite AI chatbot could give you a nice explanation about the materials sciences at play here.
Practically, thermally isolate the IMU component as much as possible.