Lumipad

Flight controller, configured.

Everything that happens between the build being physically complete and the drone being ready to fly. Firmware selection, first connection, flashing, port mapping, motor and receiver configuration, failsafe, OSD, flight modes, and the propellers-off verification ritual that catches mistakes before they become crashes. This is the page that closes the gap from "I have a drone" to "I have a drone that can fly safely."

Version 1.0 · Updated 05·2026 Author: Lumipad Engineering License: CC-BY-SA-4.0 Languages: EN

A configuration is fragile until it's verified.

Flight controller setup is the place where most first-time builds go wrong — not because the steps are difficult, but because there are many of them, the consequences of skipping one show up only on first arm, and the configurator software is dense with options that don't matter alongside the small number that do. A page that lays out the steps in order, identifies the few that genuinely matter, and shows the verification ritual is more useful here than another general-purpose drone tutorial.

The page is structured as one long scrolling article, ordered from most fundamental (firmware selection) through most procedural (first arm). Read top to bottom your first time through; return to specific sections via the side-rail TOC for later builds. The sections are written to be useful when reached via direct anchor link — each one stands on its own. For Lumipad cohort default builds, INAV on a SpeedyBee F405 V4 is the assumed reference platform; sections call out where ArduPilot or BetaFlight differ.

Section 01 Decision before any keystrokes

Pick your firmware.

Three flight controller firmware ecosystems exist for the kind of FC the Lumipad cohort uses, and they are not interchangeable. Picking the wrong one means you'll fight the configurator for the next month or have to re-flash everything. The decision is mostly determined by what you want the drone to do.

The three ecosystems:

  • BetaFlight — the FPV racing/freestyle default. Best documentation and largest community. Tuned for manual flight: acro mode is its native habitat. Has limited autonomous flight support (waypoint missions are bolted on, not native).
  • INAV — a fork of BetaFlight that added GPS-based autonomous flight as a first-class feature. Position hold, return-to-home, waypoint missions all work natively. Slightly behind BetaFlight on tuning sophistication and release cadence, but for survey work this rarely matters.
  • ArduPilot — the heavyweight open-source autopilot. Full mission planner integration, ground station support, redundancy options. Steeper learning curve, more configuration overhead. Used in research-grade systems and commercial drones.

For Lumipad cohort builds, the defaults are:

Build Recommended firmware Why Alternatives
5"
INAV Survey work needs reliable position hold and return-to-home; INAV is purpose-built for this without the configuration overhead of ArduPilot.
Native GPS-based flight modes; cohort-tested config dump available; English documentation strong enough.
BetaFlight if doing demo/exhibition flying only; never ArduPilot for 5" survey.
7"
INAV Same reasoning as 5". Larger frame doesn't change the firmware decision.
Position hold matters even more at 7" — autonomous waypoint surveys are the primary use case.
ArduPilot if the build will carry research-grade multi-sensor payloads needing parameter-level control.
10"
ArduPilot Heavy-payload research builds want full Mission Planner integration, telemetry redundancy, and parameter-level mission control. The complexity is justified at this tier.
Ground station integration; multi-sensor payload triggers; redundant compass and GPS support.
INAV is acceptable for 10" if the work is straightforward NDVI-only and the operator wants firmware consistency with their 7".

One firmware per drone. Don't try to dual-flash or alternate firmware on the same FC. Pick one, configure it well, and stay with it. The configurator settings, the OSD layout, the mode mapping — all of it is firmware-specific.

Match firmware to FC capability. Some FC boards target only certain firmware. The SpeedyBee F405 V4 (Lumipad cohort default) supports all three; the Matek H743 (an alternative for 10" builds) is best with ArduPilot. Check the FC manufacturer's published target list before assuming.

Section 02 ~15 min · ~30 min if drivers fight you

First connection.

Plug the FC into the laptop with USB-C. Open the configurator. See the FC respond. Sounds simple — and most of the time it is. The 30% of the time it isn't, the cause is invariably USB drivers. This section walks through both the happy path and the recovery path.

What you need:

  • The flight controller (already mounted in the frame, or on the bench — both work for first connection).
  • A working USB-C cable. Specifically a data cable, not a charging-only cable. The latter is a common source of an entire wasted afternoon. Test the cable on another USB device first if uncertain.
  • A laptop with the configurator software for your chosen firmware: BetaFlight Configurator, INAV Configurator, or Mission Planner (for ArduPilot). All are free downloads.

The happy path: Install the configurator. Connect the FC via USB. Open the configurator. The FC appears in the connection dropdown as a COM port (Windows) or /dev/tty.usbmodem... (macOS, Linux). Click Connect. The configurator shows a graphical model of your FC with live attitude data — pitch, roll, yaw responding when you tilt the FC by hand. This is the moment to verify the FC is alive and the gyro is working.

USB driver troubleshooting

If the FC doesn't appear in the configurator's connection list, the cause is one of three things, in order of frequency:

  1. USB cable is charge-only. Try another cable. Many cables that came with phones are charging-only. A cable that handled file transfer between your laptop and another device will work.
  2. FC is in DFU mode (bootloader). When the FC is in DFU mode, it appears as a "USB DFU device" in your OS, not as a COM port. The configurator has a separate "Flash Firmware" tab that handles DFU; the connection dropdown won't see it. To exit DFU mode, unplug, wait 5 seconds, plug back in (without holding the bootloader button if your FC has one).
  3. USB driver missing. Windows sometimes needs the SiLabs CP210x driver or STM USB driver installed manually. The configurator's documentation links to these. macOS and Linux generally don't need extra drivers.

Once connected, before doing anything else, take a screenshot or note of the firmware version reported. This becomes the baseline you'll reference if anything goes wrong later. The configurator typically shows firmware target name (e.g. SPEEDYBEEF405V4), firmware version (e.g. INAV 7.1.2), and FC hardware ID. All three are useful when asking for help in graduates Slack or vendor forums.

Section 03 ~20 min

Flash firmware.

New FCs ship with whatever firmware the manufacturer happened to load — often outdated, often the wrong firmware for your needs. The first real configuration step is flashing the version of INAV (or BetaFlight, or ArduPilot) you actually want. This is also the most reversible mistake to make: if anything goes wrong, you re-flash.

Before flashing, do three things:

  1. Identify the correct target. Each FC has a specific build target string. For the SpeedyBee F405 V4 with INAV, the target is SPEEDYBEEF405V4. For BetaFlight on the same hardware, the target is also SPEEDYBEEF405V4 but the firmware is different. Mismatching firmware to target results in a bricked FC that can usually be recovered but disrupts the build session.
  2. Save current configuration. If the FC was already partly configured, dump the current config to a text file. In INAV/BetaFlight: connect, open CLI tab, type diff all, copy the entire output to a file. In ArduPilot: Mission Planner has a parameter export. If anything fails, this dump is what restores you.
  3. Pick a stable version. Don't flash bleeding-edge release candidates for production builds. As of mid-2026, INAV 7.x is the stable line; INAV 8.x is in active development. Stick with stable for cohort builds.

The flash procedure:

  1. In the configurator, navigate to the Firmware Flasher tab.
  2. Select the target board (or load a custom .hex file you downloaded from the firmware project's release page).
  3. Click "Load Firmware (Online)" or browse to your local .hex file.
  4. Click "Flash Firmware". The FC enters DFU mode; the flasher writes; the FC reboots; the configurator should reconnect automatically.
  5. Verify by checking the firmware version in the connection summary matches what you intended to flash.

Recovering a "bricked" FC

If a flash goes wrong and the FC won't connect anymore — black screen, no LEDs, no COM port — it's almost certainly recoverable. The FC has a separate bootloader region that the regular firmware can't overwrite, so it can always re-flash via DFU mode. Procedure:

  1. Unplug the FC from USB.
  2. Hold the bootloader button (a small surface-mount button, usually labeled BOOT) on the FC PCB. If your FC doesn't have a button, short the BOOT pads with tweezers.
  3. While holding, plug in USB.
  4. Release the button. The FC should now appear as a "STM Device in DFU Mode" in your OS.
  5. In the configurator, the Firmware Flasher tab can now flash directly via DFU. Pick your target and proceed.

This procedure has recovered every single "bricked" FC we've seen in the cohort program. If it doesn't work for you, the cause is a faulty USB cable (try another) or a different DFU-mode quirk specific to your FC (consult the FC's manual).

Section 04 ~10 min · the most common source of "drone won't arm"

Port mapping.

The FC has multiple UART (serial) ports. Each port can serve a specific function: receiver, GPS, OSD, telemetry, etc. The Ports tab in the configurator is where you tell the firmware which port serves what. This is the single most common configuration mistake — the cause of half the "everything is wired but nothing works" tickets in graduates chat.

The SpeedyBee F405 V4 (Lumipad cohort default FC) has these UART ports physically broken out to the FC's pads or solder pads:

UART Default cohort use Configurator setting Wires here
UART1
Receiver (RX/TX) ELRS or CRSF receiver. Bidirectional protocol means both RX and TX wires are needed.
Serial RX = ON; configure protocol below in Configuration tab.
RX1 → receiver TX. TX1 → receiver RX.
UART2
GPS module BN-880 or M10 GPS. The GPS sends position data; the FC can also send commands to the GPS.
GPS = ON; baud 38400 typically (check your specific GPS's spec).
RX2 → GPS TX. TX2 → GPS RX. Plus 5V and ground.
UART3
FPV/OSD or telemetry For analog FPV with OSD: connect to the video transmitter. For digital FPV (DJI O3, HDZero): the FPV unit connects here, and OSD data is sent to it.
Configurator setting depends: OSD = ON for HDZero; "MSP" for DJI; analog OSD is usually a separate config in newer FCs.
Varies by FPV unit — refer to the unit's manual.
UART4
Spare Available for ESC telemetry, second GPS, lidar altimeter, or other accessory.
Default OFF; turn on the specific function (ESC Telemetry, etc.) when adding accessories.
Whatever accessory you wire in.
SBUS
Legacy receivers Dedicated SBUS pad for older FrSky-style receivers. Skip if using ELRS/CRSF on UART1.
Not used for cohort default builds (UART1 with CRSF is preferred).
FrSky receiver SBUS out → SBUS pad on FC.

The pattern: each accessory uses one UART port. If you forget to enable that UART for the right function in the Ports tab, the firmware will not see the accessory even though it's correctly wired. Symptoms include "no GPS lock" (UART2 not set to GPS), "RX bind succeeds but no stick input in configurator" (UART1 not set to Serial RX), and so on.

After changing port settings, click Save and Reboot. The ports tab does not apply settings live — they only take effect after reboot. Many "I configured ports but it still doesn't work" issues are actually "I forgot to reboot."

Section 05 ~15 min · always do this propellers-off

Motor configuration.

Mapping motors to outputs 1–2–3–4 in the configurator. Verifying that each motor spins in the correct direction. Setting the ESC protocol. Configuring BLHeli for ESC-level tuning. All of this is done with propellers physically removed — this section does not apply once the props are on.

Propeller orientation in a quadcopter is not arbitrary. Two motors spin clockwise (CW), two spin counter-clockwise (CCW). The diagonal pairs match: front-right and rear-left both CW (or both CCW); front-left and rear-right opposite. This balances yaw torque so the drone can hover without spinning around its own axis.

The configurator's Motors tab shows the four motor outputs and lets you spin each one individually at low throttle. Verify two things in this tab:

  1. Motor mapping — when you click "Test motor 1", the front-right motor should spin (or whatever motor is mapped as motor 1 in your FC's documentation; this varies). If a different motor spins, the wires are swapped at the FC. Either re-solder the wires or use the configurator's motor remap setting.
  2. Rotation direction — when motor 1 spins, the prop nut should be tightening, not loosening. If the rotation is backwards, you can either swap any two of the three motor wires (electrical solution) or use BLHeli's "Motor Direction Reversal" feature (firmware solution; preferred since it doesn't require re-soldering).

Propellers-off rule

Every step in this section is done with propellers physically removed from the motors. Not "throttle low so they don't spin" — physically off the motor shafts and on the workbench. A cohort instructor recently shared a video of what a 5×4.3×3 prop does to a hand at 30% throttle. We are not going to share that video. Take the props off. The drone has no means to launch itself by accident if there are no props on. With props on, the test-motor feature in the configurator can launch the drone.

ESC protocol selection. The Configuration tab has an ESC protocol setting. For cohort builds:

  • DSHOT600 — the cohort default. Digital protocol, fast, robust. Works on all modern ESCs (BLHeli_S, BLHeli_32).
  • DSHOT300 — fallback if DSHOT600 has issues. Slower but more tolerant of marginal wiring.
  • Multishot / Oneshot125 — older analog protocols. Don't use unless your ESCs are too old for DSHOT (rare in current builds).

BLHeli configuration. The configurator has a separate BLHeliSuite passthrough (or BLHeli_32 Suite passthrough) that lets you communicate with the ESC firmware directly. Settings worth tuning:

  • Motor direction — flip if rotation is backwards.
  • Damped light mode — ON. Makes the motor brake on throttle drop, improves response.
  • Beep volume — set to a level you can hear in the field but isn't unbearably loud at the bench.
  • Startup tones — useful for diagnosing power-on issues; leave default.

Most other BLHeli parameters can stay at defaults for cohort builds. PID-level tuning of the ESC is rarely useful for survey work.

Section 06 ~15 min · happens once per drone

Receiver setup.

Pairing the radio receiver with the radio transmitter (the "bind" procedure). Selecting the correct serial protocol. Verifying that stick movements on the radio show up in the configurator's Receiver tab. End-point and trim calibration so the drone responds symmetrically.

Two receiver ecosystems matter for current builds:

  • ELRS (ExpressLRS) — open-source, low-latency, long-range. The current cohort recommendation. Receiver protocol is CRSF (Crossfire-style serial). Bind procedure varies slightly by ELRS receiver model but generally involves powering the RX in bind mode, then the TX in bind mode, and waiting for them to find each other.
  • FrSky/CRSF — commercial, mature, well-documented. Receivers like the R-XSR or X4R-SB. Bind procedure is well-documented in the radio's manual.

For both ecosystems, the configurator setup is the same:

  1. Configuration tab — set Receiver Mode to "Serial-based receiver" and Receiver Protocol to CRSF (for both ELRS and Crossfire) or SBUS (for FrSky non-CRSF). Save and Reboot.
  2. Ports tab — verify UART1 is set to Serial RX, baud rate AUTO. (Already done in Section 04 if you followed the cohort defaults.)
  3. Receiver tab — should show channel bars responding when you move sticks on the radio. If not: check radio is powered, bound, and on the correct model.

Channel mapping. The Receiver tab also shows a channel mapping setting (typically "AETR1234" or "TAER1234"). This describes which radio channel maps to which FC input. The default for ELRS-with-EdgeTX radios is AETR (Aileron, Elevator, Throttle, Rudder), then auxiliary channels 1, 2, 3, 4 in order. If the channel mapping is wrong, your stick inputs will be scrambled — pitch becomes roll, throttle becomes yaw, etc. Verify by:

  1. Move the right stick up. The Receiver tab's Pitch (Elevator) bar should move.
  2. Move the right stick right. The Roll (Aileron) bar should move.
  3. Move the left stick up. The Throttle bar should move.
  4. Move the left stick right. The Yaw (Rudder) bar should move.

If any of these are wrong, change the channel mapping (try TAER1234 if AETR doesn't work — Mode 2 vs Mode 1 radios differ).

End-points and trim. The radio sends values from roughly 1000 (low) to 2000 (high) microseconds; centre is 1500. If your sticks at full deflection only reach 1100/1900, the FC won't get full input range — the drone will feel sluggish at high throttle and unresponsive at extremes. Calibrate the radio's end-points so full stick deflection reads 1000/2000 (with a small margin: 1010/1990 is fine).

Section 07 ~15 min · safety-critical · test thoroughly

Failsafe.

What the drone does when something goes wrong: link loss, low battery, GPS failure. This section is the difference between a recoverable in-flight problem and a destroyed drone. Failsafe is configured once per drone and tested on every flight day.

Three failsafe scenarios matter, in order of frequency:

  1. Receiver signal loss — the radio transmitter is too far, has interference, or has a low battery. The drone stops getting stick commands.
  2. Low battery — the battery voltage drops below a threshold mid-flight. Without intervention, the drone will keep flying until it hits land-or-die voltage.
  3. GPS lock loss — relevant only if you're in a position-hold or autonomous mode. GPS becomes unreliable; position hold fails.

The INAV failsafe configuration (Failsafe tab in the configurator) handles all three. The cohort default settings:

Failsafe trigger What it does Recovery if false alarm Verify by
RX
Receiver lost (CRSF/SBUS link timeout) After 1.0s without a valid frame: enter RTH (Return-To-Home) mode if GPS lock present, otherwise descend slowly.
When link returns, drone resumes pilot control. If pilot doesn't take control quickly, RTH continues.
Walk away from the drone with TX off, watch behavior. (Propellers off; on bench.)
BAT
Voltage threshold (e.g. 3.5V/cell) Audible/visual warning at 3.5V/cell. RTH triggered at 3.4V/cell. Land-now at 3.3V/cell. Emergency disarm at 3.0V/cell.
RTH is reversible if pilot takes control; land-now is not. Setting thresholds conservatively means RTH triggers before any mission-critical voltage.
Battery test on bench: simulate voltage drop by setting a higher threshold temporarily and verify alarms fire.
GPS
GPS lock loss in autonomous mode Drop from position hold to angle (manual stabilisation) mode; alert pilot via OSD warning.
Pilot takes manual control until GPS recovers. Should not trigger RTH (which itself needs GPS).
Field test by flying near a structure that blocks GPS briefly; observe behavior.

The voltage thresholds are per cell, not pack total. A 4S pack at 3.5V/cell is 14.0V total; a 6S pack at 3.5V/cell is 21.0V total. INAV handles the per-cell math automatically once you tell it the cell count. The configuration field is usually labelled "vbat warning cell voltage."

The RTH home point is set on arm, not on power-on. This is important: if you power up the drone in your truck and drive to the survey site, the home point is the truck location at power-up. Walking around the drone before arming doesn't update home. You must disarm and re-arm at the actual takeoff point for RTH to work correctly. Cohort instructors require trainees to demonstrate this verbally before the first flight.

Section 08 ~10 min · personal preference; cohort default works

OSD configuration.

On-Screen Display — the data overlaid on the FPV video feed during flight. Battery voltage, throttle, RSSI, GPS coordinates, mode, flight time. Configure once, see it on every flight. The cohort default OSD layout is functional for survey work; personalise after a few flights.

The OSD shows on the FPV goggles or screen, overlaid on the live video. The configurator's OSD tab lets you select which data fields appear and where on the screen they're positioned.

The cohort default OSD layout (left to right, top to bottom):

Position Field Why Threshold for alarm
TL
Battery voltage (V) and average cell voltage Top-left corner. The single most important field — most failures relate to running too low.
Voltage drops faster than time elapses; battery sag is unpredictable in wind; per-cell voltage corrects for pack age.
Flashes red below 3.5V/cell; slow blinks below 3.6V/cell.
TR
RSSI (Received Signal Strength) Top-right. Signal strength of the receiver link, in dB or percent.
Drops as you fly further from the radio TX. Helps you know when to turn back before failsafe triggers.
Red below -100 dBm or below 30% (depending on radio system).
BL
Flight mode Bottom-left. Current mode: Acro, Angle, Position Hold, RTH, etc.
Critical to know what the drone will do if you let go of the sticks.
No alarm; just always visible.
BR
GPS lock status, satellite count, distance from home, altitude Bottom-right. The autonomous flight cluster.
Without GPS lock, position hold and RTH won't work. Sat count below 8 is unreliable.
Red if sat count drops below 6 mid-flight; yellow if home distance exceeds operational range setting.
TC
Flight timer Top-center. Time since arm.
Combined with battery voltage, gives a sense of how the pack is performing relative to expected duration.
No alarm.

The cohort default also includes a warning area at center-top for any active alarms (low battery, link weak, GPS lost). When an alarm fires, a text warning appears here in addition to whichever specific field flashes.

Personalisation is fine, but two fields should always remain in the cohort default position: battery voltage (TL) and flight mode (BL). These are the two fields you check most often during flight, and consistent placement means muscle-memory transfers between drones in the graduate community.

Section 09 ~10 min · understand what each mode does before assigning

Flight modes.

Modes determine how the drone interprets stick inputs. Acro mode is fully manual; Angle mode is self-leveling; Position Hold is GPS-locked. Mapping modes to switches on the radio is how the pilot changes the drone's behavior in flight. The mode mapping must be intuitive and unambiguous — flipping a switch in panic should not put the drone into a mode that makes things worse.

The four main modes for survey work:

  • Acro (Acrobatic) — fully manual. Stick input directly controls rotation rate. Drone keeps doing whatever it was doing when you released the sticks. Hard for survey work; only experienced pilots use this.
  • Angle — self-leveling. Stick input controls tilt angle; release sticks and the drone returns to level. The cohort flight-school default for first hovers.
  • Position Hold — GPS-locked horizontal hover. Release sticks and the drone holds its current position even in light wind. The survey-work default once trainees can hover comfortably.
  • RTH (Return-To-Home) — autonomous return to the arm-point. The emergency-recovery and end-of-mission mode.

Two helper modes worth assigning:

  • Beeper — triggers the FC's beeper (and ESCs' tones). Useful for finding a crashed drone in long grass.
  • Air Mode — keeps motors spinning at minimum throttle when stick is at zero (rather than disarming). For acro flying. Cohort default leaves this off.

Switch assignment for a 4-position mode switch (typical EdgeTX radio):

Switch position Mode Cohort use case Notes
SA↑
Angle Self-leveling mode. The default starting point.
First hovers, manual flying when GPS is unreliable.
Releasing sticks returns drone to level horizontal.
SA-
Position Hold GPS-locked horizontal hover.
Standard survey work. Hands-off cruise to next waypoint.
Requires GPS lock with 8+ satellites. Falls back to Angle if GPS fails.
SA↓
RTH Autonomous return to home.
Emergency recovery; end-of-flight return; "the drone is too far and I can't see it" recovery.
Drone climbs to set RTH altitude, flies home, lands or holds. Pilot can override by switching back to Position Hold.
SH
Beeper Momentary; triggers FC beeper while held.
Locating crashed drone.
Default to a momentary switch (returns to off when released), not a 2-position flip.

Don't put Acro mode on the same switch as everything else. If a trainee's switch is in the wrong position when they arm, they should land in Angle or Position Hold, not Acro. Acro mode for the few cohort graduates who use it is on a separate dedicated switch (typically SF) with a deliberate two-step activation.

The Modes tab in the configurator is where you map switch positions to modes. Each mode has a "channel + range" setting — when channel N is between values X and Y, the mode is active. Verify by going to the Modes tab, then flipping switches on your radio, and watching the mode boxes light up green/active.

Section 10 ~30 min · the propellers-off ritual then propellers-on test

First arm.

The verification ritual. Twenty-two checklist items, in order, before the first arm. Most of them confirm what previous sections set up; a few are last-line checks that catch the rare configuration error that survived everything else. Do this list every time you build a new drone.

The 22-item pre-arm checklist, in two phases.

Phase A — Propellers off, drone on bench (10 minutes):

  1. Check all FC config saved to flash (CLI: save; should reboot cleanly).
  2. Verify firmware version matches what you intended.
  3. Receiver is bound and shows stick input in the Receiver tab.
  4. All four motors spin in the configurator's Motors tab. Direction correct.
  5. GPS module shows satellite count climbing within 2 minutes of power-on (outdoors).
  6. Failsafe configured: voltage threshold set, RTH enabled, RX timeout set.
  7. OSD layout looks correct in the configurator's OSD preview.
  8. Mode switches: each switch position activates the correct mode in the Modes tab.
  9. Battery voltage reads correctly in the configurator (matches what your battery checker shows).
  10. Arming switch position: arm-disarm cycles work as expected (no propellers spinning, of course).
  11. Shake test: physically shake the FC. Configurator shows attitude responding; nothing rattles or detaches.

Phase B — Propellers on, drone on flat ground or sandbag, 5m clear area (15 minutes):

  1. Propellers installed correctly: CW props on CW motors, CCW on CCW motors. Nuts tightened with light torque.
  2. Battery installed and strapped. Power leads connected.
  3. Power-on: FC LED comes on, ESC tones play, drone settles into idle.
  4. Radio TX powered on, model selected, mode switch set to Angle.
  5. GPS lock acquired (wait for 8+ satellites; can take up to 5 minutes for first lock).
  6. Final visual: nothing loose, props clear of obstructions, no stray wires.
  7. Bystanders cleared to 5m radius minimum.
  8. Arm: stick combination (typically throttle low + yaw right) or arming switch.
  9. Idle test: throttle just above zero. All four motors spin smoothly. No vibration or asymmetric wobble.
  10. Brief throttle-up (~30%) to lift the drone 30cm off the ground for 2-3 seconds, then back down.
  11. Disarm. Power off. Inspect for any signs of stress (warm motors, deformed props).

If anything fails the checklist

Stop. Identify the failed item. Resolve before continuing. Do not try to "fly through" a failed check. The cost of a failed first arm caught at the bench is 5 minutes; the cost caught in the air is the drone, possibly the props, sometimes the airframe. The cost caught at someone's hand or face is much higher.

Cohort instructors have a strong rule: any item on this checklist that fails halts the drone for that day. Re-test the entire checklist (not just the failed item) on the next session, since other configuration may have changed in the interim.

The first 30cm hover is also the moment to verify a few things you can't easily verify on the bench:

  • Drone is balanced — it should hover roughly in place without drifting fast in any direction. Slight drift (1-2 m/min) is normal in light wind; fast drift indicates centre-of-gravity issues or motor mounting problems.
  • Yaw is true — releasing yaw stick should let the drone hold heading, not slowly rotate. Slow rotation indicates motor imbalance or PID issues.
  • Throttle response is responsive — small throttle changes should produce small altitude changes. Mushy or delayed response indicates ESC protocol mismatch or motor wiring issues.
  • Stick centre is true — sticks at centre, drone should stay level. If centred sticks make the drone tilt, recalibrate the radio.

If the first hover feels rough, the next configuration step is PID tuning — covered in tuning.html (proposed; not yet built). For most cohort builds, the INAV defaults plus the cohort cohort-default config dump produce a flyable drone without further tuning.

Six configuration values that show up everywhere.

Quick reference for the configuration values that recur across cohort default builds. Useful when verifying a build against the standard, or when re-creating a config that's been lost.

38400
GPS baud rate
UART2 default for BN-880 / M10
DSHOT600
ESC protocol
Cohort default for all builds
3.5V
Per-cell warning
Failsafe RTH at 3.4V/cell
8 sats
Min for position hold
Below 6: GPS modes unreliable
1.0s
RX timeout to failsafe
Triggers RTH on link loss
22
Pre-arm checklist items
Phase A bench (11) + Phase B field (11)

Four mistakes that show up in graduates chat every cohort.

The same four configuration mistakes account for roughly 80% of "I'm stuck" tickets in cohort Slack channels. Each is easy to fix once identified; each can absorb hours if you don't know to look for it.

"My drone won't arm. Configurator says ARMING DISABLED."

By far the most common ticket

The configurator's status bar shows arming-disabled flags. Click the flag to see why. The most common reasons: GPS not locked yet (wait 2 minutes outdoors); throttle stick not at minimum; angle of FC exceeds the limit (drone not on flat ground); failsafe is currently triggered (radio not bound or out of range); cell count detection failed (battery not connected, or below threshold). Fix the specific flagged reason, not generic "arming" advice.

"All wiring looks correct, but motor 3 doesn't spin."

After Section 05

Three plausible causes, in order: (1) ESC firmware reflash needed — sometimes new ESCs ship with the wrong default protocol; flash via BLHeli passthrough. (2) Solder joint at the ESC's signal pad is cold — re-flow with the iron. (3) FC motor output remap — verify in the Motors tab that motor 3's slider produces the expected motor's response, not a different one.

"Position hold doesn't work. Drone drifts."

Section 09 mode behavior

Position hold needs (a) GPS lock with 8+ sats, (b) compass calibrated, (c) altitude above ground > 2m. The most common cause is uncalibrated compass — INAV's Calibration tab includes a compass calibration that requires rotating the drone through all axes. Without this, position hold drifts in unpredictable directions. Re-calibrate compass at every new flying location more than 50km from the previous one.

"OSD shows symbols I don't recognise — letters and weird characters."

Section 08 OSD configuration

The OSD font isn't loaded on the FPV system. INAV uses a specific character set; the FPV system needs to be flashed with the matching font. For analog FPV: the OSD font is on the FC and shouldn't show garbage; if it does, the firmware target is wrong. For digital FPV (DJI O3, HDZero): flash the OSD font using the FPV system's own configurator. Each FPV system has a different procedure documented in its manual.

Questions worth answering carefully.

Should I flash a release candidate or stable firmware? +

Stable, for cohort builds. Release candidates have new features but also fresh bugs — a config that works on RC1 may break on RC2 or the eventual stable release. The cohort default is whatever the most recent stable major version is at the time of the cohort (currently INAV 7.x stable).

For experienced graduates or partner orgs running their own development work, RCs are fine. The maintainers genuinely want testers. But test in non-production builds first, and don't put RC firmware on a drone that's about to do paying client work.

What FC do you recommend for cohort default builds? +

The SpeedyBee F405 V4. Three reasons: (1) good mid-tier price-performance — around ₱2,200 for the FC alone; (2) integrated 4-in-1 ESC compatible mounting and the major firmware ecosystems all support it; (3) reliably stocked and widely available.

Alternatives that work: Matek H743 (better for ArduPilot 10" builds), Holybro Kakute H7 (similar tier, slightly more expensive). Avoid: very cheap clones from unknown brands — the FC is not the place to save money. A bad FC creates problems that masquerade as configuration mistakes for weeks.

How often does this configuration need to be redone? +

The full setup is a one-time per drone process. After that:

  • Pre-flight checks — every flight session. Battery voltage check, GPS lock, mode switches, RX bind. Maybe 2 minutes.
  • Compass calibration — every new flying location more than ~50km from the previous, or after any crash that physically moved the FC's mounting orientation.
  • Firmware updates — once per stable release cycle, usually every 6-12 months. Re-flash, then verify the saved config still applies (it usually does, INAV preserves config across version updates within a major version).
  • Full re-setup — only after major hardware changes (replaced FC, replaced ESCs) or if a configuration becomes corrupted (rare).
What about CLI-based configuration vs the GUI? +

The configurator GUI covers 90% of common settings. The CLI (Command Line Interface) tab is where the remaining 10% lives — settings that aren't exposed in the GUI but matter for some builds.

For cohort default builds, GUI is sufficient. The cohort default config dumps (downloadable from the top of this page) are produced by saving CLI output, but you don't need to write CLI commands by hand to use them — you paste the dump into the CLI tab and INAV applies all the settings at once.

Where CLI matters: PID-level filtering tweaks, advanced flight modes, custom mixer configurations for non-standard frame layouts. Cohort graduates who run their own builds typically learn CLI within their first six months as their builds diverge from the cohort default.

Why do you recommend INAV over BetaFlight when BetaFlight is more popular? +

BetaFlight is more popular because the FPV racing/freestyle community is larger and louder than the survey community. For survey work specifically, INAV is the better tool because it includes GPS-based autonomous flight modes as first-class features.

If you tried to do survey work in BetaFlight: position hold is barely usable, RTH requires bolt-on configuration, autonomous waypoints are an unsupported hack. INAV makes all of these reliable. For a cohort whose primary work is autonomous NDVI surveys, the trade-off is clear.

For demo-flying, racing-style, or pure manual flying, BetaFlight is fine. The cohort program just doesn't focus on those.

Can I use a non-cohort-default FC and still follow this guide? +

Mostly yes. The conceptual sections (firmware selection, port mapping principles, motor configuration, failsafe logic, modes) apply to any FC running INAV or BetaFlight. The specific port assignments and pad locations differ by FC.

For non-cohort FCs, your reference is the FC manufacturer's datasheet for pad assignments. The configurator's Configuration tab will list the available UARTs and their default functions for your specific FC. Do the cohort-default mapping if it's compatible; otherwise, follow the manufacturer's recommendation.

The 22-item pre-arm checklist still applies regardless of FC choice. The procedure is firmware-level, not FC-specific.

What's the Lumipad opinion on Bluetooth/wireless configuration? +

Most modern FCs (including the SpeedyBee F405 V4) have a Bluetooth or WiFi module that lets you configure via a phone app or wireless connection to a laptop. Convenient — no USB cable needed in the field — but with two caveats:

  1. The wireless config is read-only by default for safety. Writing settings requires a deliberate enable. This is the right default; don't disable it.
  2. Wireless can drop mid-write. Saving config wirelessly while the drone is connected to a battery has caused several "the drone won't power on" incidents in cohort 02 — the config save was interrupted, leaving the FC in a corrupted state. Always do major config writes via USB; use wireless for verification and minor adjustments only.
Help! I made a config change and now nothing works. How do I roll back? +

Three rollback paths, in order of disruption:

  1. Selective revert — if you remember what you changed, change it back. The configurator's CLI history (in some configurators) shows recent commands. Reverse the last change. Most "I broke something" issues fall here.
  2. Restore from saved dump — if you saved a config dump before changes (Section 03 recommends this), paste the dump back in via CLI tab, save, reboot. Restores to the saved state.
  3. Factory reset and re-flash — CLI command defaults nosave resets all settings to firmware defaults, then re-load your cohort config dump. Last resort; reverts everything.

Always save a config dump before significant changes. The 10 seconds it takes to copy CLI output to a text file is the difference between a 30-second rollback and a 30-minute one.