Arming Checks
Why PX4 refuses to arm on a VOXL drone, what each preflight message means, and which checks the VOXL defaults turn off.
Table of contents
- Finding the reason
- Common messages
- Kill switch engaged
- No manual control input
- Arming denied: throttle not in safe position
- Navigation error: No valid position estimate
- Waiting for estimator to initialize
- Estimator not stable
- High Accelerometer Bias or High Gyro Bias
- Accel or Gyro uncalibrated, missing, or inconsistent
- Compass messages
- Battery messages
- Attitude failure or imbalanced propeller
- Arming denied: calibrating
- Disarming denied: not landed
- Checks the VOXL defaults turn off
- Automatic disarm
- Source
PX4 runs a set of health and arming checks continuously. If any check fails, PX4 refuses to arm and reports why. This page covers PX4 v1.18 as shipped in the VOXL SDK, and the parameters the VOXL default parameter set in voxl-px4-params changes.
Finding the reason
QGroundControl shows every failed check. The vehicle status at the top of the screen reads Not Ready; click it to list the reasons. When you try to arm, QGroundControl also announces Arming denied: Resolve system health failures first followed by the failed checks.
Without QGroundControl, run the checks from an adb or ssh shell on VOXL 2:
px4-commander check
This prints Preflight check: OK or Preflight check: FAILED. Most failures are also written to the PX4 log as Preflight Fail: warnings, which you can read with:
journalctl --no-pager -b -u voxl-px4 | grep -i 'preflight\|arming'
Common messages
Kill switch engaged
The kill switch is on. On Starling 2 and Starling 2 Max the kill switch is channel 5, and switch high means motors killed. Flip it off and arm again. If the switch is off and the message stays, check the channel in QGroundControl’s Radio page and the RC_MAP_KILL_SW parameter.
No manual control input
PX4 is not receiving RC. Check that the transmitter is on and bound; for ELRS see voxl-elrs. Manual control lost means the link was working and dropped.
Arming denied: throttle not in safe position
The throttle stick is too high. In Position and Altitude modes the throttle must be at or below about 60% of its travel. In Manual and Stabilized modes it must be at the bottom. Lower the throttle and arm again.
Navigation error: No valid position estimate
The flight mode needs a position estimate and PX4 does not have one yet. On VIO drones this means VIO is not running or not initialized. Check voxl-inspect-vins (or voxl-inspect-qvio on drones that use qVIO) and see Flying with VIO. Arm in Manual mode, or wait for VIO and try again. The same applies to No valid altitude estimate and No valid global position estimate.
Mode not suitable for arming appears with this message when the selected mode cannot run, and Switching to Position is currently not available appears when you flip to a mode that cannot run yet.
Waiting for estimator to initialize
The EKF has not started yet. This is normal for a few seconds after PX4 starts. If it persists, check that the IMU and barometer are publishing data. ekf2 missing data means the EKF stopped receiving sensor data.
Estimator not stable
horizontal position unstable, horizontal velocity unstable, vertical velocity unstable, and height estimate not stable mean the EKF’s estimate is jumping. On VIO drones the usual cause is VIO resetting or a poor environment for VIO: low light, little texture, or a blocked tracking camera. See Environment and Optics.
High Accelerometer Bias or High Gyro Bias
The EKF estimates a large IMU bias. Keep the drone still on level ground after power on. If the message persists, recalibrate the IMU; see IMU calibration.
Accel or Gyro uncalibrated, missing, or inconsistent
| Message | Meaning |
|---|---|
Accel 0 uncalibrated, Gyro 0 uncalibrated | No calibration stored for that IMU. Run IMU calibration. |
Accel Sensor 0 missing, No valid data from Accel 0 | PX4 expected the IMU and is not receiving data from it. |
Accel 1 inconsistent - check cal, Gyro 1 inconsistent - check cal | Two IMUs disagree by more than COM_ARM_IMU_ACC (0.7 m/s²) or COM_ARM_IMU_GYR (0.25 rad/s). Recalibrate. |
The FPV parameter sets turn the accel consistency check off (COM_ARM_IMU_ACC = 0).
Compass messages
These apply to drones that use a magnetometer, such as drones with a GPS and compass module.
| Message | Meaning |
|---|---|
Compass 0 uncalibrated | Calibrate the compass in QGroundControl under Vehicle Setup > Sensors > Compass. |
Compasses 75° inconsistent | Two compasses disagree by more than COM_ARM_MAG_ANG (60°). Recalibrate both, and keep them away from power wiring. |
Compass Sensor 0 missing, Found 0 compass (required: 1) | The compass is not detected. See Compass problems. |
heading estimate invalid, no heading reference | The EKF has no usable heading. |
Strong magnetic interference | A warning only by default (COM_ARM_MAG_STR = 2). Move away from steel and power cables. |
Battery messages
Low battery, Critical battery, and Emergency battery level follow the battery failsafe levels. Charge or replace the battery. Battery unhealthy means the battery reports a fault.
Attitude failure or imbalanced propeller
Attitude failure (roll) or (pitch) means the drone is tilted too far, for example upside down on the bench. Place it level. Imbalanced propeller detected comes from PX4’s failure detector; check the propellers for damage and correct mounting.
Arming denied: calibrating
A sensor calibration is running. Wait for it to finish.
Disarming denied: not landed
PX4 believes the drone is flying and refuses a disarm command. Land first, or use the kill switch in an emergency.
Checks the VOXL defaults turn off
The VOXL 2 default parameter set disables or relaxes several checks that do not apply to VOXL hardware. These messages do not block arming on a VOXL drone with default parameters.
| Check | Parameter | VOXL default | Effect |
|---|---|---|---|
| GPS quality | COM_ARM_WO_GPS | 1 | GPS messages (fix too low, not enough satellites, drift) are warnings, so a VIO drone can arm without GPS. |
| Safety button | CBRK_IO_SAFETY | 22027 | No safety button needed. |
| Power supply | CBRK_SUPPLY_CHK | 894281 | Avionics power and power module checks off. |
| CPU and RAM load | COM_CPU_MAX | -1 | Load check off. |
| SD card | COM_ARM_SDCARD | 0 | SD card and crash dump checks off. |
These checks are off in PX4’s own defaults and stay off on VOXL:
| Check | Parameter | Default |
|---|---|---|
ESC telemetry (ESC telemetry missing, ESC 1 offline) | COM_ARM_CHK_ESCS | 0 |
Ground station link (No connection to the ground control station) | NAV_DLL_ACT | 0 |
Remote ID (Open Drone ID system missing) | COM_ARM_ODID | 0; see Remote ID |
Automatic disarm
With the Starling 2, Starling 2 Max, and most other ModalAI parameter sets, PX4 disarms if the drone does not take off within 20 seconds of arming (COM_DISARM_PRFLT). The FPV parameter sets turn this off. It also disarms shortly after it detects a landing (COM_DISARM_LAND).
Source
The checks are in the PX4 commander module, under src/modules/commander/HealthAndArmingChecks. The PX4 parameter reference describes every parameter on this page.