One copy of the EKF reports itself unhealthy
What ArduPilot says:
- EKF3 core N unhealthy
- no EKF3 cores
- EKF2 core N unhealthy
- no EKF2 cores
The EKF, ArduPilot's position and attitude estimator, runs one copy (a core, or lane) per IMU; the number in the message counts from 0. A copy calls itself unhealthy when it has an internal fault, when GPS speed, position and height all disagree with it at once, or when, standing on the ground without GPS, its position or height has moved by more than 1 m. “no EKF3 cores” means no copy could be created at all, usually for lack of memory.
What to do, most likely first
The aircraft is being moved or shaken while it stands disarmed (carried, on a vehicle), so a copy's position drifts.
FixPut it on firm ground and wait about 10 s. A copy that stays unhealthy for 5 s restarts by itself (“EKF3 IMU0 forced reset”).
The barometer reading drifts or jumps: sunlight, wind or prop wash on the sensor, or a board still warming up.
CheckWatch the altitude in the ground station while the aircraft stands still: it should stay within about 1 m.
FixShield the barometer from light and airflow with open-cell foam; give a cold board a minute to warm up.
One IMU gives worse data than the other, so only its copy fails.
CheckThe number in the message is always the same; “Accels inconsistent” or “Gyros inconsistent” may appear too.
FixCalibrate the accelerometers again. If the same IMU stays bad after that, the sensor itself is suspect: test the board on the bench before flying it.
“no EKF3 cores”: there was not enough memory for the EKF.
Check“EKF3 not enough memory” or “EKF3 allocation failed” appeared at start-up.
FixSee that message: fewer copies in
EK3_IMU_MASK, or fewer large features on a small board.
Parameters to look at
| Parameter | What it is |
|---|---|
EK3_IMU_MASK | Bitmask of active IMUs |
EK3_ENABLE | Enable EKF3 |
AHRS_EKF_TYPE | Use NavEKF Kalman filter for attitude and position estimation |
Where to do it:Setup & Tuning Guide
The code that sends it
EKF3 core N unhealthy
libraries/AP_NavEKF3/AP_NavEKF3.cpp NavEKF3::pre_arm_check() · Open in ArduPilot Copter-4.7.1
no EKF3 cores
libraries/AP_NavEKF3/AP_NavEKF3.cpp NavEKF3::pre_arm_check() · Open in ArduPilot Copter-4.7.1
EKF2 core N unhealthy
libraries/AP_NavEKF2/AP_NavEKF2.cpp NavEKF2::pre_arm_check() · Open in ArduPilot Copter-4.7.1
no EKF2 cores
libraries/AP_NavEKF2/AP_NavEKF2.cpp NavEKF2::pre_arm_check() · Open in ArduPilot Copter-4.7.1