Arming & Pre-arm Checks

A first build usually gets stuck here: everything is wired, everything reads right, and the vehicle still refuses to arm. That refusal is ArduPilot’s pre-arm check set doing its job, and it always tells you why — the trick is knowing where to read the answer, and resisting the urge to silence the check instead of fixing what it found.

The settings live on the Config tab under the Arming category. The pre-arm results live on the Status & Info tab.

Reading why it will not arm

ArduPilot broadcasts each pre-arm failure as a MAVLink status message and repeats it periodically while the condition persists. The configurator collects those and surfaces them in three places:

  • Status & Info → Pre-arm — a badge reading Clear or N issues, with the actual failure text listed underneath. This is the one to read.

  • The global status bar carries an N pre-arm issues chip, so you notice from any tab.

  • Recent notices carries the raw message stream, for the messages that are not pre-arm failures.

Work the list top down. Most entries name the subsystem and the parameter to look at, and most trace back to a tab in this section — a compass failure to Sensors and Calibration, a battery failure to Power & Battery, an RC failure to Receiver or Ports & Serial.

Warning

ARMING_OPTIONS bit 0 is Disable prearm display. Setting it stops the vehicle sending the very messages this page is about. Leave it clear.

Which checks run

This parameter changed name and meaning in ArduPilot 4.7. Both firmwares are in the field, and the two are inverses of each other, so read the label the app shows you rather than assuming:

Firmware

Parameter

Meaning

4.6 and earlier

ARMING_CHECK

Bitmask of checks to perform. Bit 0 is All, and the default is 1 — every check runs. Clearing bits removes checks.

4.7 and later

ARMING_SKIPCHK

Bitmask of checks to skip. The default is 0 — every check runs. Setting bits removes checks. -1 skips every non-mandatory check, including ones added by future releases.

The configurator binds whichever one your connected firmware reports, labels it accordingly (Check bitmask versus Checks to skip), and edits it as a grid of per-bit checkboxes with a raw numeric box beside it for pasting a value you already have.

Warning

Because the sense is inverted, a bitmask value copied from a 4.6 aircraft is actively dangerous on 4.7 — ARMING_CHECK = 1 meant run everything, while ARMING_SKIPCHK = 1 means skip the barometer check. Do not move the number across by hand. Restoring a 4.6 backup onto 4.7 firmware is flagged as a version mismatch in the Parameters (Expert) tab’s import diff for exactly this reason.

Upgrading an aircraft from 4.6 to 4.7 does the conversion for you, once, on the first boot: if the old ARMING_CHECK was left at a value with the All bit set, the new parameter becomes 0 (run everything); if it had specific bits selected, they are inverted into the equivalent skip mask; and if it was 0 — which used to mean no checks — the new parameter becomes -1, preserving the old behaviour of running nothing. The result is saved, so it happens once and does not re-run.

The check bits are the same set on both, only the polarity differs:

1 Barometer · 2 Compass · 3 GPS lock · 4 INS · 5 Parameters · 6 RC Channels · 7 Board voltage · 8 Battery Level · 10 Logging Available · 11 Hardware safety switch · 12 GPS Configuration · 13 System · 14 Mission · 15 Rangefinder · 16 Camera · 17 AuxAuth · 18 VisualOdometry · 19 FFT

Note

Some checks cannot be turned off by either parameter. Mandatory checks — RC input calibration, and the serial-protocol check described below — run even on a deliberately forced arm.

Checks you cannot skip

The most commonly hit mandatory check is:

Multiple SERIAL ports configured for RC input

More than one SERIALn_PROTOCOL is set to RC Input (23). ArduPilot binds the lowest-numbered such port to the receiver and warns about the others at boot, so the extra ports are not merely redundant — they are a configuration error the firmware refuses to arm through. Fix it on the Ports & Serial tab, which explains how to find the stray port.

Disabling checks

There are legitimate reasons to skip a check — a bench session with no GPS, a compass-less build, an indoor optical-flow aircraft. There is no legitimate reason to skip one because it keeps failing and you would rather fly.

Warning

A pre-arm check that fails on the bench describes a fault that will still be there in the air. Skipping the check does not fix the fault; it removes the last warning you were going to get about it. Fix it, then re-check the box.

If you do skip a check, skip that specific bit rather than reaching for All / -1, and put it back when the temporary reason is gone.

Arming with the sticks

ARMING_RUDDER controls whether the rudder (yaw) stick can arm and disarm the vehicle. On ArduCopter it defaults to 2 — ArmOrDisarm: hold yaw right to arm, yaw left to disarm. 1 allows arming only, and 0 disables stick arming so that only a ground-station command or an auxiliary switch can arm.

Rudder arming only acts with the throttle at zero, within the throttle channel’s deadzone (RCn_DZ), and some flight modes refuse it regardless.

Note

ARMING_REQUIRE appears in the Arming card only on ArduPlane and ArduRover — the parameter does not exist on ArduCopter, so the field will not render on a Copter build. This is the firmware’s doing, not a gap in the configurator.

Warning

The moment arming succeeds, the props are live. Bench work belongs behind removed propellers; see the motor-test guards described on Outputs & Motors.

For the full check-by-check reference and each failure message’s meaning, the ArduPilot wiki is canonical: Arming / Disarming and Prearm Safety Checks.