The attitude estimate is not ready at the moment of arming
What ArduPilot says:
- PreArm: AHRS not healthy
When you asked it to arm, the EKF (ArduPilot's position and attitude estimator) did not report itself healthy: it has not started, has run for less than a second, reports an internal fault, or on the ground its position or height estimate is more than 1 m away from what the sensors say. Without it the copter does not know which way is up. This test cannot be switched off.
What to do, most likely first
You tried to arm too soon after power-on: the EKF was still starting.
FixKeep the copter still until “EKF3 IMU0 tilt alignment complete” has appeared, then arm.
The copter was moved, carried or bumped while the EKF was starting.
FixPut it down, reboot and leave it still for the first 20 to 30 seconds.
A sensor the EKF depends on is faulty: the other pre-arm messages name it.
CheckAsk the ground station to run the pre-arm checks, or wait 30 seconds, and read every “PreArm: …” line.
FixFix what those messages name (gyros, accelerometers, barometer, compass); this one then clears.
Parameters to look at
| Parameter | What it is |
|---|---|
AHRS_EKF_TYPE | Use NavEKF Kalman filter for attitude and position estimation |
EK3_ENABLE | Enable EKF3 |
The code that sends it
PreArm: AHRS not healthy
ArduCopter/AP_Arming.cpp AP_Arming_Copter::arm_checks() · Open in ArduPilot Copter-4.6.3
ArduCopter/AP_Arming_Copter.cpp AP_Arming_Copter::arm_checks() · Open in ArduPilot Copter-4.7.1