Chapter 1: The Five Link Types
Every drone in the air right now is using between one and five simultaneous radio links. Most operators can name two. This chapter covers all five.
The Problem Nobody Talks About
A racing quad has two links — RC control and video. Simple. But the moment you add GPS return-to-home, you've added a third (telemetry). Add a companion computer with a mesh radio and you're at four. Add a payload camera with its own downlink and you're at five.
Each link has its own frequency, its own protocol, its own antenna, its own failure mode, and its own opinion about which direction the drone should go. When they disagree, things get interesting.
Understanding the five link types is the foundation of everything else in this handbook. If you don't know what's talking on your drone, you can't diagnose why it stopped talking.
The Five Links
Link 1: Manual Control (RC)
What it does: Carries stick commands from the pilot to the flight controller. The link that keeps a human in the loop.
Protocols: ELRS (ExpressLRS), CRSF (TBS Crossfire), GHST (IRC Ghost), SBUS (FrSky), IBUS (FlySky), PPM (legacy).
Frequencies: - 2.4 GHz — most common (ELRS 2.4, CRSF, Ghost, FrSky ACCST) - 900/868 MHz — long range (ELRS 900, Crossfire, FrSky R9) - Sub-GHz proprietary — tactical (IRONghost dual-band)
What you need to know: - This is the only link where latency matters in milliseconds. ELRS at 500 Hz has ~2 ms latency. SBUS is ~6 ms. At 250 Hz freestyle, you won't feel the difference. In a racing final, you might. - Loss of this link triggers failsafe. Every FC firmware handles failsafe differently. Know yours before you need it. - ELRS and Crossfire use serial protocols (CRSF wire format) that carry bidirectional telemetry inside the RC link. This blurs the line between Link 1 and Link 2 — your RC receiver is also a telemetry radio. This is efficient but means RC loss also kills your telemetry.
Common problems: - RC and video on the same frequency band (both 2.4 GHz) causing desense. Solution: different bands, or physical antenna separation. - Wrong UART baud rate in FC configurator — CRSF wants 420000, not 115200. - ELRS binding phrase mismatch after firmware update.
Link 2: Telemetry / Command & Control (C2)
What it does: Bidirectional data link between the drone and a ground station. Carries flight data down (position, battery, attitude) and commands up (waypoints, parameter changes, mode switches).
Protocols: MAVLink v2 (ArduPilot, PX4), MSP (Betaflight, iNav), LTM (Lightweight Telemetry), FrSky S.Port/F.Port.
Transport options: - Embedded in RC link — CRSF/ELRS carry MAVLink or custom telemetry inside the control channel. No separate radio needed. - Dedicated telemetry radio — SiK (3DR), RFD900x, MicroHard P900. Separate frequency, separate antenna, separate failure mode. - WiFi — ESP32 bridge, companion computer WiFi, mesh radio backhaul. - Cellular — LTE modems for beyond-visual-line-of-sight (BVLOS).
What you need to know: - MAVLink is the lingua franca for autonomous platforms. If you're running ArduPilot or PX4, everything speaks MAVLink. If you're running Betaflight, everything speaks MSP. If you're running a mixed fleet, you need both. - Telemetry bandwidth matters more than telemetry latency. You don't need millisecond position updates on the ground — 1-10 Hz is fine. But you do need all the data fields to arrive intact. - Dedicated telemetry radios (RFD900x, SiK) are point-to-point. They don't scale to multiple drones without a mesh layer on top.
Common problems:
- MAVLink stream rate misconfigured — too high floods the link,
too low makes the GCS look frozen. Start with SR0_POSITION=2,
SR0_EXTRA1=4, adjust from there.
- SiK radio firmware mismatch between air and ground units.
- UART conflict — telemetry and GPS both assigned to the same UART.
Link 3: Video Downlink
What it does: Sends camera feed from the drone to the pilot's goggles or ground station monitor. The link that lets you see.
Technologies: - Analog 5.8 GHz — lowest latency (~1 ms glass-to-glass), degrades gracefully (static, then snow, then nothing). Still dominant in FPV racing and tactical ops where latency kills. - DJI digital — DJI O3, O4, Vista, Air Unit. Low latency (~20-28 ms), good image quality, locked ecosystem. No third-party interop. - HDZero — digital, ultra-low latency (~15 ms), open ecosystem, lower resolution than DJI. Popular with racers going digital. - OpenHD / WFB-ng / OpenIPC — open-source digital video over commodity WiFi hardware (RTL8812AU/EU). Higher latency (~80-120 ms), fully open, hackable, configurable. The platform for custom builds. - Walksnail (Avatar) — Caddx/Walksnail digital system. Competes with DJI on image quality, runs on Artosyn AR8030 chip.
What you need to know: - Video is almost always 5.8 GHz. This means it's on the same band as 5 GHz WiFi, some mesh radios, and the 5.8 GHz ISM band that everyone assumes is uncontested. In practice, 5.8 GHz is crowded. - Analog video uses 40 channels across 5.8 GHz. At a race event with 8 pilots, frequency management is a real operational problem. At a tactical deployment with multiple teams, it's a coordination requirement. - Digital video links (DJI, HDZero) are frequency-hopping or wideband. They're harder to interfere with but also harder to coordinate. You can't just "pick a channel" the way you can with analog. - The RTL8812AU chip that OpenHD/WFB-ng depends on has been discontinued by Realtek. The RTL8812EU replacement does NOT support monitor mode in the same way. This is slowly killing the open-source digital FPV ecosystem. OpenIPC is moving to other solutions.
Common problems: - 5.8 GHz video transmitter (VTX) too close to 2.4 GHz RC antenna causes receiver desense. Minimum 10 cm separation, more is better. - VTX power set too high for proximity flying — at 800 mW you're heating the VTX and potentially interfering with your own RC. 25-200 mW is enough for most LOS operations. - Wrong VTX table in Betaflight — mismatched power levels, missing channels, or wrong band assignments.
Link 4: Payload Data
What it does: Carries data from a mission payload — mapping camera, multispectral sensor, LiDAR, SAR, SIGINT receiver, delivery mechanism confirmation. Distinct from the FPV video feed (Link 3).
Technologies: - Ethernet (wired, on companion computer) - USB (camera to companion) - WiFi (payload-specific AP) - Dedicated RF downlink (separate frequency, separate antenna) - Store-and-forward (record on board, download after landing)
What you need to know: - Most consumer and racing drones don't have Link 4. It shows up on commercial mapping drones, agricultural platforms, and defense ISR platforms. - Payload data is usually high bandwidth and tolerant of latency. A mapping camera generates gigabytes per flight — you're not streaming that in real time. You're storing it and downloading after landing. - When payload data IS streamed (tactical video from a gimbal camera, SAR data, EW sensor output), it competes for bandwidth with telemetry and video. This is where mesh radios with QoS become important — prioritize C2 over payload, always. - The companion computer is the integration point. Payload connects to companion via USB/Ethernet/GPIO. Companion decides what goes down the RF link and what gets stored.
Common problems: - Payload drawing too much power from the FC's 5V/12V rail. Payload should have its own BEC or regulated supply. - USB bandwidth contention between payload camera and companion computer's other USB devices. - Payload data timestamps not synchronized with flight controller timestamps. Use GPS time or NTP on the companion for correlation.
Link 5: Mesh / Swarm Coordination
What it does: Drone-to-drone communication for fleet operations. Position sharing, intent coordination, task allocation, sensor data relay. The link that turns individuals into a team.
Technologies: - ESP-NOW — Espressif peer-to-peer, 2.4 GHz, ~250 byte packets, no infrastructure needed. Good for ground operations (Tooth mesh, pre-flight sync). Not suitable for in-flight swarm at range. - WiFi mesh (batman-adv / 802.11s) — Linux-based mesh networking. Doodle Labs, Silvus, and Persistent Systems all use this under the hood (yes, your $5,000 Silvus StreamCaster is running OpenWRT with batman-adv). Range 1-50 km depending on radio and power. - MANET (Mobile Ad-hoc Network) — military-grade mesh with frequency hopping, anti-jam, encryption. Persistent Systems MPU5, Silvus at higher tiers, Harris/L3Harris. $10,000-50,000 per node. - MAVLink over mesh — any of the above carrying MAVLink messages between platforms. Each drone gets a unique system ID (1-254). Standard MAVLink messages (GLOBAL_POSITION_INT, HEARTBEAT) become the swarm awareness layer.
What you need to know: - Most drones don't have Link 5. It's the last link to be added and the first to be cut when budget or weight is tight. - Mesh radios that claim "50 km range" are telling you the radio range, not the mesh range. Mesh adds overhead. Real throughput across 3 hops is typically 30-50% of single-hop throughput. - The dirty secret of tactical mesh: Doodle Labs is OpenWRT on Atheros/Qualcomm WiFi silicon running batman-adv. Silvus is similar with their own MAC layer. Persistent Systems MPU5 is the most custom but still builds on standard radio architectures. They're not magic. They're well-engineered WiFi radios in ruggedized enclosures with good antenna design and custom firmware. - Mesh network planning is its own discipline. Node placement, antenna orientation, channel assignment, traffic prioritization — these matter more than the radio's datasheet specs.
Common problems:
- Mesh radio on 2.4 GHz interfering with 2.4 GHz RC link.
Solution: different bands (mesh on 900 MHz or 5 GHz).
- batman-adv OGM (Originator Message) interval too high, causing
stale routing. Default 1 second is fine for slow-moving platforms.
Fast-moving drones may need 250 ms.
- IP address conflicts in the mesh. Use a consistent addressing
scheme: 10.0.0.{system_id} with system_id matching MAVLink ID.
How They Interact
The five links are not independent. They share spectrum, share power, share the FC's limited UARTs, and share the operator's limited attention.
Frequency Deconfliction
| Link | Common Frequency | Conflict With |
|---|---|---|
| RC (Link 1) | 2.4 GHz | WiFi mesh, BLE, companion WiFi |
| RC (Link 1) | 900 MHz | Telemetry radio, mesh radio |
| Telemetry (Link 2) | 900 MHz | Long-range RC, mesh radio |
| Video (Link 3) | 5.8 GHz | 5 GHz WiFi, mesh radio, payload WiFi |
| Payload (Link 4) | varies | depends on payload type |
| Mesh (Link 5) | 2.4/5/900 MHz | everything else |
The rule: no two links on the same band within the same airframe unless they're designed to coexist. ELRS 2.4 GHz and an ESP32 WiFi AP on the same drone will fight. ELRS 900 MHz and an RFD900x telemetry radio will fight. Plan your frequency layout before you build.
UART Allocation
A typical F405 flight controller has 3-6 UARTs. They get consumed fast:
| UART | Typical Assignment |
|---|---|
| UART1 | RC receiver (CRSF/ELRS/SBUS) |
| UART2 | GPS |
| UART3 | Telemetry radio or MSP bridge |
| UART4 | ESC telemetry (if DShot + telemetry) |
| UART5 | Companion computer (MAVLink or MSP) |
| UART6 | (you're out of UARTs) |
Running out of UARTs is one of the most common integration problems on F4-class FCs. Solutions: use soft serial (limited baud rate), upgrade to an H7 FC (more UARTs), or use a companion computer to multiplex multiple data streams over a single UART.
Power Budget
Every link has a radio that draws power. Every radio has an amplifier that draws more power. On a 5-inch FPV quad with a 1300 mAh 6S battery, your total electronics budget (FC + ESCs + radio + VTX + GPS + receiver) is typically 2-5W continuous. Adding a mesh radio at 1-2W is significant. Adding a companion computer at 3-10W changes your flight time.
Know your power budget before you add links.
The Operator's Decision
Not every drone needs all five links. Most don't. The right number of links depends on the mission:
| Mission | Links Needed |
|---|---|
| FPV racing | 2 (RC + video) |
| Freestyle / cinematic | 2-3 (RC + video + optional telemetry) |
| Mapping / survey | 3-4 (RC + telemetry + video + payload) |
| Tactical ISR | 4-5 (all five) |
| Swarm operations | 5 (all five, mesh is mandatory) |
| Autonomous delivery | 3 (telemetry + video + optional mesh) |
More links = more complexity = more things to break = more things to diagnose. Add links because the mission requires them, not because the hardware supports them.
Next
- Chapter 2: Frequency Bands and Regulatory Reality — the rules that govern where your links can operate, and the gaps between the rules and reality.
- Chapter 8: UART Layout and Why It Matters — the practical constraint that limits how many links you can actually use.
Every link you add is a complication. Know what it costs before you add it.
Chapter 2: Frequency Bands and Regulatory Reality
The regulations tell you what you're allowed to do. The physics tell you what will actually work. They don't always agree.
The Bands That Matter
Drone operations live in a handful of frequency bands. Here's where everything sits and why.
900 MHz (902–928 MHz in the US, 868 MHz in EU)
What lives here: Long-range RC links (ELRS 900, TBS Crossfire), telemetry radios (RFD900x, SiK, MicroHard P900), some mesh radios, LoRa, and a surprising amount of industrial IoT.
Why it matters: Sub-GHz propagation is king. 900 MHz bends around obstacles, penetrates foliage, and reaches farther per milliwatt than any other band you'll use. A 100 mW ELRS 900 link will outrange a 1 W 2.4 GHz link in most real-world environments.
Regulatory: - US: ISM 902–928 MHz, up to 1 W conducted + antenna gain (FCC Part 15.247) - EU: 868 MHz band, 25 mW ERP with duty cycle limits (ETSI EN 300 220) - The EU/US split is the single biggest cross-border problem in drone operations. 900 MHz hardware built for the US market doesn't work in Europe, and vice versa. ELRS handles this with region-specific firmware builds. Many other systems don't.
What the regulations don't tell you: The 900 MHz ISM band is shared with utility meters (smart grid AMI), industrial SCADA, agricultural sensors, and LoRaWAN gateways. In urban environments, the noise floor at 900 MHz can be 20+ dB higher than rural. Your range will be shorter in the city.
2.4 GHz (2400–2483.5 MHz)
What lives here: Most RC links (ELRS 2.4, Ghost, ACCST, IBUS), WiFi (802.11b/g/n/ax), Bluetooth, ZigBee, microwave ovens, baby monitors, wireless cameras, mesh radios, and roughly half of all wireless devices ever manufactured.
Why it matters: 2.4 GHz is the default for everything. It's globally harmonized (same band everywhere), license-free, and supported by every chip on the market. If you don't know what frequency to use, you use 2.4 GHz. So does everyone else.
Regulatory: - Global ISM band, generally 100 mW–1 W EIRP depending on jurisdiction - FCC: up to 1 W conducted, 4 W EIRP with directional antennas (Part 15.247) - EU: 100 mW EIRP (ETSI EN 300 328) - Japan: 10 mW/MHz (effectively limits wideband signals)
What the regulations don't tell you: 2.4 GHz is a war zone. At any given moment at a race event, fly-in, or urban deployment site, you're sharing spectrum with: - Every phone's WiFi and Bluetooth - Every laptop's WiFi - Every smart home device - Other pilots' RC links - Nearby mesh radios - The microwave in the food truck
The saving grace is that modern protocols (ELRS, Ghost, CRSF) use frequency hopping, which spreads the signal across the entire band and makes them resilient to narrowband interference. But when the entire band is congested, even FHSS degrades.
The 2.4 GHz deconfliction problem: If your RC link is 2.4 GHz AND your mesh radio is 2.4 GHz AND your companion computer's WiFi is 2.4 GHz, you have three transmitters on the same band in the same airframe. Even with different channels and different protocols, the front-end receivers will desense each other. The fix is simple: put at least one of them on a different band.
5.8 GHz (5725–5875 MHz)
What lives here: Analog FPV video, digital FPV video (DJI, HDZero, Walksnail), 5 GHz WiFi (802.11a/n/ac/ax), some mesh radios, radar, and weather services.
Why it matters: 5.8 GHz is the FPV video band. Virtually every drone with a camera transmits video on 5.8 GHz. The band has enough bandwidth for analog and digital video, and the higher frequency means smaller antennas.
Regulatory: - ISM 5.725–5.875 GHz in most jurisdictions - FCC: 1 W conducted (Part 15.247) - EU: 25 mW EIRP (yes, really — ETSI EN 300 440). Most VTX modules shipped into the EU are technically non-compliant at any setting above 25 mW. - The broader 5 GHz UNII bands (5.15–5.35, 5.47–5.725 GHz) are used by WiFi but have DFS (Dynamic Frequency Selection) requirements due to radar coexistence. DFS can force your radio to change channels mid-flight. Not ideal.
What the regulations don't tell you: - 5.8 GHz has significantly higher path loss than 2.4 GHz. In free space, 5.8 GHz loses ~7.7 dB more than 2.4 GHz at the same distance. In practice this means roughly half the range per milliwatt. You compensate with power and antenna gain. - 5.8 GHz does not penetrate foliage, buildings, or terrain well. If you fly behind a tree, your video will break before your RC link does (assuming RC is on 2.4 GHz or 900 MHz). - At FPV race events, analog 5.8 GHz channel management is critical. 40 channels sounds like a lot until 8 pilots are in the air and their harmonics are stepping on each other. Digital systems (DJI, HDZero) are wideband and harder to deconflict — they don't fit neatly into the 40-channel system.
Sub-GHz Below 900 (433, 315, 169 MHz)
What lives here: LoRa long-range, some RC systems (FrSky R9 at 433 MHz in some regions), key fobs, garage door openers, tire pressure monitors, and very long-range telemetry.
Why it matters: Lower frequency = better propagation = longer range. 433 MHz LoRa links can reach 10+ km with tiny antennas and milliwatts of power. But bandwidth is measured in kilobits, not megabits.
Regulatory: - 433 MHz ISM: 10 mW in EU, not ISM in the US (amateur band, requires ham license for non-ISM use) - 315 MHz: US ISM for low-power devices - 169 MHz: EU smart meter band, very restricted
When you'd use it: Very long-range telemetry (LoRa), sub-floor FHSS detection (listening, not transmitting), or interoperability with existing infrastructure on these bands.
Military and Licensed Bands
L-band (1–2 GHz): Some tactical mesh radios (Doodle Labs HelixL+S). Military satellite. GPS (L1 at 1575.42 MHz, L2 at 1227.60 MHz). No ISM access — requires licensing or government authorization.
S-band (2–4 GHz): Overlaps 2.4 GHz ISM. Some military radar. Weather radar. Tactical links.
C-band (4–8 GHz): Doodle Labs C-Band radios, satellite downlinks, some military comms. Requires licensing in most jurisdictions.
You don't need to operate on these bands unless you're working with military or government platforms. But you do need to know they exist because: (a) military radar on S-band and C-band can overwhelm your receivers, and (b) GPS signals on L-band can be jammed or spoofed, affecting your drone's navigation.
The Gap Between Rules and Reality
What Operators Actually Do
The regulatory framework assumes static, ground-based transmitters in controlled environments. Drone operations are none of those things.
In practice: - FPV pilots routinely fly 600–800 mW VTX power despite EU limits of 25 mW - Long-range operators use 900 MHz at full power in countries where the band allocation is ambiguous - "1 W EIRP" limits are rarely enforced at hobby flying fields - Military operators have blanket spectrum authority in their operational areas and don't worry about ISM band rules
This handbook doesn't tell you to break the rules. It tells you the rules exist, what they are, and acknowledges that the enforcement reality differs from the regulatory text. Know your jurisdiction's rules. Make your own informed decisions.
Frequency Coordination at Events
At any gathering of more than 4-5 pilots:
-
Assign video channels before anyone powers up. Analog 5.8 GHz has 40 channels across 6 bands (A, B, E, F, R, L). Use non-adjacent channels. Band F (Fatshark / IRC) and Band R (RaceBand) are the most common for events.
-
Separate RC bands. If half the pilots are on 2.4 GHz ELRS and half are on 900 MHz Crossfire, that's actually ideal — no RC interference between the two groups.
-
Power down when not flying. A VTX broadcasting 800 mW on the ground creates more interference than one in the air at 200m, because ground-level signals have direct paths to every other receiver in the pit area.
-
Know your VTX table. Betaflight's VTX table maps power levels and channels for your specific VTX hardware. Verify it matches reality — misconfigured VTX tables can put you on the wrong channel or the wrong power level.
Frequency Coordination for Fleet Operations
At a commercial or tactical deployment with multiple drones:
-
Map all five links for each platform. Build a frequency plan before the operation, not during it.
-
Separate bands where possible. RC on 900, telemetry on 2.4, video on 5.8, mesh on a different 5 GHz channel. The more band separation, the less self-interference.
-
Document what's transmitting. If you're operating near other teams, other companies, or military assets, knowing exactly what frequencies you're using — and at what power — prevents problems and demonstrates professionalism.
-
Plan for interference. If your operation is near an airport, military base, or large venue (stadiums use a LOT of 2.4 and 5 GHz), your range predictions from a clean test site are optimistic. Budget a 50% range reduction in congested spectrum environments.
Quick Reference: Band Comparison
| Band | Range (per mW) | Penetration | Bandwidth | Congestion | Typical Use |
|---|---|---|---|---|---|
| 433 MHz | Excellent | Best | Very low | Low | LoRa telemetry |
| 900 MHz | Very good | Good | Low-medium | Medium | Long-range RC, telemetry |
| 2.4 GHz | Good | Fair | High | Severe | RC, WiFi, mesh, BLE |
| 5.8 GHz | Fair | Poor | Very high | High | FPV video, WiFi |
The universal trade-off: lower frequency = longer range and better penetration but less bandwidth. Higher frequency = more bandwidth but shorter range and worse penetration. Everything in RF engineering is a version of this trade-off.
Next
- Chapter 3: Antennas for People Who Aren't RF Engineers — how to choose, orient, and not break your antennas.
- Chapter 1: The Five Link Types — frequency deconfliction in the context of a complete drone system.
The spectrum is a shared resource. Know what you're transmitting, where, and at what power. The drone next to you is sharing the same resource.
Chapter 3: Antennas for People Who Aren't RF Engineers
The antenna is the most important and least understood component on your drone. A $200 radio with a bad antenna loses to a $30 radio with a good one.
The One Rule
Match your antenna to your link.
That's it. Everything else in this chapter is explaining what that means and how to do it.
What an Antenna Does
An antenna converts electrical signal into radio waves (transmit) and radio waves back into electrical signal (receive). It doesn't amplify — it shapes. An antenna with "5 dBi gain" isn't creating energy. It's focusing the energy that's already there into a narrower pattern, the same way a flashlight focuses light from a bulb into a beam.
More gain = narrower beam = longer range in one direction, shorter range in every other direction.
This is the fundamental trade-off in antenna selection. There is no antenna that's better in all directions. There are only antennas that trade coverage pattern for range.
Antenna Types You'll Actually Use
Dipole / Whip
What it is: A straight stick. The stock antenna on most receivers, telemetry radios, and mesh radios.
Pattern: Donut-shaped. Good coverage in all horizontal directions, weak directly above and below the antenna axis.
Gain: 2–5 dBi
When to use it: Default choice for anything where you don't know which direction the other radio will be. RC receivers, telemetry, mesh nodes on drones that fly in all orientations.
Orientation matters: A vertical dipole radiates horizontally. A horizontal dipole radiates vertically. On a drone, the receiver antenna should point down or sideways — NOT parallel to the frame. Two antennas at 90 degrees to each other (antenna diversity) covers all orientations.
Patch Antenna
What it is: A flat rectangle. Common on GPS modules, some directional links, and video receivers.
Pattern: Directional — strong in front, weak behind. Like holding up a book and only hearing what's in front of it.
Gain: 6–14 dBi depending on size
When to use it: On the ground station pointing at the drone. GPS antennas (patch facing sky). Video receiver antennas in goggles (facing forward). NOT on the drone itself unless you know exactly where the ground station will be.
The goggle antenna mistake: Many pilots fly with stock goggle antennas (usually small omnis) and wonder why they get video breakup at 500m. Replacing one goggle antenna with a directional patch that points toward the flying area can double or triple video range with no change to the drone.
Helical Antenna
What it is: A coil of wire. Comes in two types: normal-mode (small, used as compact omni) and axial-mode (larger, highly directional, used for long range).
Pattern: Axial-mode helix is a focused beam — high gain, narrow coverage. Normal-mode is similar to a dipole.
Gain: 8–15+ dBi (axial mode)
When to use it: Ground-station tracking antenna for long-range operations. Paired with an antenna tracker that points it at the drone. Not practical on the drone itself (too large, too directional).
Pagoda / Lollipop / Stubby
What it is: Compact circular-polarized antenna. The standard FPV video antenna on both the drone and the goggles.
Pattern: Roughly omnidirectional with circular polarization.
Gain: 1–3 dBi
When to use it: 5.8 GHz FPV video. Both the VTX antenna on the drone and the receiver antenna on the goggles should be circular polarized and the same handedness (both RHCP or both LHCP). Mixing handedness costs you ~3 dB (half your signal).
Why circular polarization for video: When a linearly polarized signal bounces off a surface (multipath), its polarization can rotate. If your receive antenna is linear and the signal arrives at the wrong angle, you lose it. Circular polarization doesn't have this problem — it receives equally regardless of rotation. The trade-off is ~3 dB less gain than an equivalent linear antenna.
PCB / Ceramic Chip Antenna
What it is: A tiny antenna printed on the circuit board or bonded as a ceramic chip. Found inside ESP32 modules, Bluetooth devices, GPS modules, and small receivers.
Pattern: Roughly omnidirectional but with significant nulls depending on PCB ground plane and nearby components.
Gain: -2 to 2 dBi (often negative gain compared to an ideal isotropic radiator)
When to use it: When size and cost matter more than range. The ESP32-C6 on a Tooth uses its built-in PCB antenna for mesh communication at short range. For anything beyond 100m, use an external antenna via the U.FL/IPEX connector if available.
Polarization
Radio waves vibrate in a specific orientation. If the transmit antenna sends vertically polarized waves and the receive antenna is oriented horizontally, you lose ~20 dB of signal. That's the difference between a clear link and no link.
The rules: - Linear antennas (dipole, whip): orient both the same way. Both vertical, or both horizontal. On a drone that changes orientation constantly, this is hard — which is why diversity (two antennas at 90 degrees) helps. - Circular polarized antennas (pagoda, lollipop): match handedness. Both RHCP or both LHCP. Don't mix. - Cross-polarization loss: linear TX → circular RX (or vice versa) costs ~3 dB. Not ideal but survivable.
Connectors
The small connectors used in drone antennas are fragile. Know them.
| Connector | Size | Common Use | Durability |
|---|---|---|---|
| SMA | Medium | VTX, telemetry radio, ground station | Good — threaded, secure |
| RP-SMA | Medium | Same as SMA, reversed polarity | Good — check male/female |
| U.FL / IPEX | Tiny | On-board connections, GPS, receiver | Fragile — 30 mate cycles rated |
| MMCX | Small | Some receivers, compact VTX | Fair — snap-on, better than U.FL |
The U.FL problem: U.FL (also called IPEX or MHF) connectors are rated for about 30 connect/disconnect cycles. After that, the spring contact weakens and the connection becomes intermittent. Every time you unplug and replug a U.FL antenna, you're using one of those 30 cycles. On a racing drone that gets rebuilt weekly, this matters.
Fix: Don't disconnect U.FL antennas unless you have to. Route the antenna wire so it stays connected during maintenance. If a U.FL connection becomes intermittent (video cuts out when you flex the cable), replace the pigtail — the connector is worn out.
Antenna Placement on a Drone
Where you put the antenna matters as much as which antenna you choose.
Do
- Mount RC receiver antennas pointing away from the frame at 90 degrees to each other (diversity). The classic "V" shape with antenna tubes works.
- Mount GPS antenna on top of the frame with a clear view of the sky. No carbon fiber between the GPS patch and the satellites.
- Mount the VTX antenna where it won't get hit in a crash. Rear-facing on a standoff is common.
- Keep transmit antennas (VTX, mesh radio) as far from receive antennas (RC receiver, GPS) as physically possible on the frame.
Don't
- Don't run antenna wires parallel to power wires. Motor current creates magnetic fields that induce noise in antenna cables.
- Don't let antenna wires cross each other at sharp angles.
- Don't fold or kink antenna wires. The coax impedance changes at the bend and reflects signal back instead of radiating it.
- Don't mount antennas inside a carbon fiber enclosure. CF attenuates RF. If the antenna is inside a CF tube, you're losing signal.
- Don't forget the ground plane. A 900 MHz dipole needs a ground plane (the FC, the frame, or a dedicated ground plane element) to radiate properly. Hanging in free space with no ground reference, it underperforms.
Range Estimation (Quick and Dirty)
You don't need to calculate a full link budget to estimate range. Here's the shortcut.
Start with the manufacturer's claimed range. Divide by 3. That's your real-world range with obstacles, interference, and non-ideal antenna placement.
If you're doing better than 1/3 of claimed range, your setup is good. If you're doing worse, check antenna orientation, connections, and interference from other on-board transmitters.
If you need more range: 1. Better antenna on the ground station (cheapest improvement) 2. Higher VTX/radio power (easy but wastes battery) 3. Better antenna on the drone (limited by weight/size) 4. Lower frequency band (900 MHz instead of 2.4 GHz) 5. Higher gain directional antenna with tracker (most effective, most complex)
The order above is also the order of cost-effectiveness. A $15 directional antenna on your goggles does more for range than a $50 amplifier on the drone.
The Antenna You Already Have
Before buying new antennas, check the ones you have:
- Is it the right band? A 5.8 GHz antenna on a 2.4 GHz radio is a $0 dummy load. It will not work. At all. This sounds obvious but it happens.
- Is it connected? Flex the cable gently at the connector. If the signal changes, the connection is bad.
- Is it damaged? A cracked antenna element, kinked coax, or corroded connector all kill performance.
- Is it oriented correctly? Rotating an antenna 90 degrees can cost 20 dB. Try different orientations before buying a new antenna.
Next
- Chapter 4: Link Budgets Without the Math — estimating range from specs without a calculator.
- Chapter 1: The Five Link Types — which antenna goes with which link.
The best antenna is the one that's pointed the right way, connected properly, and on the correct frequency. Everything else is optimization.
Chapter 4: Link Budgets Without the Math
A link budget tells you whether your radio link will work at a given distance. You don't need a calculator. You need to understand three numbers and three things that kill them.
The Three Numbers
Every radio link has three numbers that determine whether it works:
1. Transmit Power (How loud you're shouting)
Measured in milliwatts (mW) or dBm. More power = more range, up to a point.
| Power | dBm | Typical Use |
|---|---|---|
| 10 mW | 10 dBm | Bluetooth, low-power telemetry |
| 25 mW | 14 dBm | EU legal VTX limit, ELRS minimum |
| 100 mW | 20 dBm | Standard FPV, ELRS default |
| 250 mW | 24 dBm | Long-range FPV |
| 500 mW | 27 dBm | Extended range |
| 1000 mW (1W) | 30 dBm | FCC limit for most ISM, long-range telemetry |
The key insight: Doubling your power only gets you ~40% more range (because radio signal falls off with the square of distance). Going from 100 mW to 200 mW doesn't double your range — it adds about 40%. Going from 100 mW to 1000 mW (10x power) roughly triples your range. Power is an expensive way to buy range.
2. Receiver Sensitivity (How well you can hear a whisper)
Measured in dBm (negative numbers — more negative = more sensitive). This is how faint a signal the receiver can still decode.
| Sensitivity | Typical Device |
|---|---|
| -90 dBm | Basic WiFi receiver |
| -105 dBm | Good telemetry radio (SiK) |
| -112 dBm | ELRS 2.4 GHz at 50 Hz |
| -117 dBm | ELRS 900 MHz at 25 Hz |
| -130 dBm | LoRa at lowest data rate |
| -148 dBm | Wio-SX1262 (absolute best available) |
The key insight: Receiver sensitivity improves when you lower the data rate. ELRS at 500 Hz (fast, for racing) has worse sensitivity than ELRS at 50 Hz (slow, for long range). This is why long-range modes exist — they trade update rate for range.
3. Link Margin (How much room you have before it breaks)
Link margin = (transmit power + antenna gains) - (path loss) - (receiver sensitivity)
If the margin is positive, the link works. If it's negative, it doesn't. The bigger the positive margin, the more resilient the link is to fading, interference, and obstacles.
Comfortable margins: - 10 dB: Works in clean conditions, fragile in the real world - 20 dB: Handles moderate interference and some obstacles - 30 dB+: Robust link, will survive urban environments and bad days
The Three Things That Kill Links
1. Distance (Path Loss)
Radio signals get weaker with distance. In free space (no obstacles), the signal drops by 6 dB every time you double the distance. That means at twice the distance, you have one quarter the signal power.
Free-space path loss at common frequencies:
| Distance | 900 MHz | 2.4 GHz | 5.8 GHz |
|---|---|---|---|
| 100 m | -51 dB | -60 dB | -68 dB |
| 500 m | -65 dB | -74 dB | -82 dB |
| 1 km | -71 dB | -80 dB | -88 dB |
| 5 km | -85 dB | -94 dB | -102 dB |
| 10 km | -91 dB | -100 dB | -108 dB |
Read this table like this: at 1 km on 2.4 GHz, the signal is 80 dB weaker than when it left the transmitter. If you started with 20 dBm (100 mW) transmit power and 0 dBi antennas, the signal arriving at the receiver is 20 - 80 = -60 dBm. If your receiver sensitivity is -112 dBm, your margin is 52 dB. Plenty.
At 10 km, the same setup gives you 20 - 100 = -80 dBm arriving signal. Margin is 32 dB. Still fine in free space.
But you're not in free space.
2. Obstacles (The Real Range Killer)
Free-space path loss is the theoretical minimum. Everything else makes it worse:
| Obstacle | Additional Loss |
|---|---|
| Light foliage (few trees) | 3–10 dB |
| Dense forest | 15–30 dB |
| Single brick wall | 10–15 dB |
| Concrete building | 20–40 dB |
| Metal structure | 30–50+ dB |
| Hill / terrain (no line of sight) | 20–60+ dB |
| Rain (heavy, 5.8 GHz) | 1–3 dB per km |
| Humidity (negligible below 10 GHz) | < 1 dB per km |
The single biggest factor in real-world range is line of sight. If you can see the other antenna, the link probably works. If you can't, it might not. Every obstacle between the two antennas subtracts from your margin.
This is why 900 MHz outperforms 2.4 GHz in obstructed environments — lower frequencies diffract around obstacles better. A 900 MHz signal bends around a tree that a 5.8 GHz signal bounces off of.
3. Interference (The Urban Tax)
Every other radio on your frequency subtracts from your link margin by raising the noise floor. In a clean rural environment, the noise floor might be -110 dBm. In a city, it could be -90 dBm. That's 20 dB of margin you just lost to other people's WiFi.
| Environment | Noise Floor (2.4 GHz) | Impact |
|---|---|---|
| Rural, no buildings | -105 to -110 dBm | Minimal — close to theoretical range |
| Suburban | -95 to -100 dBm | 10–15 dB lost to ambient noise |
| Urban | -85 to -95 dBm | 15–25 dB lost |
| Stadium / convention | -75 to -85 dBm | 25–35 dB lost — significant range reduction |
| Race event (many pilots) | -80 to -90 dBm | 20–30 dB lost on shared frequencies |
The fix isn't more power (that raises the noise floor for everyone). The fix is: - Different frequency band (if possible) - More directional antennas (which reject interference from the sides) - Lower data rate (which improves receiver sensitivity) - Better antenna placement (which avoids self-interference)
The No-Math Range Estimate
You don't need to calculate path loss. Use this:
Step 1: Find the manufacturer's claimed range for your radio link.
Step 2: Apply the environment factor:
| Environment | Multiply By |
|---|---|
| Open field, clear day, nobody else around | 0.7 |
| Suburban, some trees, moderate interference | 0.4 |
| Urban, buildings, heavy interference | 0.2 |
| Indoor or dense urban canyon | 0.1 |
Step 3: That's your expected range.
Example: ELRS 900 MHz at 100 mW claims 30 km range. - Open field: 30 × 0.7 = 21 km. Reasonable. - Suburban: 30 × 0.4 = 12 km. Realistic. - Urban: 30 × 0.2 = 6 km. About right. - These are LOS (line of sight) estimates. Flying behind a hill or building cuts range further.
How Antennas Change the Budget
Antenna gain is free range. A 6 dBi antenna on the ground station adds 6 dB of margin, which effectively doubles your range compared to a 0 dBi antenna, without increasing power or changing anything on the drone.
Both ends count. If you add 3 dBi on the drone antenna AND 3 dBi on the ground station antenna, you get 6 dB total improvement. But adding gain on the ground station is usually easier (no weight constraint, can use larger antennas, can use a tracker).
The practical limit: On the drone, you're limited to small, lightweight, roughly omnidirectional antennas (2–5 dBi). On the ground, you can use a directional patch (8–14 dBi) or helical (10–16 dBi) on a tracker. The ground antenna is where you get the most range improvement per dollar.
Putting It Together: Example Link Budgets
FPV Racing Quad (Short Range)
RC Link (ELRS 2.4 GHz, 250 mW, 500 Hz):
TX power: 24 dBm
TX antenna: 2 dBi (dipole on drone)
RX antenna: 2 dBi (dipole on TX)
Path loss at 500m: -74 dB
Arriving signal: 24 + 2 + 2 - 74 = -46 dBm
RX sensitivity: -108 dBm (ELRS 500 Hz)
Margin: 62 dB ← massive, no problems
Racing at 500m with ELRS has 62 dB of margin. You could fly behind buildings and through moderate obstacles and still be fine. RC is not your range bottleneck.
Video Link (Analog 5.8 GHz, 400 mW):
TX power: 26 dBm
TX antenna: 2 dBi (pagoda)
RX antenna: 2 dBi (pagoda on goggles)
Path loss at 500m: -82 dB
Arriving signal: 26 + 2 + 2 - 82 = -52 dBm
RX sensitivity: -85 dBm (analog threshold for usable image)
Margin: 33 dB ← healthy
At 500m, analog video has 33 dB of margin. At 2 km it drops to about 21 dB. At 5 km, about 7 dB — you'll see static. Video is always the range bottleneck on an FPV quad, not RC.
Long-Range Survey (5 km)
Telemetry (RFD900x, 1W, 900 MHz):
TX power: 30 dBm
TX antenna: 3 dBi (dipole on drone)
RX antenna: 6 dBi (directional on GCS)
Path loss at 5 km: -85 dB
Arriving signal: 30 + 3 + 6 - 85 = -46 dBm
RX sensitivity: -121 dBm (SiK at 64 kbps)
Margin: 75 dB ← enormous
RFD900x at 5 km in open terrain has 75 dB of margin. Even in heavy suburban with 25 dB noise floor elevation and 15 dB of foliage, you still have 35 dB of margin. This is why RFD900x is the standard for long-range telemetry.
Quick Reference: What Uses Your Margin
| Factor | Typical Impact |
|---|---|
| Double the distance | -6 dB |
| Light foliage in path | -5 to -10 dB |
| One building wall | -10 to -15 dB |
| Urban noise floor (2.4 GHz) | -15 to -25 dB |
| Cross-polarized antennas | -20 dB |
| Antenna connector loss (each) | -0.5 to -1 dB |
| Coax cable loss (per meter) | -0.5 to -2 dB (frequency dependent) |
| Add 6 dBi ground station antenna | +6 dB |
| Switch from 2.4 to 900 MHz | +8 dB at same distance |
| Lower ELRS packet rate by half | +3 dB sensitivity |
Next
- Chapter 3: Antennas — how antenna gain and placement affect these numbers.
- Chapter 1: The Five Link Types — which links are range-limited and which aren't.
Range is not a single number. It depends on what's between you and the drone. The link budget tells you how much you can afford to lose before the link breaks.
Chapter 5: The Four Firmwares
There are four flight controller firmware ecosystems that matter. Each one is the right choice for somebody and the wrong choice for somebody else. This chapter helps you figure out which.
The Landscape
| Firmware | Protocol | Built For | License |
|---|---|---|---|
| Betaflight | MSP v2 | FPV racing, freestyle, acro | GPL-3.0 |
| iNav | MSP v2 | GPS navigation, fixed-wing, VTOL | GPL-3.0 |
| ArduPilot | MAVLink v2 | Autonomous missions, survey, commercial | GPL-3.0 |
| PX4 | MAVLink v2 | Research, defense, companion compute | BSD-3 |
All four are open-source. All four run on STM32 flight controllers. All four are actively developed. None of them are going away.
Betaflight
What it does well: Rate-mode acrobatic flight. Sub-millisecond gyro loop. The tightest, most responsive flight controller stack for manual piloting. If you're flying FPV by hand and you want the sticks to feel like an extension of your body, Betaflight.
What it doesn't do: Autonomous anything. No waypoint missions, no GPS hold (angle mode with GPS rescue is a failsafe, not a flight mode), no companion computer integration beyond MSP bridge, no offboard control. Betaflight assumes a human is flying at all times.
Protocol: MSP v2. Binary request/response over serial. Simple, fast, well-documented. Every message has a function code and a payload. Read PID values, write PID values, download blackbox, read sensor state. No streaming — you ask, it answers.
Configuration: Betaflight Configurator (Chrome app) or CLI.
The CLI is powerful — diff all gives you a complete delta from
defaults, dump all gives you everything. Most experienced
operators work in CLI.
Typical platforms: 5-inch freestyle quads, 3-inch cinewhoops, racing drones, micro quads, FPV wings (with limitations).
Community: Massive. Largest FPV firmware community. Fast development cycle. Frequent releases. Sometimes too frequent — breaking changes between minor versions are common.
When to choose it: Your primary control input is a human with a transmitter. You need the best possible manual flight feel. You don't need autonomous modes, waypoints, or programmatic control.
iNav
What it does well: GPS navigation on everything. Multi-rotor, fixed-wing, VTOL, rovers, boats. If it moves and you want it to follow waypoints or hold position, iNav probably supports it. iNav is what Betaflight would be if Betaflight cared about navigation.
What it doesn't do: It doesn't have ArduPilot's depth of autonomous mission planning or PX4's companion computer integration. It's a step up from Betaflight toward autonomy, but it's not a full autopilot stack.
Protocol: MSP v2 with extensions. Same wire format as Betaflight, but with additional messages for navigation, waypoints, and mission planning. iNav also supports MSP2_COMMON_SETTING for named parameter access — cleaner than Betaflight's CLI-only approach for many settings.
Configuration: iNav Configurator (forked from Betaflight Configurator, same Chrome app pattern). CLI is similar but not identical to Betaflight — don't assume commands transfer 1:1.
Typical platforms: Long-range FPV with GPS return, survey wings, fixed-wing platforms, VTOL (tiltrotor, tailsitter), autonomous boats, GPS-guided multicopters.
Community: Smaller than Betaflight, deeply knowledgeable. Fixed-wing and VTOL support is stronger than any other open-source option except ArduPilot.
When to choose it: You need GPS navigation and you're coming from the FPV world. You want something more capable than Betaflight but less complex than ArduPilot. You're building a fixed-wing or VTOL and don't want to learn the ArduPilot parameter universe.
ArduPilot
What it does well: Everything. Multi-rotor, fixed-wing, helicopter, rover, submarine, boat, antenna tracker, blimp. ArduPilot is the Swiss Army knife of autopilots. It has more flight modes, more parameters, more sensor support, and more mission planning capability than any other open-source firmware.
What it doesn't do well: Simple. ArduPilot has ~1,200 parameters. The learning curve is real. The documentation is extensive but assumes you know what you're looking for. If you just want to fly a 5-inch quad freestyle, ArduPilot is overkill.
Protocol: MAVLink v2. Binary message protocol with system/component addressing. Every device on the network has a system ID (1-254) and component ID (1-254). Messages are published, not requested — you tell the FC what stream rates you want and it sends them continuously. Bidirectional: commands go up, telemetry comes down.
Configuration: Mission Planner (Windows), QGroundControl (cross-platform), MAVProxy (command-line). Parameter tree is deep — learning which parameters matter for your platform takes time. The ArduPilot wiki is your primary reference.
Typical platforms: Commercial survey drones, delivery platforms, research vehicles, defense platforms, agricultural sprayers, any platform that needs full autonomous mission capability.
Community: Large, technical, welcoming. Strong contributor base. Excellent wiki. Monthly developer calls. The go-to choice for academic and government research.
When to choose it: You need real autonomous capability. Waypoint missions, sensor integration, companion computer support, multiple flight modes, or you're building something that isn't a standard multicopter. ArduPilot probably already supports your platform.
PX4
What it does well: Companion computer integration, research workflows, defense applications. PX4 was designed from the ground up for programmatic control. The uORB publish/subscribe internal bus, the uXRCE-DDS bridge to ROS2, and the clean offboard control API make it the natural choice when a computer is flying the drone and a human is supervising.
What it doesn't do well: Community hand-holding. PX4's documentation assumes a higher baseline than ArduPilot's. The parameter set (~900 parameters) is smaller than ArduPilot's but the naming convention is less intuitive. Hardware support is narrower — PX4 cares less about supporting every FC board and more about supporting the ones that matter for its target users.
Protocol: MAVLink v2 (same as ArduPilot, different dialect extensions). Additionally supports uXRCE-DDS for high-bandwidth sensor telemetry to companion computers, replacing the older microRTPS bridge.
Configuration: QGroundControl (primary), PX4 CLI via MAVLink shell. No equivalent to ArduPilot's Mission Planner.
Typical platforms: Research drones, defense autonomous systems, companion-compute-heavy platforms, anything running ROS2, platforms that need VTOL transition.
Community: Smaller than ArduPilot, more academic/defense-focused. Strong institutional backing (Dronecode Foundation, Auterion). Development is faster on core features, slower on edge-case platform support.
When to choose it: You're integrating with ROS2 or a companion computer. You need offboard control APIs. You're building for defense or research. You want a clean software architecture that's designed for programmatic control first and manual control second.
Cross-Firmware Reality
The Split
The FPV world runs Betaflight and iNav. MSP protocol. Configurator apps. CLI dumps. Rate mode. Manual piloting with optional GPS backup.
The autonomous world runs ArduPilot and PX4. MAVLink protocol. GCS applications. Parameter trees. Mission planning. The human supervises, the computer flies.
These two worlds are converging. Betaflight quads are getting GPS rescue and companion computers. ArduPilot platforms are getting acro mode and FPV video. But the protocol split (MSP vs. MAVLink) remains the fundamental divide.
Any tool that wants to work across the whole spectrum — which is what Wingman does — needs to speak both languages fluently.
Switching Firmware
Changing firmware on an existing platform is possible but not trivial. The major challenges:
- Parameter translation: Betaflight PID 44 is not the same as ArduPilot ATC_RAT_RLL_P 0.135. The numbers are in different units, different scales, different ranges. Translation requires understanding both systems.
- UART reassignment: Each firmware has its own UART allocation conventions. Moving from Betaflight to iNav may require remapping every serial port.
- Sensor calibration: Accelerometer, gyro, and compass calibration doesn't transfer. Re-calibrate everything.
- Failsafe behavior: Different firmwares handle RC loss, GPS loss, and battery failsafe differently. Understand the new behavior before you fly.
Quick Reference
| Feature | Betaflight | iNav | ArduPilot | PX4 |
|---|---|---|---|---|
| Manual acro flight | Best | Good | Good | Good |
| GPS hold / RTH | Basic rescue | Good | Best | Good |
| Waypoint missions | No | Yes | Best | Yes |
| Fixed-wing | Limited | Good | Best | Good |
| VTOL | No | Yes | Yes | Yes |
| Companion computer | MSP bridge | MSP bridge | MAVLink + DroneKit | MAVLink + uXRCE-DDS + ROS2 |
| Offboard control | No | Limited | Yes (Guided mode) | Yes (Offboard mode) |
| Parameters | ~100 (CLI) | ~200 (CLI/MSP2) | ~1200 (MAVLink) | ~900 (MAVLink) |
| Configuration tool | BF Configurator | iNav Configurator | Mission Planner / QGC | QGC |
| Blackbox logging | Flash / SD | Flash / SD | SD (DataFlash) | SD (ULog) |
| Community size | Largest | Medium | Large | Medium |
| Release cadence | ~3-4 months | ~6 months | Monthly point releases | ~6 months |
Next
- Chapter 6: MSP Protocol — how to talk to Betaflight and iNav from anything with a serial port.
- Chapter 7: MAVLink Protocol — how to talk to ArduPilot and PX4 from anything with a network connection.
No religious wars. Use what works for your mission. Switch when the mission changes.
Chapter 6: MSP Protocol — The Betaflight/iNav Language
MSP is a question-and-answer protocol. You ask the FC a question (send a request with a function code). It answers (sends a response with the data). No streaming, no subscriptions, no surprises.
What MSP Is
MSP (MultiWii Serial Protocol) is the serial communication protocol used by Betaflight and iNav. It's been around since the MultiWii days and has evolved through several versions. The current version is MSP v2, which supports 16-bit function codes and CRC8 checksums.
MSP is simple by design. It runs over any serial connection (UART, USB, TCP, Bluetooth) at any baud rate. There are no connection handshakes, no sessions, no state. Send a request, get a response.
Packet Format
MSP v2 Request (outgoing)
Byte: 0 1 2 3 4-5 6 7-8 9..N N+1
$ X < flag func_id 0x00 payload payload crc8
0x24 0x58 0x3C 0x00 [16-bit] 0x00 size[16] [data] [crc]
| Field | Size | Value | Description |
|---|---|---|---|
| Header | 3 bytes | $X< |
MSP v2 request marker |
| Flag | 1 byte | 0x00 | Reserved |
| Function ID | 2 bytes | Little-endian | Which data you're requesting |
| Payload size | 2 bytes | Little-endian | 0 for most requests |
| Payload | variable | — | Data (for SET commands) |
| CRC8 | 1 byte | DVB-S2 CRC | Over flag + func_id + size + payload |
MSP v2 Response (incoming)
Byte: 0 1 2 3 4-5 6-7 8..N N+1
$ X > flag func_id size payload crc8
0x24 0x58 0x3E 0x00 [16-bit] [16-bit] [data] [crc]
Same structure but with > (0x3E) instead of < (0x3C).
The Messages That Matter
Identity
| Function | ID | Direction | Returns |
|---|---|---|---|
| MSP_FC_VARIANT | 0x02 | Read | 4-byte ASCII: "BTFL" or "INAV" |
| MSP_FC_VERSION | 0x03 | Read | 3 bytes: major, minor, patch |
| MSP_BOARD_INFO | 0x04 | Read | Board identifier, manufacturer, board name |
These are the first messages to send on any new connection. They tell you what firmware is running, what version, and what hardware it's running on.
Auto-detect pattern: Send MSP_FC_VARIANT. If you get "BTFL", it's Betaflight. If "INAV", it's iNav. If no response within 2 seconds, it's not an MSP firmware (try MAVLink).
PID Tuning
| Function | ID | Direction | Payload |
|---|---|---|---|
| MSP_PID | 0x70 | Read | 9 bytes: [Roll P, Roll I, Roll D, Pitch P, Pitch I, Pitch D, Yaw P, Yaw I, Yaw D] |
| MSP_SET_PID | 0xCA | Write | Same 9 bytes |
Each value is 0-255. The FC interprets these differently by firmware version (scaling factors change between BF 4.3 and 4.4, for example). Always record the firmware version alongside PID values.
Rates
| Function | ID | Direction | Payload |
|---|---|---|---|
| MSP_RC_TUNING | 0x6B | Read | Rate values (format depends on rate type) |
| MSP_SET_RC_TUNING | 0xCC | Write | Same format |
Rate payload format depends on the configured rate type (Betaflight
rates, Actual rates, KISS rates, Quick rates). Read
rates_type from the RC tuning response to know how to interpret
the values.
Filters
| Function | ID | Direction | Payload |
|---|---|---|---|
| MSP_FILTER_CONFIG | 0x5E | Read | Gyro lowpass, D-term lowpass, notch filters, dynamic notch settings |
| MSP_SET_FILTER_CONFIG | 0xC9 | Write | Same format |
Battery
| Function | ID | Direction | Payload |
|---|---|---|---|
| MSP_BATTERY_STATE | 0x82 | Read | Cell count, capacity, voltage (mV), current (cA), mAh consumed |
| MSP_ANALOG | 0x6E | Read | Voltage, power (mAh), RSSI, current |
Blackbox
| Function | ID | Direction | Payload |
|---|---|---|---|
| MSP_BLACKBOX_CONFIG | 0x5C | Read | Device (flash/SD), rate, conditions |
| MSP_DATAFLASH_SUMMARY | 0x70 | Read | Total size, used size, ready flag |
| MSP_DATAFLASH_READ | 0x71 | Read | Address + data chunk (~4 KB) |
| MSP_DATAFLASH_ERASE | 0x72 | Write | Erases all flash (10-30 sec) |
Blackbox download is the most bandwidth-intensive MSP operation. At 115200 baud, downloading 2 MB of flash takes ~3 minutes. At 921600 baud (via ESP32 bridge), it takes ~20 seconds.
Motor Control
| Function | ID | Direction | Payload |
|---|---|---|---|
| MSP_MOTOR | 0x68 | Read | 8x uint16: motor values (1000-2000 or DShot) |
| MSP_SET_MOTOR | 0xD6 | Write | Same format — TEST MODE ONLY |
MSP_SET_MOTOR bypasses the PID controller and directly sets motor outputs. Props must be removed when using this. This is for motor direction testing, not flight.
EEPROM
| Function | ID | Direction | Description |
|---|---|---|---|
| MSP_EEPROM_WRITE | 0xF9 | Write | Saves current settings to EEPROM |
Always send MSP_EEPROM_WRITE after SET commands. Without it, your changes are lost on the next reboot.
Write Safety Pattern
Never write to an FC without this sequence:
- Read the current value (snapshot before)
- Show the diff to the operator (before vs after)
- Get approval (operator confirms)
- Write the new value via MSP_SET_*
- Read back to verify the FC accepted it
- Compare read-back to what you wrote
- EEPROM write after all changes in the batch
- Log every change with timestamp, old value, new value
Step 5 is critical. Some FC firmware versions silently clamp values to valid ranges. If you write P=200 and read back P=150, the FC clamped it. Your operator needs to know.
Practical Tips
Baud rate: MSP works at any baud rate, but the FC UART must be configured to match. Betaflight defaults MSP-configured UARTs to 115200. You can change this in the Ports tab. For blackbox download speed, 921600 is recommended.
Timeout: If you send a request and don't get a response within 100 ms, the FC didn't understand it (wrong function code, wrong firmware version, or the UART isn't configured for MSP). Retry once, then try a different approach.
Versioning: MSP function codes and payload formats change between firmware versions. A message that works on BF 4.4 may not exist on BF 4.2. Always detect the firmware version (MSP_FC_VERSION) before sending version-specific messages.
Multiple MSP ports: An FC can have multiple UARTs configured for MSP simultaneously. This is useful for connecting both a configurator and a companion computer. Each port operates independently.
MSP over WiFi: The ESP32 bridge (Tooth, SpeedyBee adapter) wraps MSP in TCP. The byte stream is identical to serial — the same parser works on both USB and TCP transport. The only difference is the connection setup.
Next
- Chapter 7: MAVLink Protocol — the other language, for ArduPilot and PX4.
- Chapter 8: UART Layout — where to put your MSP connections.
MSP is simple. That's its strength. Ask a question, get an answer. No handshakes, no state, no negotiation. The protocol stays out of the way so you can focus on the data.
Chapter 7: MAVLink Protocol — The ArduPilot/PX4 Language
MAVLink is a publish-subscribe protocol. You tell the FC what streams you want, and it sends them continuously. You send commands when you need something done. Both directions flow at the same time.
What MAVLink Is
MAVLink (Micro Air Vehicle Link) is the communication protocol used by ArduPilot, PX4, and their ecosystems. It's been the standard for autonomous drone communication since ~2009.
Unlike MSP (request-response), MAVLink is a streaming protocol. The FC continuously publishes telemetry at configured rates, and the GCS/companion sends commands as needed. Both directions are independent — you can receive telemetry while sending a command.
MAVLink v2 is the current version. v1 is deprecated but still supported for backward compatibility. Always use v2 for new development.
Packet Format (MAVLink v2)
Byte: 0 1 2 3 4 5 6 7-9 10..N N+1..N+2
0xFD len seq sys comp msg_id msg_id msg_id payload crc16
magic id id [24-bit LE] [data] [checksum]
| Field | Size | Description |
|---|---|---|
| Magic | 1 | 0xFD (v2) or 0xFE (v1) |
| Payload length | 1 | 0-255 bytes |
| Incompatible flags | 1 | Feature flags (signing, etc.) |
| Compatible flags | 1 | Backward-compatible flags |
| Sequence | 1 | Incrementing counter per link |
| System ID | 1 | Which vehicle (1-254) |
| Component ID | 1 | Which subsystem (1=autopilot, 191=companion) |
| Message ID | 3 | 24-bit, little-endian |
| Payload | variable | Message-specific data |
| Checksum | 2 | CRC-16/MCRF4XX with seed byte |
System and Component IDs
Every device on a MAVLink network has a system ID and component ID.
System ID: Identifies the vehicle. Drone 1 = system 1, Drone 2 = system 2. GCS is typically system 255. In a swarm, each drone must have a unique system ID.
Component ID: Identifies a subsystem within the vehicle. - 1 = Autopilot (the FC) - 100 = Camera - 154 = Gimbal - 191 = Companion computer (Wingman uses this) - 250 = GCS
Why this matters: When you connect to a mesh with 10 drones, you'll receive MAVLink messages from all of them. The system ID tells you which drone sent each message. If two drones have the same system ID, you can't tell them apart. This is one of the most common mistakes in multi-vehicle setups.
Setting the system ID:
- ArduPilot: SYSID_THISMAV parameter
- PX4: MAV_SYS_ID parameter
The Messages That Matter
HEARTBEAT (msg_id = 0) — The Keepalive
Every MAVLink device sends HEARTBEAT at 1 Hz. It's how devices discover each other and know the connection is alive.
Fields:
type = vehicle type (2=quadrotor, 1=fixed wing, etc.)
autopilot = firmware (3=ArduPilot, 12=PX4)
base_mode = armed/disarmed flag (bit 7)
custom_mode = current flight mode (firmware-specific number)
system_status = boot/calibrating/active/critical/emergency
Auto-detect pattern: Send a HEARTBEAT with system ID 255
(GCS). Wait for a response. Read the autopilot field:
3 = ArduPilot, 12 = PX4. This is the equivalent of MSP_FC_VARIANT
for the MAVLink world.
No heartbeat = dead link. If you stop receiving heartbeats from a drone for > 5 seconds, the link is lost. ATAK and QGC both use this to mark connections as stale.
Parameter Protocol
MAVLink parameters are named floating-point values. ArduPilot has ~1,200. PX4 has ~900.
| Message | Direction | Description |
|---|---|---|
| PARAM_REQUEST_LIST | GCS → FC | "Send me all parameters" |
| PARAM_VALUE | FC → GCS | One parameter: name, value, type, index, count |
| PARAM_SET | GCS → FC | "Set this parameter to this value" |
Full parameter pull: 1. Send PARAM_REQUEST_LIST 2. FC streams PARAM_VALUE messages (one per parameter) 3. Track received indices — if any are missing after the stream ends, request them individually with PARAM_REQUEST_READ
A full pull of ~1,200 ArduPilot parameters at 115200 baud takes 5-15 seconds depending on link quality.
Writing a parameter: 1. Send PARAM_SET with param_id (name) and param_value 2. FC responds with PARAM_VALUE confirming the new value 3. If the confirmed value differs from what you sent, the FC rejected or clamped the value
Parameters persist across reboots (stored in EEPROM/flash). No separate save command needed, unlike MSP's MSP_EEPROM_WRITE.
Telemetry Streams
Request telemetry streams by sending REQUEST_DATA_STREAM or SET_MESSAGE_INTERVAL.
Key telemetry messages:
| Message | ID | Rate | Content |
|---|---|---|---|
| GLOBAL_POSITION_INT | 33 | 2-10 Hz | Lat, lon, alt, heading, velocities |
| ATTITUDE | 30 | 10-50 Hz | Roll, pitch, yaw (radians) |
| VFR_HUD | 74 | 2-10 Hz | Airspeed, groundspeed, heading, throttle, alt, climb |
| SYS_STATUS | 1 | 1-2 Hz | Sensor health, battery voltage, current, remaining % |
| BATTERY_STATUS | 147 | 1 Hz | Per-cell voltage, current, mAh consumed, temperature |
| GPS_RAW_INT | 24 | 2-5 Hz | GPS fix type, satellites, HDOP, raw position |
| RC_CHANNELS | 65 | 5-10 Hz | All RC channel values (for monitoring stick input) |
Setting stream rates (ArduPilot):
SR0_POSITION=2 # GLOBAL_POSITION_INT at 2 Hz
SR0_EXTRA1=4 # ATTITUDE at 4 Hz
SR0_EXTRA2=2 # VFR_HUD at 2 Hz
SR0_RAW_SENS=1 # RAW sensor data at 1 Hz
SR0_RC_CHAN=5 # RC channels at 5 Hz
SR0_* parameters control stream rates for serial port 0 (usually
TELEM1). Replace 0 with the port number for other connections.
Setting stream rates (PX4): PX4 uses SET_MESSAGE_INTERVAL command to set per-message rates.
Commands
MAVLink commands are sent via COMMAND_LONG or COMMAND_INT and acknowledged via COMMAND_ACK.
| Command | ID | Description |
|---|---|---|
| MAV_CMD_COMPONENT_ARM_DISARM | 400 | Arm or disarm |
| MAV_CMD_DO_SET_MODE | 176 | Change flight mode |
| MAV_CMD_NAV_TAKEOFF | 22 | Takeoff to specified altitude |
| MAV_CMD_NAV_LAND | 21 | Land at current position |
| MAV_CMD_NAV_RETURN_TO_LAUNCH | 20 | Return to home |
| MAV_CMD_DO_REBOOT | 246 | Reboot FC |
Arm command:
COMMAND_LONG:
target_system = 1 (drone's system ID)
command = 400 (ARM_DISARM)
param1 = 1.0 (1=arm, 0=disarm)
param2 = 0.0 (0=normal, 21196=force arm — dangerous)
Wait for COMMAND_ACK. Result 0 = accepted. Result 4 = denied (pre-arm checks failed). Result 5 = in progress.
Mission Protocol
Upload waypoint missions to the FC:
- Send MISSION_COUNT (number of waypoints)
- FC requests each with MISSION_REQUEST_INT
- Send each MISSION_ITEM_INT
- FC confirms with MISSION_ACK
Download existing mission: 1. Send MISSION_REQUEST_LIST 2. FC sends MISSION_COUNT 3. Request each with MISSION_REQUEST_INT 4. FC sends each MISSION_ITEM_INT
Offboard Control (PX4)
PX4's offboard mode lets the companion computer directly command position, velocity, or attitude setpoints:
SET_POSITION_TARGET_LOCAL_NED:
x, y, z = position in local NED frame (meters)
vx, vy, vz = velocity (m/s)
type_mask = which fields are valid
Requirements for offboard mode: 1. Companion must stream setpoints at > 2 Hz (PX4 requires continuous updates or it exits offboard mode) 2. RC switch must be set to offboard mode 3. Vehicle must be armed
This is the control path for Wingman L3 (Delegate) autonomous operations on PX4.
ArduPilot vs. PX4: MAVLink Differences
Both speak MAVLink v2, but they differ in important ways:
| Feature | ArduPilot | PX4 |
|---|---|---|
| Flight mode numbers | ArduPilot-specific (0=Stabilize, 3=Auto, 6=RTL) | PX4-specific (different numbers for same concepts) |
| Parameter names | ATC_RAT_RLL_P style |
MC_ROLLRATE_P style |
| Stream rate config | SR0_* parameters |
SET_MESSAGE_INTERVAL command |
| Offboard control | Guided mode + SET_POSITION_TARGET | Offboard mode + SET_POSITION_TARGET |
| Sensor data | High-bandwidth DDS bridge | uXRCE-DDS to ROS2 |
| Mission dialect | Standard + ArduPilot extensions | Standard (fewer extensions) |
Implication for tools: Any tool that works across both ArduPilot and PX4 (QGroundControl, MAVSDK, Wingman) must handle these differences. The MAVLink wire format is identical — the interpretation of mode numbers, parameter names, and command behaviors differs.
Practical Tips
Always send heartbeats. Your GCS or companion must send
HEARTBEAT at 1 Hz to the FC. If the FC doesn't receive GCS
heartbeats, it may trigger GCS failsafe (ArduPilot: FS_GCS_ENABLE).
Monitor packet loss. MAVLink packets have a sequence number. If you see gaps in the sequence, you're losing packets. At > 5% loss, the link is degraded. At > 20%, it's unreliable for commands.
Don't flood the link. Sending commands faster than the FC can process them causes buffer overflow and dropped messages. One command at a time, wait for COMMAND_ACK before sending the next.
Use MAVSDK or pymavlink, not raw parsing. MAVLink has 300+ message types with varying payload formats. Writing a parser from scratch is an error-prone waste of time. MAVSDK (for control) and pymavlink (for analysis) handle the parsing.
Test with SITL. Both ArduPilot and PX4 have Software-In-The-Loop simulators that emulate a real FC over a simulated MAVLink link. Test your companion software against SITL before connecting to real hardware.
Next
- Chapter 6: MSP Protocol — the simpler alternative for Betaflight and iNav.
- Chapter 8: UART Layout — where MAVLink connections go in the FC's serial port map.
MAVLink is a conversation. The FC talks continuously. You listen and speak when you have something to say. The protocol handles the rest.
Chapter 8: UART Layout and Why It Matters
You will run out of UARTs before you run out of ideas. Planning the layout before you build saves hours of rewiring later.
What a UART Is
A UART (Universal Asynchronous Receiver/Transmitter) is a serial port. Two wires: TX (transmit) and RX (receive). Every device that talks to the flight controller — RC receiver, GPS, telemetry radio, companion computer, ESC telemetry, Bluetooth module, mesh radio — needs a UART.
The flight controller has a fixed number of UARTs. Once they're allocated, they're gone. Adding another device means either freeing a UART or getting a different FC.
How Many UARTs You Actually Get
| MCU | Typical FC | Hardware UARTs | Usable UARTs | Notes |
|---|---|---|---|---|
| STM32F405 | Most 30x30 FCs | 6 | 3–5 | UART1 often hardwired to USB/VCP |
| STM32F722 | Budget FCs | 4 | 3 | Fewer UARTs, fewer features |
| STM32F745/F765 | Mid-range | 8 | 5–6 | More headroom |
| STM32H743/H750 | Premium FCs | 8+ | 6–8 | Best for complex builds |
| RP2040 | Pico-based FCs | 2 | 2 | Very limited |
| ESP32-C6 | Tooth/Seed | 2 | 1–2 | One for FC bridge, one for debug |
"Usable" is lower than "hardware" because: - One UART is typically dedicated to USB (VCP/CDC) for configurator access - Some UARTs share pins with SPI (used for gyro, OSD, flash) and can't be used - Some UARTs have inverted-only pads on the PCB (for SBUS) and can't be repurposed without hardware modification
Check your FC's documentation for which UARTs are actually available on pads. The schematic may show 6 UARTs, but if only 4 have TX/RX pads on the board, you have 4 usable UARTs.
The Standard Allocation
For a typical FPV quad with GPS and telemetry:
| UART | Assignment | Protocol | Baud Rate |
|---|---|---|---|
| UART1 | RC Receiver | CRSF (ELRS/Crossfire/Ghost) | 420000 |
| UART2 | GPS | NMEA or UBX | 38400 or 115200 |
| UART3 | Telemetry / MSP Bridge | MSP, MAVLink, or SmartPort | 115200 |
| UART4 | ESC Telemetry | BLHeli/AM32 telemetry | 115200 |
That uses 4 of your ~5 usable UARTs and you haven't added a companion computer, mesh radio, or Bluetooth module yet.
What Eats UARTs
Every peripheral that communicates over serial needs its own UART. Here's the complete list of things that might want one:
| Device | Protocol | Required? | Notes |
|---|---|---|---|
| RC Receiver | CRSF/SBUS/IBUS | Yes | Non-negotiable. No UART = no control. |
| GPS | NMEA/UBX | For navigation | Required for RTH, GPS modes, position logging |
| Telemetry radio | MSP/MAVLink/LTM | For GCS link | Can share with RC if receiver supports it (CRSF telemetry) |
| ESC Telemetry | Serial telemetry | For RPM filter | Only needed if using bidirectional DShot or ESC temp monitoring |
| OSD (analog) | MSP DisplayPort | For on-screen display | Only if using DJI OSD or analog OSD with MSP |
| Companion computer | MAVLink/MSP | For AI/autonomy | The big UART consumer — wants high baud rate |
| Bluetooth module | SPP/BLE | For wireless config | Can use MSP-over-BT instead of USB |
| Mesh radio | Serial/Ethernet | For swarm | If the mesh radio uses serial (some use Ethernet instead) |
| LED controller | Serial LED | For prop LEDs | Rarely needs a full UART — can use soft serial |
| Rangefinder | Serial | For altitude hold | Some rangefinders use I2C instead (saves a UART) |
| Optical flow | Serial/I2C | For position hold | Prefer I2C version to save UARTs |
Strategies When You Run Out
1. CRSF Telemetry Passthrough
If your RC receiver uses CRSF protocol (ELRS, Crossfire, Ghost), it already has a bidirectional link to the transmitter. You can send telemetry data (battery, GPS, attitude) through the RC link instead of using a separate telemetry radio.
Saves: 1 UART (the one that would have gone to a telemetry radio)
Trade-off: Telemetry bandwidth is limited to what CRSF can carry (basic flight data, not full MAVLink). If you need full MAVLink telemetry (parameter editing, mission upload), you still need a separate radio.
2. Soft Serial
Betaflight and iNav support "soft serial" — bit-banging a UART on any GPIO pin. It works for low-baud-rate devices.
Saves: 1 hardware UART
Trade-off: Limited to ~19200 baud reliably. Not suitable for CRSF (420000), GPS at high rate, or MAVLink. Good for: SmartPort telemetry, serial LED, low-rate telemetry.
3. Companion Computer as Hub
Instead of connecting multiple devices to the FC, connect them to a companion computer and use one UART between the companion and FC.
Before (4 UARTs on FC):
FC UART1 ← RC receiver
FC UART2 ← GPS
FC UART3 ← Telemetry radio
FC UART4 ← Mesh radio
After (2 UARTs on FC):
FC UART1 ← RC receiver
FC UART2 ← Companion computer (MAVLink)
Companion ← GPS (USB)
Companion ← Telemetry radio (USB or Ethernet)
Companion ← Mesh radio (Ethernet)
Saves: 2+ UARTs on the FC
Trade-off: Adds weight, power consumption, and complexity. The companion computer becomes a single point of failure for everything except manual RC control.
4. I2C Instead of Serial
Some peripherals (compass, barometer, rangefinder, optical flow) are available in both serial and I2C versions. I2C uses a shared bus — multiple devices on the same two wires (SDA, SCL).
Saves: 1 UART per device moved to I2C
Trade-off: I2C is slower than serial and can have bus contention issues with multiple devices. But for low-bandwidth sensors, it's fine.
5. DMA and UART Sharing (Advanced)
On STM32H7 FCs, DMA (Direct Memory Access) allows the CPU to handle UART traffic more efficiently. Some advanced configurations use UART inversion and protocol detection to share a single UART between two devices that take turns.
This is fragile, FC-specific, and not recommended unless you know exactly what you're doing.
The UART Planning Template
Before building, fill this out:
Platform: _______________
FC: _______________
MCU: _______________
Available UARTs: _______________
| UART | Device | Protocol | Baud Rate | Required? |
|------|--------|----------|-----------|-----------|
| 1 | | | | |
| 2 | | | | |
| 3 | | | | |
| 4 | | | | |
| 5 | | | | |
| 6 | | | | |
Devices that didn't get a UART:
_______________ → moved to I2C / soft serial / companion / dropped
UARTs remaining after allocation: ___
If you fill this out and you're already at zero remaining UARTs before adding the companion computer you wanted, you need a different FC or a companion-as-hub architecture.
Platform-Specific UART Maps
Typical F405 (4 usable UARTs)
UART1 → USB VCP (configurator) — not available for peripherals
UART2 → RC Receiver (CRSF @ 420000)
UART3 → GPS (UBX @ 115200)
UART4 → Available
UART5 → Available
UART6 → ESC Telemetry (if DShot bidirectional)
Two free UARTs (4 and 5) for telemetry radio, companion, mesh, or Bluetooth.
Orqa H7 QuadCore (6+ usable UARTs)
USART1 → USB VCP
USART2 → Available
USART3 → RC (GHST/IRONghost @ 420000)
UART4 → Available
USART6 → MAVLink telemetry (ATAK/TAK @ 115200)
UART7 → GPS (UBX @ 115200)
UART8 → ESC telemetry
Three free UARTs (2, 4, plus potential soft serial). The H7's extra UARTs are why it supports more complex integrations than F4.
PX4 on Pixhawk 6X
TELEM1 → MAVLink GCS (115200 or 57600)
TELEM2 → MAVLink companion computer (921600)
GPS 1 → GPS (auto-detect)
GPS 2 → Second GPS or compass
RC IN → RC receiver (SBUS/CRSF)
DEBUG → Console / NSH shell
PX4 labels its ports by function rather than UART number. The mapping to hardware UARTs is in the board configuration.
Common Mistakes
1. Wrong baud rate. CRSF is 420000. Many people set 115200 because that's the "default" they're used to. The receiver will not connect. Always check the protocol's required baud rate.
2. TX/RX swap. FC TX connects to device RX, and vice versa. This is wrong more often than any other wiring mistake. If a serial device doesn't respond, swap TX and RX as the first diagnostic step.
3. Voltage mismatch. Most FCs output 3.3V serial. Most peripherals accept 3.3V. But some older devices are 5V serial and can damage 3.3V inputs. Check before connecting.
4. Two devices on one UART. You can't connect a GPS and a telemetry radio to the same UART and expect both to work. Serial is point-to-point. Use a companion computer or multiplexer if you need to share.
5. Forgetting the configurator UART. If you reassign the USB/VCP UART to a peripheral, you may lose the ability to connect Betaflight Configurator. Always keep at least one path to the configurator available (USB or MSP-over-other-UART).
Next
- Chapter 6: MSP Protocol — the protocol that rides on these UARTs when talking to Betaflight and iNav.
- Chapter 13: Adding a Companion Computer — the architecture that solves the "not enough UARTs" problem.
Plan your UARTs before you solder. Desoldering a GPS module because you need that UART for a companion computer is not how you want to spend a Saturday.
Chapter 9: Pre-Flight Checklist That Actually Works
The manufacturer's checklist is marketing. This one catches the problems that actually ground you.
The 60-Second Field Check
This is the minimum check before every flight. Takes 60 seconds once you've done it a few times. Skipping it takes longer when you have to walk 500 meters to recover a crashed drone.
Visual (15 seconds)
-
Props: All four present, correct rotation, no nicks, nuts tight. Spin each by hand — should rotate freely with no catch.
-
Frame: No cracks on arms. No loose standoffs. Antenna mounts intact. Nothing rattling when you shake it.
-
Battery: Strapped tight. Will not shift under acceleration. Balance lead tucked, not dangling near props.
-
Antenna position: RC antenna elements deployed (not folded under the frame). VTX antenna pointed up/back, not blocked by battery. GPS antenna has clear sky view.
Power-On (30 seconds)
-
Voltage check: Battery voltage matches expected full charge. 4S = 16.4–16.8V. 6S = 24.6–25.2V. If significantly low, the battery wasn't fully charged or a cell is bad. Don't fly it.
-
Gyro cal: Wait for the FC to finish gyro calibration (usually 1-2 seconds after power on). Don't move the quad during this time. On Betaflight the OSD shows "CALIBRATING" then clears.
-
RC link: Confirm connected. Move sticks — verify response on OSD or in the video feed (stick position overlay if enabled). Check that arming switch is in disarmed position.
-
GPS (if equipped): Check satellite count. Wait for 3D fix. Most firmwares show sat count on OSD. Minimum 8 sats for any GPS-dependent mode. More is better. If you need GPS return-to-home, confirm the home point is set (some firmwares set home on arm, others on first GPS lock).
-
Video feed: Confirm you see a live image in your goggles or monitor. Correct channel. No interference patterns. If analog, check that nobody else is on your channel.
Arm Check (15 seconds)
-
Clear the area. Nobody within 3 meters of the drone. Nothing the drone could hit if it does something unexpected on arm.
-
Arm. Motors should spin at idle (or not, if "Motor Stop" is enabled). Listen for any unusual sounds — grinding, clicking, uneven RPM.
-
Control check (optional but recommended on new builds): With the drone on the ground, briefly blip throttle and check that it tries to lift evenly. Tilt the quad by hand — motors should speed up on the low side to self-level (in angle/level mode) or resist the tilt (in acro/rate mode).
Go fly.
The Deep Check (Pre-Session or New Build)
Do this once per session (before the first flight of the day) or after any change to the build (new props, firmware update, parameter change, crash repair).
Electrical
- [ ] Battery internal resistance: check with charger. Per-cell IR above 15 mΩ on LiPo or above 30 mΩ on Li-Ion means the pack is aging. Above 25 mΩ (LiPo) or 50 mΩ (Li-Ion), retire it.
- [ ] Cell balance: all cells within 0.02V of each other at full charge. Imbalance > 0.05V = failing cell. Don't fly it.
- [ ] ESC temperature after a flight: warm is normal. Hot to touch = something is wrong (motor issue, prop drag, ESC undersized).
- [ ] Motor temperature: same. Warm = normal. Hot = mechanical issue, PID/filter problem, or motor failing.
- [ ] Wiring: no frayed wires, no exposed copper, solder joints intact. Pay special attention to battery pigtail and motor phase wires.
Mechanical
- [ ] Prop adapters / prop nuts: torqued properly. A prop coming off in flight is not recoverable.
- [ ] Motor bell screws: C-clip or set screws tight. Bell should not wobble on the shaft.
- [ ] Camera mount: secure. Camera angle correct. Tilt hasn't shifted.
- [ ] FC mounting: soft mount grommets intact, FC not contacting frame.
- [ ] Antenna connectors: U.FL/IPEX connectors seated. SMA connectors finger-tight (do not overtorque SMA — you'll break the connector on the board).
Software
- [ ] Firmware version: matches what you expect. Verify in configurator before flying after any work session where USB was connected. Accidental firmware flash happens.
- [ ] Modes: verify arm switch, flight mode switches, and any other switches are assigned correctly. A mode switch that accidentally triggers GPS rescue at 2 meters altitude is a bad day.
- [ ] Failsafe: configured and tested. The only way to know failsafe works is to test it. Turn off the transmitter with the drone armed on the ground and verify the FC does what you expect (motors stop, or enters land mode, or whatever you configured).
- [ ] Blackbox: enabled, flash has space. If you want logs from this session, verify logging is on and the flash isn't full.
- [ ] OSD: shows what you need. Minimum: battery voltage, flight time, RSSI (or LQ for ELRS). Recommended: sat count, altitude, warnings.
Post-Flight Check
After each flight, before the next:
-
Battery voltage: Check remaining voltage. If below 3.5V/cell under resting conditions, you pushed too hard. Adjust your timer.
-
Temperature sweep: Touch each motor, each ESC, the FC, the VTX. Anything unusually hot compared to normal? Investigate before flying again.
-
Visual scan: Any new damage? Props nicked? Antenna bent? Camera mount shifted?
-
Log pull (if analyzing this session): Pull blackbox now. Flash will be overwritten by the next flight.
Post-Session
After the last flight of the day:
-
Storage charge batteries. LiPo storage voltage is 3.8V/cell (22.8V for 6S). Do not leave batteries at full charge or fully depleted. Storage charge the same day.
-
Clean the quad. Grass, dirt, and moisture accelerate corrosion on exposed electronics. Compressed air for motor bells.
-
Note anything that needs attention. A prop you noticed was slightly nicked. A motor that felt warm. A GPS that took too long to lock. Write it down or you'll forget by next session.
The Checks That Catch Real Problems
In order of how often they prevent incidents:
-
Props — wrong rotation, damaged, or loose. The most common cause of unexpected behavior on arm or immediately after takeoff.
-
Battery strap — a battery that shifts forward on a punch-out changes the CG and the drone flips. Cinch it tight.
-
RC link — flying on a dead receiver because you forgot to check the link. Especially after changing receiver firmware or binding phrase.
-
Failsafe — having the wrong failsafe behavior configured. "Drop" is almost never what you want. Test it before you need it.
-
GPS home point — flying 2 km out, triggering RTH, and having the drone return to a GPS position from three flights ago because you didn't wait for a fresh fix.
-
Antenna — a U.FL connector that popped off a receiver during a battery change. Video or RC works at 5 meters, fails at 50.
The One Check Nobody Does (But Should)
Turn off your transmitter with the drone armed on the ground.
This tests your failsafe. Every time you change firmware, change receivers, or change failsafe settings, do this test. It takes 10 seconds and it's the only way to know what will actually happen when you lose signal in the air.
If the motors keep spinning at the last throttle position: your failsafe is misconfigured and your drone will fly away on signal loss. Fix it before flying.
Next
- Chapter 12: When Things Go Wrong — when something slips past the checklist.
- Chapter 10: Blackbox Logs — analyzing what happened after the flight.
The checklist is boring. Walking half a kilometer to pick up a crashed drone because you didn't check the prop nuts is also boring, and takes longer.
Chapter 10: Blackbox Logs — What They Tell You
The blackbox doesn't lie. Your memory does. Pull the log.
What Gets Logged
A blackbox log records everything the flight controller knows at high sample rate (typically 1–4 kHz on Betaflight, 100–400 Hz on ArduPilot/PX4). This includes:
| Data | What It Tells You |
|---|---|
| Gyroscope (roll, pitch, yaw rate) | How the drone is actually rotating — the ground truth |
| Accelerometer | Attitude estimation, vibration level |
| Motor outputs (1–8) | What the FC commanded each motor to do |
| RC commands | What the pilot actually asked for |
| PID terms (P, I, D per axis) | How the PID controller responded to error |
| Setpoint | What the FC was trying to achieve |
| Battery voltage | Voltage under load, sag profile |
| Battery current (if sensor) | Power consumption, mAh tracking |
| GPS position/speed (if equipped) | Flight path, speed, altitude |
| Filter state | Pre/post filter gyro (Betaflight debug modes) |
How to Pull Logs
Betaflight (Flash-Based)
Betaflight stores blackbox data on the FC's on-board flash chip (typically 2–16 MB) or an SD card.
Via Configurator: 1. Connect USB 2. Blackbox tab → Download Flash → Save .bbl file
Via MSP (what Wingman does): 1. MSP_DATAFLASH_SUMMARY → get used bytes 2. MSP_DATAFLASH_READ in 4 KB chunks → stream raw data 3. Save as .bbl file
Important: Flash fills up. If it's full, new flights overwrite old ones. After a session where you need the data, pull logs before the next flight. Or switch to SD card logging if your FC supports it.
ArduPilot (SD Card)
ArduPilot writes .bin DataFlash logs to the SD card.
Via Mission Planner: DataFlash Logs → Download Via MAVLink: LOG_REQUEST_LIST → LOG_REQUEST_DATA → stream Via SD card: Pull the card, copy .bin files directly
PX4 (SD Card)
PX4 writes .ulg (ULog) files to the SD card.
Via QGroundControl: Analyze → Log Download Via SD card: Pull the card, copy .ulg files
Reading the Traces
The Gyro Trace Is Everything
The gyroscope trace is the single most important data in a blackbox log. It shows the actual angular rate of the drone on each axis, sampled at 1–4 kHz. Everything else is derived from or compared against the gyro.
A clean gyro trace looks like smooth curves that follow the stick inputs. When you push the stick right, the roll gyro shows a clean step to the commanded rate, holds, then returns to zero when you release.
A noisy gyro trace looks like the clean curve with fuzz, spikes, or oscillation layered on top. The noise is real — the drone is actually vibrating. The question is where the vibration comes from and whether it matters.
The Five Patterns That Indicate Real Problems
Pattern 1: High-frequency noise on all axes, increasing with throttle.
What it looks like: Fuzz on the gyro trace that gets worse as you increase throttle. Consistent across roll, pitch, and yaw.
What it means: Mechanical vibration from the motors/props is reaching the FC. The motors are the only thing on the drone whose vibration scales with throttle.
What to check: Prop balance, motor bearings, FC soft mount, frame arm tightness. If the noise is broadband (not at a specific frequency), it's probably multiple sources. Fix the biggest one first — usually props.
Pattern 2: Oscillation at a specific frequency, visible as regular waves.
What it looks like: A sine wave overlaid on the gyro trace. Consistent frequency regardless of stick input. May be present on one axis more than others.
What it means: Resonance. Something on the frame has a natural frequency that's being excited by the motors. The FC's filters are either not catching it or are making it worse.
What to check: Look at the frequency (use the Betaflight Blackbox Explorer's spectrum analyzer). Common resonances: - 80–150 Hz: Frame flex (arms, standoffs) - 150–300 Hz: Prop/motor mechanical resonance - 300–600 Hz: Gyro noise floor (filter issue, not mechanical)
If the dynamic notch filter is enabled, check if it's tracking this frequency. If not, adjust the notch range.
Pattern 3: D-term noise spikes, especially on yaw.
What it looks like: The D-term trace (visible in debug mode) is noisy or spiky, even when the gyro trace looks relatively clean. Yaw axis is typically worst.
What it means: The D-term is the derivative of gyro error. It amplifies high-frequency noise by design — that's how it reacts quickly to changes. If the gyro has even small amounts of high-frequency content, D amplifies it into large motor corrections.
What to check: Lower D-term gain (try -20%). If that helps significantly, the issue is D sensitivity to noise, not mechanical. Also check: D-term lowpass filter cutoff (lowering it reduces D noise at the cost of slower D response), dynamic notch filter (should be catching the frequencies that D is reacting to).
Pattern 4: Motor output asymmetry — one motor consistently higher.
What it looks like: In the motor output traces, one motor is always running at higher output than the others. The difference is consistent across throttle levels.
What it means: The FC is compensating for something that makes the drone want to rotate toward the weak motor's side. Possible causes: - Motor or ESC weaker on one side (dying motor, marginal ESC) - Center of gravity offset (battery mounted off-center) - Bent motor mount changing thrust angle - Damaged prop generating less thrust
What to check: Swap the suspect motor to a different arm. If the asymmetry follows the motor, it's the motor. If it stays on the same arm, it's the mount or frame. If it moves to the diagonal, it's CG.
Rule of thumb: Up to 5% asymmetry is normal. 5–10% is worth investigating. Above 10% is a problem that will get worse.
Pattern 5: Voltage sag correlating with performance loss.
What it looks like: Battery voltage drops sharply during aggressive maneuvers. At the same time, motor outputs hit 100% (full throttle commanded but can't produce it), and the gyro shows the drone not achieving the commanded rate.
What it means: The battery can't deliver enough current. The voltage sags, the ESCs can't spin the motors fast enough, and the drone loses authority. This is a power system problem, not a tuning problem.
What to check: Battery internal resistance (measure with a charger that shows IR per cell). IR above 15 mΩ/cell means the pack is aging. Voltage sag below 3.3V/cell under load is concerning. Below 3.0V/cell is damaging the battery.
Don't tune around bad batteries. If the battery is sagging, no amount of PID tuning will fix the performance loss. Replace the battery.
Blackbox Analysis Workflow
Step 1: Pull the log. Immediately after the flight you want to analyze. Don't fly again first.
Step 2: Open in the right tool. - Betaflight: Betaflight Blackbox Explorer - ArduPilot: Mission Planner → DataFlash Log tab, or UAV Log Viewer - PX4: Flight Review or PlotJuggler
Step 3: Look at the gyro first. Always. Before looking at PIDs, motor outputs, or anything else. The gyro tells you what actually happened. Everything else tells you what the FC tried to do about it.
Step 4: Compare setpoint to gyro. The setpoint is what the FC was trying to achieve. The gyro is what actually happened. The gap between them is the error. A well-tuned drone tracks setpoint closely. A poorly tuned one lags, overshoots, or oscillates around it.
Step 5: Check motor outputs. Are they even? Are any hitting 100%? Are there sudden spikes? Motor output tells you how hard the FC is working to maintain control.
Step 6: Check battery voltage. Does it hold steady or sag under load? Voltage sag during aggressive maneuvers is normal. Voltage sag during hover is a problem.
Step 7: If you found a problem, change ONE thing. Fly again. Pull another log. Compare. This is how tuning works — iterative, data-driven, one variable at a time.
What Logs Don't Tell You
-
Why the pilot made a decision. Logs show what the drone did, not what the operator intended. If a flyaway log shows the drone going north, you don't know if the pilot pushed north or if the drone went north on its own without checking the stick inputs.
-
External conditions. Wind, temperature, air density, obstacles — none of these are in the log. A drone that oscillates on a windy day and flies clean on a calm day isn't broken. It's dealing with turbulence. Logs won't show you the wind.
-
What happened after the crash. If the drone hits something and the FC loses power, the log ends. The last few hundred milliseconds of data may be corrupt or missing. The moments before the crash are usually there.
Next
- Chapter 11: PID Tuning for People Who Fly — using blackbox data to improve your tune.
- Chapter 12: When Things Go Wrong — the diagnostic tree that starts with symptoms and uses logs to find causes.
The log is the flight's memory. It remembers what you don't. Pull it. Read it. Trust it over your recollection.
Chapter 11: PID Tuning for People Who Fly, Not Simulate
PID tuning is not magic. P reacts to error. I removes steady error. D resists change. That's it. The rest is learning what each one feels like through the sticks.
What P, I, and D Actually Do
P (Proportional) — The Reaction
P pushes back proportional to how far off the drone is from where it should be. Big error = big correction. Small error = small correction.
Too high: The drone overshoots its target and corrects back, creating fast oscillation. Feels like the quad is vibrating or buzzing, especially visible on a punch-out or sharp turn.
Too low: The drone feels mushy, soft, unresponsive. It drifts through commands instead of snapping to them. Slow to respond to stick input.
What to listen for: P oscillation is fast — 10-50 Hz range. It sounds like a buzz or rattle. If you hear a high-pitched buzzing that increases when you do aggressive maneuvers, P is too high.
I (Integral) — The Memory
I accumulates error over time. If the drone is consistently a little off in one direction (wind pushing it, CG offset, motor imbalance), I builds up a correction to counter it.
Too high: The drone feels "stuck" or slow to change direction. Overshoot on sustained moves. After a long turn, it keeps turning briefly after you release the stick. In extreme cases, I windup causes the drone to suddenly lurch as the accumulated correction releases.
Too low: The drone drifts. In a hover, it doesn't hold position well. In forward flight, wind pushes it off course and it doesn't correct. The quad won't hold a steady rate in a turn.
What to feel for: I issues are slow. If the drone seems to "remember" what it was doing and resists changing, I is too high. If it can't hold a line in wind, I is too low.
For most operators: Leave I at the default. It's the least sensitive of the three terms and the default is usually close enough. Only touch I if you have specific drift or windup problems.
D (Derivative) — The Brake
D resists change. It's proportional to how fast the error is changing, not how big it is. D slows down both the drone's response AND oscillation.
Too high: Motors run hot. D amplifies noise (see Chapter 10, Pattern 3). The drone feels "dampened" — controlled but lacking snap. In extreme cases, motors make a grinding sound from rapid micro-corrections driven by noise.
Too low: The drone overshoots on quick maneuvers. Feels bouncy at the end of rolls and flips. P oscillation becomes harder to control because D isn't there to brake it.
What to listen for: D noise is a constant, low-level motor buzz that's present even in smooth flight. It gets worse with throttle because motor vibration (which D amplifies) increases with RPM.
The D dilemma: You need enough D to control overshoot but not so much that it amplifies noise. This is the core tension in PID tuning and why filters exist — filters clean the gyro signal so D can do its job without reacting to noise.
The Field Tuning Workflow
This workflow assumes you're starting from a reasonable default (Betaflight defaults are a good starting point for most 5-inch builds). If you're building from scratch on unusual hardware, start with community presets for your motor/frame size.
Step 0: Mechanical First
Before touching PIDs, confirm: - Props are balanced and undamaged - Motors spin freely with no grit or catch - FC is soft-mounted properly - Frame has no loose screws or cracked arms - Battery is secured and not shifting in flight
If any of these are wrong, no amount of PID tuning will fix it. See Chapter 12 (Troubleshooting), Step 2.
Step 1: Fly the Default
Fly a representative flight — hover, forward flight, some rolls and flips, a punch-out, some turns. Pay attention to: - Does it feel mushy or sharp? (P) - Does it hold a line in wind? (I) - Does it bounce at the end of maneuvers? (D) - Is there any buzzing or vibration? (P too high or D noise)
Pull a blackbox log.
Step 2: Adjust P
P is where most of the feel comes from. Adjust P first.
- If mushy/soft: raise P by 10%. Fly. Repeat until it feels responsive but not buzzy.
- If buzzy/oscillating: lower P by 10%. Fly. Repeat until the buzz goes away but it still feels locked in.
Adjust roll and pitch P together unless you have a reason not to (asymmetric frame, different prop spacing). Yaw P is usually set independently and is less sensitive.
Step 3: Adjust D
Once P feels right, check D:
- If bouncy at the end of flips/rolls: raise D by 10%.
- If motors are hot or buzzing at idle: lower D by 10%.
- If blackbox shows D-term noise: lower D, then check filters.
D and P interact — raising P often requires raising D to maintain damping. If you raised P in Step 2, you may need more D.
Step 4: Leave I Alone (Usually)
I is rarely the problem for freestyle and racing. If the default works, keep it.
- If the quad drifts in hover or can't hold a turn rate in wind: raise I by 10-20%.
- If the quad feels sluggish to change direction or has overshoot on sustained turns: lower I.
Step 5: Check Filters
If you can't get P and D where you want them because noise starts before you reach the desired gain, the issue is filters, not PIDs.
- Enable dynamic notch filter if not already enabled.
- Check gyro lowpass filter cutoff. Betaflight default (250 Hz for gyro lowpass 1) is fine for clean builds. Noisy builds may need 150-200 Hz.
- Check D-term lowpass. This is the most impactful filter for D noise. Lowering it from 150 Hz to 100 Hz significantly reduces D noise but also slows D response.
The filter-PID relationship: Filters remove noise so PIDs can run higher without reacting to it. A well-filtered build can run higher P and D, which means sharper and more responsive flight. A poorly filtered build (or a build with mechanical vibration issues) must run lower PIDs to compensate.
Step 6: Fly, Log, Compare, Repeat
After each change: 1. Fly a representative flight (same maneuvers as before) 2. Pull blackbox 3. Compare gyro traces to the previous flight 4. Did it get better or worse? If better, keep the change. If worse, revert.
One change at a time. If you change P, D, and filters simultaneously, you won't know what helped and what hurt.
Rates vs. PIDs
Rates and PIDs are different things. People confuse them constantly.
Rates control how fast the drone rotates per degree of stick deflection. Higher rates = faster rotation at full stick. Rates affect how the drone FEELS to fly but they don't affect stability.
PIDs control how well the drone FOLLOWS the rate command. Higher P = more aggressively follows the command. Higher D = more damped following.
If the drone feels slow: it might be rates (increase max rate), not PIDs.
If the drone feels floaty: it might be PIDs (increase P), not rates.
If the drone rotates at the right speed but wobbles while doing it: that's PIDs.
Tuning for Different Flight Styles
Freestyle
- Higher P for crisp, snappy response
- Moderate D for controlled stops after flips
- Lower I is acceptable (you're not holding position)
- Slightly higher rates (800-1200 deg/s max)
Racing
- Moderate P — not as high as freestyle because you need predictability, not snap
- Higher D to damp oscillation in high-speed turns
- Higher I to hold lines through corners and in prop wash
- Lower rates than freestyle (600-900 deg/s) for precision
Cinematic / Smooth
- Lower P for gentle, smooth movements
- Lower D to avoid any micro-corrections visible in footage
- Standard I
- Low rates (400-600 deg/s) for butter-smooth pans
Long-Range / GPS Cruise
- Default PIDs are usually fine
- I matters more here (wind rejection, position hold)
- D can be lower (less aggressive flying = less noise)
- Rates are less important (you're not doing flips at 5 km)
When to Stop Tuning
The tune is "good enough" when: - No audible buzz or vibration in normal flight - The drone responds to stick inputs without delay or overshoot - Blackbox gyro traces are clean (no sustained oscillation) - Motors are warm after flight, not hot (hot = D noise or P oscillation making the ESCs work too hard) - You stop noticing the quad and start noticing the flying
Most pilots overtune. The difference between a "good" tune and a "perfect" tune is 2-3% performance improvement that you'll never notice in real flying. Get it to "no oscillation, responsive, motors not hot" and go fly.
Next
- Chapter 10: Blackbox Logs — reading the data that drives these tuning decisions.
- Chapter 12: When Things Go Wrong — when the problem isn't PIDs at all.
The best tune is the one that lets you forget about the quad and focus on the flying. If you're thinking about PIDs in the air, you're not done tuning. If you're not thinking about PIDs in the air, you probably are.
Chapter 12: When Things Go Wrong
This is the chapter you read at the field with a broken drone in your hands. Start with the symptom. Follow the tree.
How to Use This Chapter
Find your symptom in the list below. Follow the diagnostic steps in order. Each step either solves the problem or narrows it down. Don't skip steps — the obvious cause is often not the actual cause.
Symptom: Won't Arm
The FC refuses to arm. This is the most common field problem and the one with the most possible causes.
Step 1: Read the arming flags.
- Betaflight: CLI → status → look for arming disable flags
- iNav: CLI → status → same
- ArduPilot: GCS → Messages tab → pre-arm check failures
- PX4: QGC → Vehicle Setup → Summary → pre-arm checks
Step 2: Common arming flags and fixes.
| Flag | Meaning | Fix |
|---|---|---|
| RXLOSS / No RC | FC not receiving RC signal | Check UART assignment, baud rate, protocol selection. Verify receiver is powered and bound. |
| ACC not cal | Accelerometer not calibrated | Calibrate accel (level the quad, run cal in configurator) |
| ANGLE | Quad not level enough | Place on level surface. If on uneven ground, raise arm angle limit temporarily. |
| THROTTLE | Throttle not at minimum | Move throttle stick fully down. Check endpoint calibration. |
| CLI | CLI is open | Close the CLI connection |
| MSP | MSP connection active preventing arm | Some configurator connections block arming. Disconnect. |
| LOAD | CPU overloaded | Reduce gyro/PID loop frequency or disable unnecessary features |
| RPMFILTER | RPM filter configured but no signal | Check ESC telemetry UART or disable RPM filter |
| GPS FIX | Requires GPS fix before arm (nav modes) | Wait for GPS lock or disable GPS pre-arm requirement |
Step 3: If no flags show but still won't arm. - Check switch assignment. Arm switch might be on a channel that isn't configured or is inverted. - Check throttle endpoints. Some FCs require throttle below 1050 µs. - Power cycle everything. Receiver, FC, ESCs. In that order.
Symptom: Oscillation / Vibration in Flight
The quad shakes, wobbles, or makes a buzzing sound in flight. Could be mechanical or electronic.
Step 1: Determine if it's always present or speed-dependent. - Always present (even at hover): likely filter or PID issue - Only at high throttle: likely mechanical — prop balance, motor bearing, loose standoff - Only after a crash: prop damage, bent motor shaft, cracked frame arm
Step 2: Check mechanical first. Always. Before touching PIDs. - Spin each motor by hand. Feel for grit, catch, or uneven resistance. One bad bearing can cause the whole quad to oscillate. - Check props for damage. Even a tiny nick changes balance. Replace suspect props — they're the cheapest component. - Check motor mounting screws. Loose motor = oscillation source. - Press on each arm. Flex = vibration transmission path. Carbon fiber arms don't flex. Cheap 3D-printed arms do. - Check FC mounting. Soft mount grommets should be intact and the FC should not contact the frame directly.
Step 3: Pull a blackbox log. If mechanical checks pass: - Look at gyro traces. Clean gyro = clean flight. Noisy gyro = something is shaking the FC. - Compare pre-filter and post-filter gyro. If pre-filter is noisy but post-filter is clean, your filters are working hard. Consider addressing the source instead of filtering harder. - Look for a specific frequency peak. A resonance at a consistent frequency often indicates a specific mechanical source: - Prop-speed frequency: prop balance issue - Frame resonance (usually 100-300 Hz): frame flex - Motor bearing: broadband noise that increases with throttle
Step 4: If it's a filter/PID issue: - Lower D-term first. D is the most noise-sensitive PID term. Drop D by 20% and fly again. - Check dynamic notch filter. If not enabled, enable it. If enabled, check that it's tracking the right frequency range. - Lower gyro lowpass filter cutoff. Default is usually fine, but noisy builds may need 150 Hz instead of 200 Hz. - As a last resort, lower P-term. But if you need to drop P significantly to stop oscillation, the problem is mechanical, not tuning.
Symptom: Flyaway / Unexpected Movement
The drone moves in a direction the pilot didn't command.
Step 1: Did it respond to stick input during the event? - Yes, but drifted: likely sensor issue (compass interference, GPS glitch, accelerometer drift) - No response to sticks at all: likely failsafe triggered, mode switch, or loss of RC link
Step 2: Check flight mode. Did the mode change unexpectedly? - A mode switch bumped during handling can change from acro to angle to GPS hold, causing unexpected behavior. - ArduPilot/PX4: check mode channel (usually CH5) assignment and thresholds. - Betaflight: check mode tab for overlapping ranges on the aux channels.
Step 3: Check compass and GPS. For GPS-assist modes: - Compass interference from power wires is the #1 cause of GPS-mode flyaways. The compass reads the magnetic field from the battery leads as a heading change and "corrects" by turning. - Fix: move the compass (external GPS/compass module) as far from power wires as possible. Use a GPS mast. - Check for GPS glitch in the log. A sudden position jump causes the FC to "correct" toward the wrong position.
Step 4: After landing, pull logs immediately. Don't fly again until you understand what happened. Logs will show stick inputs, actual motor outputs, sensor readings, and mode changes. The cause is almost always visible in the data.
Symptom: Video Loss / Breakup
FPV video feed drops, goes to static, shows artifacts, or freezes.
Step 1: Analog or digital?
Analog 5.8 GHz: - Gradual static/snow = range limit or obstruction. Normal degradation. - Sudden black screen = VTX failure, antenna disconnect, or power loss to VTX. - Rolling lines or interference pattern = self-interference from another transmitter on the same airframe (RC, mesh radio). - Check antenna connector. IPEX/U.FL connectors are fragile. A crash can unseat them without visible damage. Reseat and check. - Check VTX power. Is it set to the right level? Too low = no range. Too high = overheating (some VTXs thermal throttle or shut down).
Digital (DJI, HDZero, Walksnail): - Frozen frame = link degradation. Digital doesn't gracefully degrade like analog — it works perfectly until it doesn't, then freezes. - Gray screen / "No Signal" = complete link loss. - Latency spike = the link is fighting to maintain connection. Reduce range or increase power. - Check firmware versions. DJI goggles and air unit firmware must match. Mismatched firmware can cause connection failures.
Step 2: Is it consistent or intermittent? - Consistent at a specific distance/direction = range or obstruction. Normal. Adjust flight pattern or antenna. - Intermittent at close range = self-interference, loose antenna, or power supply issue. Check that VTX is getting clean power (no voltage sag from motor current). - Only happens at high throttle = voltage sag pulling VTX supply below minimum. Add a capacitor on the VTX power input or use a dedicated BEC.
Symptom: Motor Desync / Stuttering
One or more motors stutters, stops momentarily, or makes grinding sounds.
Step 1: Is it one motor or all? - One motor: likely ESC or motor issue (bearing, winding, timing) - All motors: likely FC signal issue (DShot errors, wiring)
Step 2: Swap the suspect ESC and motor. If the problem follows: - The motor: bad bearing or winding - The ESC: bad ESC - Neither (stays on the same arm): wiring issue on that arm
Step 3: Check motor timing. In BLHeli_S/BLHeli_32/AM32: - Stock timing is usually fine. If someone has adjusted it, try resetting to default. - High timing + high KV + low battery voltage = desync recipe.
Step 4: Check DShot settings. - Bidirectional DShot (for RPM filter) can cause desyncs on some ESC/motor combinations. Try disabling it to test. - DShot300 is more reliable than DShot600 on longer signal wires. If wires from FC to ESC are >10 cm, try DShot300.
Symptom: Failsafe Triggered in Flight
The drone enters failsafe (lands, returns home, or drops) unexpectedly.
Step 1: Determine which failsafe. - RC failsafe (lost RC link): check RC RSSI in the log. Was signal actually lost or did the FC misinterpret a signal issue? - Battery failsafe: check voltage in the log. Did voltage sag below threshold under load? - GPS failsafe (geofence, GPS loss): check GPS data in log. - GCS failsafe (ArduPilot/PX4): lost MAVLink heartbeat from GCS.
Step 2: RC failsafe diagnosis.
- Check RSSI history in the log. A gradual decline to zero = range.
A sudden drop = obstruction, interference, or antenna issue.
- Check failsafe settings. Betaflight: failsafe_procedure.
ArduPilot: FS_THR_ENABLE + FS_THR_VALUE. PX4: COM_RC_LOSS_T.
- Is failsafe set to the right response? "Drop" is rarely what
you want. "Land" or "RTH" are usually better. But RTH requires
GPS — if GPS isn't locked, RTH failsafe may not work.
- Check RC receiver failsafe behavior. Some receivers output "no pulses"
on signal loss (correct). Others output last-known values (dangerous
— FC doesn't know signal is lost). Others output a pre-set failsafe
position. Verify your receiver's behavior.
Step 3: Battery failsafe diagnosis. - Voltage sag under load can briefly dip below the failsafe threshold even when the battery has plenty of capacity. - Fix: lower the failsafe voltage threshold, or use mAh-consumed instead of voltage as the trigger (more reliable). - Check battery internal resistance. An aging battery sags more under load. If your pack used to fly 5 minutes and now triggers failsafe at 3 minutes, the battery is dying.
Symptom: GPS Glitch / Toilet Bowl / Position Drift
In GPS-assist modes, the drone circles, drifts, or jumps to a wrong position.
Step 1: Check satellite count. Below 8-10 satellites, GPS position accuracy degrades significantly. Don't use GPS modes with < 8 sats.
Step 2: Check HDOP. Horizontal Dilution of Precision. Below 1.5 is good. Above 2.5 is unreliable. Above 4.0, don't trust GPS position at all.
Step 3: Toilet bowl = compass problem. The classic circular drift pattern means the compass heading is wrong, so the FC "corrects" in the wrong direction, overshoots, corrects again, and orbits. - Calibrate compass away from metal, cars, buildings. - Move external compass away from power wires and motors. - Check compass orientation matches FC configuration. - If using internal compass on an FC near ESCs: disable it and use external compass only.
Step 4: Position jumps = multipath or interference. - Near buildings, GPS signals bounce off walls, creating phantom positions. This is normal in urban environments. No fix except dual-band GPS (L1+L5) which is more resistant to multipath. - Near military installations or during exercises, GPS can be jammed or spoofed. If GPS suddenly shows you 50 km away, that's not a hardware problem.
The Universal Diagnostic Rule
When something breaks:
-
Don't change multiple things at once. Change one thing, test, observe. If you change PID, filter, and rates all at once, you won't know what fixed (or broke) it.
-
Pull logs before flying again. The data is in there. Every time you fly without understanding why it broke, you're gambling.
-
Trust the instruments, not your memory. "I think it was oscillating on roll" is less useful than "gyro roll axis shows 200 Hz peak at 40% throttle." Log it. Read it. Then fix it.
-
The simplest explanation is usually right. Loose prop nut causes more crashes than firmware bugs. Check the physical hardware first.
Next
- Chapter 10: Blackbox Logs — What They Tell You — how to read the data that diagnoses everything in this chapter.
- Chapter 11: PID Tuning for People Who Fly — the tuning workflow that addresses oscillation and performance issues.
Something broke. That's normal. The question is whether you understand why, or whether you're about to break it again.
Chapter 13: Adding a Companion Computer
A flight controller flies the drone. A companion computer thinks about why it's flying. They're different jobs on different hardware connected by a serial cable.
When You Need One
You don't need a companion computer to fly a drone. You need one when:
- Autonomous missions beyond waypoints — obstacle avoidance, dynamic replanning, following a target, search patterns
- Computer vision — object detection, tracking, landing on a target, visual navigation without GPS
- Sensor fusion — combining LiDAR, depth cameras, and IMU data for environment mapping
- High-bandwidth data processing — real-time video analytics, SIGINT, spectrum analysis
- Network hub — bridging the FC to mesh radios, cellular modems, and other IP-based devices
- AI/ML inference — running neural networks for real-time decisions
If all you need is fly-to-waypoint with GPS, the FC handles that natively on ArduPilot and PX4. Don't add complexity you don't need.
The Hardware Options
| Platform | CPU | RAM | GPU / Accelerator | Weight | Power | Price | Best For |
|---|---|---|---|---|---|---|---|
| Raspberry Pi 5 | Cortex-A76 4-core | 4-8 GB | None (VideoCore for display) | 50g | 5-10W | $60-80 | General companion, MAVProxy, basic CV |
| Pi Zero 2W | Cortex-A53 4-core | 512 MB | None | 10g | 1-3W | $15 | Lightweight telemetry, data logging, RF detect |
| Jetson Orin Nano | Cortex-A78AE 6-core | 8 GB | 1024 CUDA + 32 Tensor | 60g (module) | 7-15W | $250-500 | ML inference, real-time CV, object detection |
| Jetson Orin NX | Cortex-A78AE 8-core | 8-16 GB | 1024 CUDA + 32 Tensor | 60g (module) | 10-25W | $400-900 | Heavy ML, multiple camera streams |
| ModalAI VOXL 2 | QRB5165 | 8 GB | Hexagon DSP + GPU | 16g | 4-8W | $400 | Integrated flight platform, PX4 native |
| Radxa Zero 3W | RK3566 4-core | 2 GB | Mali-G52 | 10g | 2-4W | $25 | Budget Linux companion, WiFi scanning |
What Matters Most
Weight: On a 5-inch quad, every gram counts. A Pi 5 at 50g (plus carrier board, cables, heatsink) adds 80-100g total. That's a significant percentage of all-up weight. A Pi Zero 2W at 10g is much more practical for small platforms.
Power: A companion drawing 10W from a 1300 mAh 6S battery is consuming roughly 30% of your total energy budget. Flight time drops proportionally. Budget the power before choosing the hardware.
I/O: The companion needs to connect to the FC (UART or USB), to the network (WiFi, Ethernet for mesh radio, USB for cellular), and to sensors (USB cameras, CSI cameras, SPI/I2C sensors). Count your I/O requirements before selecting hardware.
Connecting to the Flight Controller
The Physical Connection
The companion talks to the FC over serial (UART) or USB. Serial is preferred for reliability — USB adds a hub, OTG logic, and enumeration that can fail.
Companion TX → FC UART RX
Companion RX → FC UART TX
Companion GND → FC GND
Baud rate: 921600 for high-bandwidth MAVLink. 115200 for MSP. Match both ends.
Level shifting: Pi GPIO is 3.3V. Most FCs are 3.3V. Compatible without level shifting. If your FC has 5V serial outputs (rare), use a level shifter or resistor divider.
The Protocol
ArduPilot / PX4: MAVLink v2. The companion runs mavproxy, MAVSDK, DroneKit, or a custom MAVLink parser. The FC streams telemetry to the companion and accepts commands from it.
# ArduPilot: connect via MAVSDK (Python)
from mavsdk import System
drone = System()
await drone.connect(system_address="serial:///dev/ttyAMA0:921600")
# PX4: connect via MAVSDK (same API, different autopilot behavior)
drone = System()
await drone.connect(system_address="serial:///dev/ttyAMA0:921600")
Betaflight / iNav: MSP over serial. The companion sends MSP requests and receives MSP responses. No streaming — poll-based.
# MSP: manual serial (simplified)
import serial
ser = serial.Serial('/dev/ttyAMA0', 115200)
# Send MSP_IDENT request
ser.write(bytes([0x24, 0x4D, 0x3C, 0x00, 0x64, 0x64]))
response = ser.read(32)
PX4 Dual-Channel
PX4 supports two simultaneous communication channels:
- MAVLink (UART) — commands, parameters, mission, C2
- uXRCE-DDS (UART or UDP) — high-bandwidth sensor telemetry, ROS2 topics
The dual-channel architecture lets you separate control traffic (low bandwidth, high priority) from data traffic (high bandwidth, lower priority). The companion runs a Micro-XRCE-DDS agent that bridges PX4's internal uORB topics to ROS2 topics on the companion.
This replaces the older microRTPS bridge. If you see references to microRTPS in older documentation, use uXRCE-DDS instead.
Software Stack
MAVProxy (Simplest)
MAVProxy is a command-line MAVLink proxy. It connects to the FC, parses MAVLink, and forwards it to multiple destinations (GCS, scripts, log files).
# Basic: FC on serial, forward to GCS on mesh radio
mavproxy.py \
--master=/dev/ttyAMA0,921600 \
--out=udp:10.0.0.255:14550
MAVProxy can run scripts (modules) that react to MAVLink messages. It's the fastest path from "I have a companion computer" to "I have telemetry flowing to a mesh radio."
MAVSDK (Programmatic Control)
MAVSDK is a library (Python, C++, Swift, Rust) for programmatic drone control over MAVLink. It abstracts MAVLink messages into clean API calls.
# Take off, fly to a point, land
await drone.action.arm()
await drone.action.takeoff()
await drone.action.goto_location(lat, lon, alt, yaw)
await drone.action.land()
MAVSDK is the recommended path for PX4. For ArduPilot, both MAVSDK and DroneKit work (DroneKit is older, more ArduPilot-specific).
ROS2 (Full Robotics Stack)
ROS2 (Robot Operating System 2) is the standard middleware for robotics. It provides publish/subscribe messaging, service calls, parameter management, and a massive ecosystem of packages for navigation, perception, planning, and control.
PX4 integrates with ROS2 via uXRCE-DDS. ArduPilot has a ROS2 interface via mavros2.
When to use ROS2: When you need sensor fusion (multiple cameras, LiDAR, IMU), SLAM (Simultaneous Localization and Mapping), path planning with obstacle avoidance, or integration with existing robotics software. ROS2 is heavyweight — it's the right choice for research and complex autonomy, overkill for "relay telemetry to a mesh radio."
Power and Cooling
Power Distribution
The companion needs clean, stable power. Noise from ESCs and motors on the main power bus will crash a Pi faster than any software bug.
Recommended: Dedicated BEC (Battery Eliminator Circuit) from the main battery to the companion. 5V, rated for the companion's peak current draw (2A minimum for Pi 5, 500mA for Pi Zero 2W).
Do not: - Power the companion from the FC's 5V rail (not enough current for most companions, and FC brownout risk) - Share a BEC with servos or LEDs (current spikes from servos cause voltage drops that crash the companion) - Use a USB cable to power the companion from the FC (USB host mode, OTG, and power delivery vary wildly between platforms)
Cooling
Most companions need cooling at sustained load. A Pi 5 at full CPU load will thermal throttle within minutes without airflow.
On a drone, the props create significant airflow. Mount the companion where prop wash hits the heatsink. In a sealed enclosure, this doesn't help — add a small thermal pad to conduct heat to the frame (carbon fiber is a reasonable heat spreader).
The VOXL 2 is designed for drones and handles thermal management internally. The Jetson Orin modules require active cooling (fan) for sustained ML inference.
The UART Budget Impact
Adding a companion computer consumes at least one FC UART. If you're using the companion-as-hub architecture (see Chapter 8), it may be the only non-RC UART you need — GPS, mesh radio, and telemetry radio connect to the companion instead of the FC.
Before (consuming 4 FC UARTs):
FC ← RC receiver (UART1)
FC ← GPS (UART2)
FC ← Telemetry radio (UART3)
FC ← Mesh radio (UART4)
After (consuming 2 FC UARTs):
FC ← RC receiver (UART1)
FC ← Companion MAVLink (UART2)
Companion ← GPS (USB)
Companion ← Telemetry radio (Ethernet)
Companion ← Mesh radio (Ethernet)
Companion ← Camera (USB/CSI)
This is one of the strongest practical reasons to add a companion even if you don't need AI or computer vision: it solves the UART shortage on F4-class FCs.
What to Start With
If you've never used a companion computer on a drone:
-
Start with a Pi Zero 2W ($15, 10g, 2W). Wire it to the FC UART, install MAVProxy, forward telemetry to your laptop over WiFi. This proves the concept without the weight or power penalty.
-
Graduate to a Pi 5 when you need more compute — running CV models, processing sensor data, or hosting a Wingman agent.
-
Move to Jetson or VOXL 2 when you need real-time ML inference with multiple camera streams. This is where object detection, visual SLAM, and neural network planning live.
The hardware changes. The MAVLink connection pattern stays the same. Learn it once on a Pi Zero and it works the same on a Jetson.
Next
- Chapter 8: UART Layout — how the companion fits into the FC's limited serial ports.
- Chapter 14: Mesh Radios — the network hardware that the companion bridges to the FC.
The flight controller flies. The companion thinks. Don't make the flight controller think. Don't make the companion fly.
Chapter 14: Mesh Radios for Multi-Vehicle Operations
The expensive tactical mesh radio in your kit bag is running the same open-source software as a $15 router. Knowing this changes how you think about mesh networking.
What Mesh Radios Actually Are
A mesh radio is a WiFi radio in a ruggedized enclosure with custom firmware that routes traffic between nodes without infrastructure. No access point, no router, no internet connection. Nodes find each other, establish links, and route packets through intermediate nodes to reach destinations.
That's it. Everything else is implementation detail.
The Software Stack (What They Won't Tell You in the Datasheet)
| Vendor | Operating System | Mesh Protocol | Radio Hardware |
|---|---|---|---|
| Doodle Labs | OpenWRT (Linux) | batman-adv (layer 2 mesh) | Qualcomm/Atheros WiFi |
| Silvus | Custom Linux | Custom MAC + TDMA | Custom MIMO radio |
| Persistent Systems | Custom Linux | Wave Relay (proprietary) | Custom wideband |
| Rajant | Custom Linux | InstaMesh (proprietary) | Dual-radio Atheros |
Doodle Labs is the most transparent about this — their radios run OpenWRT, and if you SSH into one (which you can), you'll see batman-adv kernel modules, standard Linux networking, and iptables rules. The "mesh intelligence" that costs $3,000 per radio is largely batman-adv with custom antenna design and RF front-end optimization.
This isn't a criticism. Antenna design, RF front-end engineering, thermal management, and ruggedization are real engineering. The software is well-integrated and tuned. But understanding that the foundation is open-source Linux networking demystifies mesh radios and helps you troubleshoot them.
The Major Players
Doodle Labs
What they sell: Compact mesh radios from 200 MHz to 6 GHz. The Mini series (Mini900, Mini2400, etc.) are small enough to mount on a drone. The MR series are larger with better RF performance. The Helix series covers L/S/C bands for defense.
What's good: - Open platform (OpenWRT) — you can SSH in and configure anything - Small form factor (Mini series fits on a 5-inch quad) - Wide frequency range across the product line - batman-adv mesh is well-understood and debuggable - Active development, responsive technical support
What's not: - batman-adv mesh has convergence delays when topology changes (a drone moving fast can outrun the routing table) - Power consumption is significant (2-5W depending on model) - At the low end (Mini series), RF performance is limited by the tiny antenna and low TX power
Typical use: Commercial drone fleets, tactical ISR, research platforms, any application where you want mesh but also want to understand and customize the network.
Silvus Technologies
What they sell: StreamCaster mesh radios. Higher-end than Doodle Labs, with custom MIMO radio hardware and their own MAC-layer protocol. The SC4200/4400 series are the workhorses.
What's good: - Custom MIMO gives better spectral efficiency than commodity WiFi - TDMA-based MAC layer provides deterministic latency - High throughput (up to 100 Mbps per radio) - Strong defense/government customer base - Good video streaming support (multicast-aware mesh)
What's not: - Closed platform — you can't SSH in and debug the way you can with Doodle Labs - Expensive ($5,000-15,000 per node) - Configuration is through their web GUI, which is functional but not scriptable - Larger and heavier than Doodle Labs Mini series
Typical use: Defense ISR, government operations, commercial applications where budget supports the higher cost.
Persistent Systems
What they sell: MPU5 (manpack), Wave Relay ecosystem. The most mature tactical mesh network product. Used extensively by US SOF and allied forces.
What's good: - Wave Relay protocol is the most resilient mesh available — handles high mobility, rapid topology changes, and contested spectrum better than batman-adv - Proven in combat - Ecosystem includes vehicle mounts, body-worn units, drone-specific form factors - Integrated MANET management tools
What's not: - Most expensive option ($10,000-50,000 per node) - Heaviest option (MPU5 is not going on a 5-inch quad) - Closed ecosystem — Wave Relay doesn't interoperate with batman-adv or other mesh protocols - Long procurement cycles for military variants
Typical use: Military operations, high-end defense ISR, applications where proven combat performance justifies the cost.
Rajant
What they sell: BreadCrumb mesh radios. Dual-radio architecture (each node has two radios on different bands for simultaneous transmit and receive on different frequencies).
What's good: - Dual-radio avoids the half-duplex penalty of single-radio mesh - InstaMesh protocol handles mobility well - Good industrial track record (mining, oil & gas)
What's not: - Larger form factor than Doodle Labs - Less drone-specific than Silvus or Persistent
Typical use: Industrial applications, infrastructure monitoring, some defense applications.
Mesh Networking Fundamentals
How batman-adv Works (And Why It Matters)
batman-adv (Better Approach To Mobile Ad-hoc Networking - advanced) is a Linux kernel module that implements layer-2 mesh routing. It's what Doodle Labs and many other mesh products use underneath.
Key concepts: - Each node broadcasts OGMs (Originator Messages) periodically. These propagate through the mesh, allowing every node to learn the best path to every other node. - OGM interval (default 1 second) controls how fast the mesh adapts to topology changes. Lower = faster adaptation but more overhead. - TQ (Transmit Quality) is batman-adv's link quality metric. It's calculated from OGM reception rates. Higher = better link. - Routing is hop-by-hop. Each node only needs to know the next hop toward the destination, not the full path.
Why this matters for drones: Drones move fast. A mesh network optimized for static nodes (cell towers, sensor posts) may not adapt fast enough for a drone moving at 20+ m/s. If the OGM interval is 1 second and the drone has moved 20 meters since the last OGM, the routing table may be stale. Solutions: - Lower OGM interval (250-500 ms for fast-moving nodes) - Accept that mesh routing will lag position by 0.5-1 second - Use direct unicast for time-critical messages when nodes are within direct radio range (bypass mesh routing)
Throughput vs. Hops
Every hop in a mesh network costs throughput. A single-hop link at 50 Mbps becomes roughly: - 2 hops: ~25 Mbps - 3 hops: ~17 Mbps - 4 hops: ~12 Mbps
This is because traditional mesh radios are half-duplex — they can't transmit and receive at the same time on the same channel. Each hop requires the intermediate node to receive, then retransmit. Rajant's dual-radio approach mitigates this by receiving on one radio while transmitting on the other.
For drone operations: Keep the mesh shallow. 2-3 hops maximum for real-time data (telemetry, commands). Store-and-forward is acceptable for non-real-time data (sensor logs, blackbox files).
Channel Planning
Mesh radios on the same channel form a shared collision domain. More nodes = more contention = less per-node throughput.
Rules of thumb: - Up to 5 nodes on one channel works well - 5-15 nodes: consider splitting into two channels with a gateway node bridging them - 15+ nodes: you need a proper network plan with multiple channels and deliberate topology
For drone swarms, the practical limit is usually 8-12 platforms on a single mesh channel before throughput degrades noticeably. This aligns with typical tactical swarm sizes.
Practical Setup: Doodle Labs on a Drone
This section covers the most common drone mesh setup — a Doodle Labs Mini radio on a multi-rotor.
Physical Installation
- Mount with the antenna(s) pointing down or outward, not blocked by carbon fiber. CF is a moderate RF attenuator.
- Keep the radio away from the ESCs and battery leads. Conducted EMI from motor current can desense the radio's receiver.
- Power from a dedicated BEC, not the FC's 5V rail. Mesh radios draw 500-2000 mA and the FC's regulator may not handle it.
- Secure the Ethernet or USB cable. A disconnect in flight kills your mesh link and possibly your telemetry.
Network Configuration
- Assign static IP addresses. DHCP works but adds boot time and can fail in contested RF environments.
- Use a consistent addressing scheme:
10.0.0.{MAVLink_system_ID}— GCS is 10.0.0.255, drone 1 is 10.0.0.1, drone 2 is 10.0.0.2, etc. - Set the mesh SSID and encryption key to match across all nodes. PSK (pre-shared key) with AES-256 is standard.
- Set the OGM interval based on platform speed:
- Static ground nodes: 1000 ms (default)
- Slow-moving drones (<10 m/s): 500 ms
- Fast-moving drones (>10 m/s): 250 ms
MAVLink Over Mesh
The companion computer (or FC with Ethernet) sends MAVLink over UDP to the mesh radio. The mesh radio delivers it to the GCS.
FC (UART) → Companion (mavproxy) → UDP → Mesh Radio → [mesh] → GCS
MAVProxy configuration on the companion:
mavproxy.py --master=/dev/ttyS1,921600 --out=udp:10.0.0.255:14550
On the GCS, QGroundControl or Mission Planner listens on UDP 14550 for incoming MAVLink from any mesh node.
Critical: Set the MAVLink system ID on each drone to a unique value.
If two drones both use system ID 1, the GCS can't distinguish them.
PX4: MAV_SYS_ID parameter. ArduPilot: SYSID_THISMAV parameter.
When Mesh Isn't The Answer
Mesh networking adds weight, power consumption, complexity, and a new failure mode to every platform. Before adding a mesh radio, ask:
-
Do I need real-time data between platforms? If each drone operates independently and you analyze data after landing, you don't need mesh. You need SD cards and patience.
-
Can I solve it with sequential operations? If you can brief platforms one at a time via direct link (Tooth, phone, laptop), you don't need mesh. Mesh is for simultaneous coordination.
-
Is my mesh just carrying telemetry to a GCS? If you only need one drone's telemetry at a time, a point-to-point telemetry radio (RFD900x) is simpler, cheaper, lighter, and more reliable than mesh.
-
Is my operation within visual line of sight? If all platforms are within 500m of the operator, ESP-NOW (free, built into ESP32, no additional hardware) may be sufficient for coordination.
Mesh is the right answer when you need multiple platforms sharing data simultaneously, beyond point-to-point range, with dynamic topology. For everything else, simpler is better.
Next
- Chapter 13: Adding a Companion Computer — the compute platform that bridges the FC and the mesh radio.
- Chapter 15: TAK Integration — getting drone data onto the tactical common operating picture.
A $5,000 mesh radio is a $15 router with a great antenna and a ruggedized case. Respect the engineering. But don't be intimidated by it.
Chapter 15: TAK Integration
TAK is where your drone shows up on the map next to everyone else's position. Getting there doesn't require a defense contractor. It requires one UDP packet.
What TAK Is
TAK (Team Awareness Kit) is a situational awareness platform used by the US military, law enforcement, fire services, and increasingly by civilian teams. It shows positions, tracks, sensor data, and messages on a shared map.
The ecosystem: - ATAK — Android TAK (phone/tablet) - WinTAK — Windows version (laptop) - iTAK — iOS version - TAK Server — centralized server for team data sharing - WebTAK — browser-based viewer
TAK speaks one protocol: Cursor-on-Target (CoT). Everything that appears on the map is a CoT event — an XML message with a type, position, and metadata. If your drone can send a CoT event, it appears on TAK.
Cursor-on-Target (CoT) Basics
A CoT event is an XML message. Here's the minimum viable drone position report:
<?xml version="1.0" encoding="UTF-8"?>
<event version="2.0"
uid="drone-01"
type="a-f-A-M-H-Q"
how="m-g"
time="2026-03-16T18:30:00Z"
start="2026-03-16T18:30:00Z"
stale="2026-03-16T18:30:30Z">
<point lat="44.9778" lon="-93.2650" hae="300"
ce="10" le="15"/>
</event>
That's it. Send this over UDP to port 4242 on a TAK Server or directly to ATAK devices on the local network, and your drone appears on the map.
The Fields That Matter
uid: Unique identifier for your drone. Once set, every update
with the same uid moves the same icon on the map. Use something
stable — wingman-{tooth-id} or drone-{serial}.
type: The CoT type code determines the icon and classification. It follows the 2525C symbology standard:
| Type Code | Meaning | Icon |
|---|---|---|
| a-f-A-M-H-Q | Friendly, Air, Military, Rotary Wing | Blue helicopter |
| a-f-A-M-F-Q | Friendly, Air, Military, Fixed Wing | Blue airplane |
| a-f-G | Friendly, Ground | Blue ground vehicle |
| a-n-A-M-H-Q | Neutral, Air, Rotary Wing | Green helicopter |
| a-h-A-M-H-Q | Hostile, Air, Rotary Wing | Red helicopter |
| a-h-G-E-V-A | Hostile, Ground, Equipment, Vehicle | Red vehicle (used for RF detections) |
The first character after a- is the affiliation:
f = friendly, n = neutral, h = hostile, u = unknown.
how: How the position was determined.
m-g = machine GPS, h-e = human entry, h-g-i-g-o = GPS from another source.
time/start/stale: When the event was generated, when it starts being valid, and when it becomes stale (should be removed from the map if not refreshed). Set stale to 30-60 seconds for a moving drone so the icon disappears if the drone stops reporting.
point: Latitude, longitude, height above ellipsoid (meters), circular error (meters), linear error (meters).
Adding Detail
Telemetry in CoT
CoT supports a <detail> element for additional data. TAK clients
display this in the info popup when you tap the icon:
<event ...>
<point lat="44.9778" lon="-93.2650" hae="300" ce="10" le="15"/>
<detail>
<remarks>Battery: 14.8V (76%) | Alt: 300m AGL | Speed: 12 m/s</remarks>
<track course="045" speed="12"/>
<contact callsign="WINGMAN-01"/>
<__group name="Blue" role="Team Member"/>
</detail>
</event>
track: Course (degrees true) and speed (m/s). Allows TAK to show heading arrows and predict future position.
contact: The callsign displayed on the map next to the icon.
__group: Team assignment and role. Determines icon color in some TAK configurations.
remarks: Free-text field. Put your telemetry summary here. ATAK shows it in the detail popup.
Sensor Point of Interest
When your drone detects something (RF emission, visual target, anomaly), send a separate CoT event for the detection:
<event uid="detect-001"
type="a-h-G-E-V-A"
how="m-g" ...>
<point lat="44.9790" lon="-93.2640" hae="0" ce="50" le="50"/>
<detail>
<remarks>RF Detection: DoodleLabs MR900 | RSSI: -72 dBm | Bearing: 045</remarks>
<contact callsign="RF-DETECT-001"/>
</detail>
</event>
This places a hostile marker on the map at the estimated position of the detection. The NeedleNThread tactical RF detector uses exactly this pattern to push detections to TAK.
Transport: Getting CoT to TAK
Direct UDP (Simplest)
Send CoT XML as a UDP packet to ATAK devices on the local network. Default port: 4242.
import socket
cot_xml = '''<?xml version="1.0" encoding="UTF-8"?>
<event version="2.0" uid="drone-01" type="a-f-A-M-H-Q"
how="m-g" time="{time}" start="{time}" stale="{stale}">
<point lat="{lat}" lon="{lon}" hae="{alt}" ce="10" le="15"/>
<detail>
<contact callsign="WINGMAN-01"/>
<track course="{heading}" speed="{speed}"/>
</detail>
</event>'''
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(cot_xml.encode(), ('239.2.3.1', 6969)) # multicast
# or
sock.sendto(cot_xml.encode(), ('192.168.1.100', 4242)) # unicast to ATAK device
Multicast (239.2.3.1:6969) reaches all ATAK devices on the local network without knowing their IPs. Requires a network that supports multicast (WiFi works, some mesh radios don't forward multicast by default).
Unicast to a specific IP is more reliable but requires knowing the ATAK device's address.
Via TAK Server
A TAK Server centralizes all CoT traffic. Devices connect to the server (TCP, TLS, or WebSocket) and the server distributes events to all connected clients.
The drone (or its companion computer) connects to the TAK Server and sends CoT events. All ATAK/WinTAK clients connected to the same server see the drone.
FreeTAKServer is an open-source TAK Server that runs on a Pi, laptop, or cloud VM. It handles basic CoT routing without the complexity of the official TAK Server.
pip install FreeTAKServer
python -m FreeTAKServer.controllers.services.FTS
Via Mesh Radio
If the drone has a mesh radio (Chapter 14), CoT can travel over the mesh. The companion computer sends CoT to the mesh radio's IP, and the mesh radio delivers it to the GCS or TAK Server on the other end.
Drone: FC → Companion → CoT UDP → Mesh Radio → [mesh] → GCS/TAK Server
This is the standard architecture for tactical drone operations. The mesh radio carries both MAVLink (for flight control) and CoT (for situational awareness) on the same link, typically on different UDP ports.
Integration Points
From the Flight Controller
The FC has the position, altitude, heading, speed, and battery data. This needs to get from the FC to the TAK sender:
ArduPilot/PX4: MAVLink messages on the companion → parse GLOBAL_POSITION_INT, VFR_HUD, BATTERY_STATUS → format as CoT → send.
Betaflight/iNav: MSP on the companion → parse MSP_RAW_GPS, MSP_ATTITUDE, MSP_ANALOG → format as CoT → send. Or use the ELRS/CRSF telemetry downlink on the transmitter side → forward to ATAK on the GCS phone.
From Sensors
Payload sensors (cameras, RF detectors, environmental) generate their own CoT events through the companion computer. Each detection gets its own uid and type code.
From the Wingman Ecosystem
The Wingman architecture naturally generates TAK-compatible data: - Tooth mesh: Fleet position sharing maps directly to CoT events - Seed detections: Acoustic, RF, and PIR detections become CoT hostile/unknown markers - Wingman Command: The Command layer IS the TAK integration point for the full ecosystem — it translates Wingman mesh data into the CoT format that existing TAK infrastructure consumes
Practical Tips
1. Keep CoT events small. TAK clients handle thousands of events. Your drone doesn't need to send a novel — position, callsign, basic telemetry in remarks. The detail popup in ATAK has limited space.
2. Update rate: 1 Hz is enough. TAK is situational awareness, not flight control. Sending position once per second is plenty. Faster than that wastes bandwidth and doesn't improve the map display.
3. Use meaningful callsigns. "WINGMAN-01" is useful on a shared map. "drone-abc123def" is not. Callsigns should be short, unique, and recognizable.
4. Set stale time appropriately. 30 seconds for a moving drone. If the drone stops sending CoT (crash, link loss, battery dead), the icon disappears from the map after the stale time. This is correct behavior — a stale position is worse than no position.
5. Test with ATAK first. Install ATAK on an Android phone, connect to the same network as your CoT sender, and verify the icon appears. Don't integrate with a TAK Server until direct UDP works.
6. CoT type codes matter. Using the wrong type code means your drone shows up as a ground vehicle, or a hostile, or a waypoint. Get the type code right for your affiliation and platform type.
Next
- Chapter 14: Mesh Radios — the transport that carries CoT from the drone to the TAK ecosystem.
- Chapter 13: Adding a Companion Computer — the platform that generates CoT from flight controller data.
TAK is a shared map. Your drone belongs on it. One UDP packet puts it there. Everything else is refinement.
Part 5 — Platform References
Full integration profiles — RF links, firmware, payloads, SDKs, and gotchas. Vetted parts only.
DJI Matrice 350 RTK
Category: Commercial Off-the-Shelf (COTS) NDAA Status: NOT compliant — banned from U.S. federal procurement as of Dec 2025 (American Security Drone Act) Manufacturer: DJI (Shenzhen, China)
Overview
The DJI M350 RTK is DJI's flagship enterprise platform and the successor to the M300 RTK. It is the most widely deployed commercial drone for inspection, mapping, and public safety worldwide. Closed ecosystem, but deep third-party payload support via E-Port and Payload SDK.
Specs
| Spec | Value |
|---|---|
| Weight (no payload) | ~3.77 kg (8.31 lb) |
| Max Takeoff Weight | 9.2 kg (20.3 lb) |
| Max Payload | 2.73 kg (6.01 lb) — triple gimbal support |
| Max Flight Time | 55 min (no payload, no wind) |
| Max Speed | 23 m/s (51.5 mph) |
| Max Altitude | 7000 m (with high-altitude propellers) |
| IP Rating | IP55 |
| Operating Temp | -20°C to 50°C |
| RTK Positioning | 1 cm + 1 ppm (H) / 1.5 cm + 1 ppm (V) |
RF Links
Link 1 — Control & Video (Combined)
- System: DJI O3 Enterprise transmission
- Frequencies: 2.4 GHz / 5.8 GHz (auto-switching)
- Max Range: 20 km (FCC) / 8 km (CE)
- Video Downlink: 1080p/30fps to DJI RC Plus controller
- Dual Operator: Supported — pilot + payload operator on separate controllers
- Cellular Backup: Optional 4G dongle for cellular C2
Link 2 — Telemetry
- Protocol: Proprietary DJI protocol — no native MAVLink
- Access: Telemetry data available via DJI MSDK / Cloud API for third-party GCS integration
- Fleet Management: DJI FlightHub 2
Firmware & Software
- Firmware: Proprietary DJI firmware
- Updates: DJI Pilot 2 app (OTA or offline SD card), or DJI Assistant 2 (Enterprise Series) via USB
- GCS: DJI Pilot 2 (Android, on RC Plus)
- Third-Party GCS: DroneSense, Pix4Dcapture, DJI FlightHub 2 — all via Mobile SDK
- No QGroundControl or Mission Planner support
Payload Integration
- Gimbal Mounts: 3 — single upward + dual downward
- Native Payloads: Zenmuse H30/H30T, H20/H20T/H20N, L2, L1, P1, S1, V1
- Third-Party Payloads: Skyport V2 adapter or E-Port
- E-Port: UART, USB, SDK API, 24V power — replaces the old Onboard SDK port
- DJI X-Port: For lightweight third-party gimbals
- Payload SDK: Custom camera control, data streaming, widget display on Pilot 2
Companion Computer / SDK
- E-Port: USB device connection for companion computers (Jetson, RPi, etc.)
- CRITICAL: Companion computer must operate as USB device (not host) — opposite of the old OSDK port
- SDKs: Payload SDK (PSDK), Mobile SDK (MSDK), Cloud API
- No open MAVLink access
Gotchas
-
NOT NDAA compliant. Banned from U.S. federal procurement as of December 2025 under the American Security Drone Act. If your funding source is federal, you cannot buy this.
-
E-Port USB role is reversed from OSDK. If you're migrating from M300 with an existing companion computer setup, the USB host/device relationship is flipped. You need to rewire or re-architect.
-
M300 Skyport V1 payloads need V2 adapter. Not all V1 payloads have V2 updates available from their manufacturers.
-
DJI firmware updates can break third-party integrations without warning. Pin your firmware version and test updates before deploying to your fleet.
-
Geofencing is aggressive. GEO 2.0 system can prevent flight in restricted areas without unlock authorization. This is a problem for emergency responders who need to fly NOW.
-
Data stays local unless operator enables FlightHub. No mandatory cloud connection — but also no easy way to share fleet data without buying into DJI's ecosystem.
When to Use This Platform
Despite the NDAA issues, the M350 RTK remains the most capable enterprise drone on the market in terms of raw performance, payload flexibility, and ecosystem maturity. If your use case is commercial (not federally funded), and you need a workhorse that Just Works, this is still the benchmark.
If you need NDAA compliance, look at Freefly Astro, Inspired Flight IF1200A, or Skydio X10D.
Last updated: March 2026
DJI Matrice 30T
Category: Commercial Off-the-Shelf (COTS) NDAA Status: NOT compliant Manufacturer: DJI (Shenzhen, China)
Overview
DJI's mid-tier enterprise drone — smaller and more portable than the M350 but still a serious inspection and public safety platform. Integrated dual-camera + thermal + laser rangefinder payload. Weather-sealed and designed for rapid deployment.
Specs
| Spec | Value |
|---|---|
| Weight | 3.77 kg (8.31 lb) with battery |
| Max Flight Time | 41 min |
| Max Speed | 23 m/s |
| Payload | Integrated — no swappable gimbals |
| Cameras | 48MP zoom (5–16x optical), 12MP wide, 640×512 thermal, LRF |
| Video Tx | DJI O3 Enterprise, 2.4/5.8 GHz, 15 km range |
| IP Rating | IP55 |
RF Links
Same DJI O3 Enterprise video system as M350. Supports DJI RC Plus controller. Dual-operator mode. 4G dongle compatible. No MAVLink.
Firmware & Software
Proprietary DJI firmware. DJI Pilot 2 on RC Plus. MSDK and Cloud API for third-party app development. DJI Dock compatible for fully autonomous remote operations (automated takeoff, landing, charging, mission execution).
Gotchas
- Not NDAA compliant.
- No payload flexibility — the integrated sensor package is the only option. No LiDAR, no custom payloads.
- DJI Dock integration is powerful but locks you into DJI's cloud ecosystem.
- If you need LiDAR or custom sensors, use the M350 RTK instead.
Last updated: March 2026
DJI Mavic 4 Pro
Category: Commercial Off-the-Shelf (COTS) — Prosumer/Light Commercial NDAA Status: NOT compliant Manufacturer: DJI (Shenzhen, China)
Overview
DJI's latest prosumer platform. Hasselblad camera, omnidirectional sensing, DJI O4 transmission. Not an enterprise platform — no thermal, no payload swap — but widely used for real estate, light mapping, and cinematography.
Specs
| Spec | Value |
|---|---|
| Weight | ~900 g (sub-2 lb) |
| Camera | Hasselblad 1″ CMOS, 50MP, 4K/120fps |
| Max Flight Time | ~46 min |
| Video Tx | DJI O4, 2.4/5.8 GHz, 20 km range |
| Obstacle Sensing | Omnidirectional |
RF Links
DJI O4 transmission — 1080p/60fps at up to 20 km. Consumer-grade link. No SDK access for autonomous operations. No MAVLink. No third-party payload mount.
Gotchas
- Not NDAA compliant.
- Did not officially launch in the U.S. market — availability is complicated.
- No SDK for autonomous operations in the consumer product line.
- This is an imaging/video platform, not an integration platform. If you need to plug things into it, look elsewhere.
Last updated: March 2026
Autel Robotics EVO MAX 4T V2
Category: Commercial Off-the-Shelf (COTS) NDAA Status: XE variant is NDAA compliant; standard V2 has mixed sourcing Manufacturer: Autel Robotics (Bothell, WA / Shenzhen assembly)
Overview
Autel's flagship enterprise drone and the most direct competitor to the DJI M30T. Quad-sensor gimbal (wide, zoom, thermal, laser rangefinder), GPS-denied flight via SLAM, A-Mesh drone-to-drone networking, and no geofencing. Positioned as the go-to DJI alternative for public safety and inspection operators.
Specs
| Spec | Value |
|---|---|
| Weight | ~1.185 kg (2.61 lb) takeoff |
| Max Flight Time | 42 min |
| Max Speed | 23 m/s |
| Service Ceiling | 23,000 ft |
| Wind Resistance | 27 mph |
| IP Rating | IP43 |
| Operating Temp | -20°C to 50°C (-4°F to 122°F) |
Sensors
| Sensor | Spec |
|---|---|
| Wide Camera | 50MP 1/1.28″ CMOS, f/1.9, 85° DFOV |
| Zoom Camera | 48MP, 10x optical / 160x hybrid zoom, 8K |
| Thermal | 640×512, 13mm, 16x digital zoom, -20°C to 550°C |
| Laser Rangefinder | 5–1200 m, ±1 m accuracy |
| Obstacle Avoidance | 720° — binocular vision + mmWave radar |
RF Links
SkyLink 3.0
- Antennas: 6 (4 tx, 6 rx)
- Frequency Bands: 900 MHz, 2.4 GHz, 5.2 GHz, 5.8 GHz — adaptive frequency hopping
- Range: 20 km (12.4 mi) — FCC
- Video Quality: 1080p/60fps, <150ms latency
- Encryption: AES-256 full-link
- Cellular: Optional 4G dongle
- A-Mesh 1.0: Drone-to-drone autonomous communication — drones relay comms and extend network coverage without ground infrastructure
Frequency Restrictions
- 5.2 GHz only available in FCC, CE, UKCA regions
- 900 MHz only available in FCC regions
Firmware & Software
- GCS: Autel Enterprise App (Android, on Smart Controller V3)
- Firmware: Proprietary, OTA updates
- SDK: UX SDK (iOS/Android), Payload SDK for third-party mounts
- No MAVLink, no QGroundControl
- Data stays local — no mandatory cloud connection, no cloud upload unless operator enables it
Autonomy & GPS-Denied Flight
- Autel Autonomy Engine: Real-time 3D scene reconstruction and autonomous path planning
- GNSS-Denied Navigation: SLAM-based visual navigation for indoors, underground, urban canyons
- AI Target Detection: Auto-identify and lock onto heat sources, people, vehicles
- Mission Reproduction: Fly once manually, the drone replays the exact mission autonomously
- Triple Anti-Jamming: RFI, EMI, and GPS spoofing countermeasures
Payload Integration
- Integrated quad-sensor gimbal — not swappable
- Payload SDK interface for accessories (loudspeaker, spotlight, RTK module)
- RTK module available for cm-level positioning
- Compatible with EVO Nest for automated remote operations
Gotchas
-
No geofencing — good for operators who need flexibility, but means no built-in airspace safety net. Know your airspace.
-
NDAA compliance depends on variant. The XE model is purpose-built for compliance. The standard V2 may contain restricted components. Ask your dealer specifically about the XE if compliance matters.
-
A-Mesh requires multiple Autel aircraft. No cross-manufacturer mesh networking.
-
Smart Controller V3 is proprietary — no third-party controller support.
-
Integrated gimbal means no payload swap. If you need LiDAR, this is the wrong platform.
-
900 MHz band only in FCC regions. International operators lose a frequency band.
When to Use This Platform
The MAX 4T V2 is the strongest DJI M30T competitor for public safety and inspection. The quad-sensor gimbal, GPS-denied flight, and A-Mesh networking give it capabilities DJI doesn't offer. No geofencing is a feature, not a bug, for operators who know what they're doing. The XE variant solves the NDAA question for agencies that need it.
Last updated: March 2026
Autel EVO II Enterprise V3 (Dual 640T)
Category: Commercial Off-the-Shelf (COTS) NDAA Status: Non-NDAA standard; check with Autel for compliant builds Manufacturer: Autel Robotics (Bothell, WA / Shenzhen assembly)
Overview
Autel's workhorse dual-sensor enterprise platform. 8K RGB + 640×512 thermal in a foldable, portable form factor. Less autonomy than the MAX series but more affordable and widely deployed for fire, law enforcement, and utility inspection.
Specs
| Spec | Value |
|---|---|
| Camera | 0.8″ RYYB CMOS 8K + 640×512 thermal @ 30fps |
| Flight Time | 42 min |
| Transmission | 15 km range, AES-256 |
| Weight | ~1.25 kg |
| Thermal Modes | 10 color schemes, 4x lossless zoom |
Integration Notes
- Solid mid-tier enterprise platform
- No GPS-denied flight or mmWave radar like the MAX
- Good thermal resolution for the price (640×512 @ 30fps)
- Supports Remote ID
- Same Autel Enterprise App ecosystem
- No payload swap — integrated dual sensor only
- No MAVLink
When to Use This Platform
Budget-conscious agencies that need thermal + RGB in a portable package. If you don't need the MAX's GPS-denied flight or A-Mesh networking, this saves money without sacrificing core sensor capability.
Last updated: March 2026
DJI Agras T50
Category: Commercial / Industrial — Agriculture NDAA Status: NOT compliant Manufacturer: DJI (Shenzhen, China)
Overview
DJI's flagship agricultural spraying/spreading drone. Coaxial twin-rotor design carrying 40 kg spraying or 50 kg spreading payloads. Dual atomizing spraying system, front/rear phased array radars, binocular vision. The dominant platform in commercial ag spraying worldwide. Covers ~52 acres/hour at 2 GPA.
Specs
| Spec | Value |
|---|---|
| Empty Weight | 39.9 kg (88 lb) |
| Max Takeoff Weight | 92 kg (spraying) / 103 kg (spreading) |
| Spray Tank | 40 L (10.56 gal), 40 kg operating payload |
| Spread Tank | 50 kg capacity |
| Spray Width | 4–11 m (13–36 ft) at 3 m height |
| Flow Rate | Up to 16 L/min (2 nozzles), 24 L/min (4 nozzles) |
| Droplet Size | 50–500 μm (adjustable) |
| Coverage | ~52 acres/hour |
| RTK Accuracy | ±10 cm (H/V) with D-RTK |
| Battery | DB1560, 9-min fast charging, 1500 cycle life |
| Obstacle Avoidance | 360° — front/rear phased array radar + binocular vision |
| Camera | 12MP adjustable gimbal for surveying |
RF Links
- Control: DJI O3 transmission, 2.4/5.8 GHz, up to 7 km (FCC)
- Controller: RM700B high-brightness 7" touchscreen
- RTK: D-RTK 2 Mobile Station for cm-level positioning
- Relay Module: Available for signal extension in hilly/canopy terrain
Software & Autonomy
- App: DJI Agras App / DJI SmartFarm
- Mapping: DJI Terra for local map generation, boundary/obstacle detection
- Variable Rate: Pairs with Mavic 3 Multispectral for NDVI-based prescription maps
- Mission Types: Farmland survey, spray, spread — auto route generation from boundary points
- KML Import: Supports third-party GIS file import
Gotchas
- NOT NDAA compliant. Federal ag funding that requires compliant equipment cannot be used for this platform.
- Requires Part 137 exemption for commercial agricultural application in the US.
- 88 lb empty weight — not remotely portable. Requires truck/trailer setup.
- DJI FlyCart 100 and T60 exist in China but are NOT FAA approved in the US. The T50 is currently the largest DJI ag drone available in the US market.
- Battery logistics are critical. 9-min fast charge with DJI C10000 charger + generator is the only way to maintain production rates.
- Nozzle clogging with powder-base products was an issue on earlier models — dual atomizing centrifugal nozzles on T50 address this.
Last updated: March 2026
DJI FlyCart 30
Category: Commercial / Industrial — Heavy-Lift Delivery NDAA Status: NOT compliant Manufacturer: DJI (Shenzhen, China)
Overview
DJI's heavy-lift delivery drone. 4-axis, 8-propeller configuration. 30 kg payload (dual battery) / 40 kg (single battery). Cargo mode and winch mode (30 m retractable cable). FAA-approved with Remote ID in the US. Built for logistics, agriculture supply, emergency response, and industrial material transport.
Specs
| Spec | Value |
|---|---|
| Max Payload | 30 kg (dual battery) / 40 kg (single battery) |
| Flight Distance | 28 km (no payload) / 16 km (full load) |
| Max Speed | 20 m/s (45 mph) |
| Max Altitude | 6,000 m |
| Operating Temp | -20°C to 45°C |
| Wind Resistance | 12 m/s |
| IP Rating | IP55 |
| Video Tx | DJI O3, 20 km + 4G enhanced |
| Obstacle Avoidance | Front/rear phased array radar + binocular vision |
| ADS-B | Integrated receiver |
| Parachute | Integrated, independent power source |
| Delivery Modes | Cargo mode (direct), Winch mode (30 m cable) |
RF Links
- Control/Video: DJI O3, 2.4/5.8 GHz, 20 km range
- 4G Enhancement: For obstructed terrain
- Dual Operator Mode: Supported
- Controller: RC Plus, 7" high-brightness display
Gotchas
- NOT NDAA compliant.
- Winch kit sold separately — base price does not include it.
- Battery and charger sold separately.
- Requires careful weight/CG management — drone auto-detects payload weight and center of gravity.
- FlyCart 100 (80 kg payload) exists but is China-only as of 2026.
Last updated: March 2026
Flyability Elios 3
Category: Commercial / Industrial — Confined Space Inspection NDAA Status: Not listed (Swiss manufacturer) Manufacturer: Flyability (Lausanne, Switzerland)
Overview
The only collision-tolerant inspection drone in mass production. Designed for confined spaces — tanks, boilers, pressure vessels, tunnels, mines, ore passes. Protective carbon cage allows contact with walls and structures without crashing. LiDAR SLAM for GPS-denied navigation and 3D mapping. Unique reversing motors recover from upside-down flips.
Specs
| Spec | Value |
|---|---|
| Design | Quadcopter in protective carbon cage |
| Flight Time | Up to 12 min (standard), 17 min (high-capacity battery) |
| Camera | 4K visual, 180° unobstructed FOV |
| Thermal | Radiometric thermal camera |
| LiDAR | SLAM-based 3D mapping and stabilization |
| Lighting | 16k lumens, oblique dust-proof, adaptive |
| IP Rating | IP44 (designed, not certified) |
| Navigation | FlyAware™ — computer vision + LiDAR + NVIDIA GPU |
| Stabilization | SLAM-based, cm-accurate indoor positioning |
| Payloads (modular) | LiDAR surveying, UT (ultrasonic testing), radiation detection, gas sensing |
Autonomy
- FlyAware™: Real-time 3D map building, trajectory tracking, coverage assessment
- Smart Return-to-Home: Retraces path autonomously
- Return-to-Signal: Auto-returns on signal loss
- Collision tolerance: Recovers from impacts and flips — no other drone does this
Software
- Cockpit App: Real-time 3D view, trajectory, coverage assessment
- Inspector 4.0: Data processing, reporting on 3D model
- Compatible: Recap, CloudCompare, industrial 3D software
- Training: One-day onboarding program
Gotchas
- 12-minute flight time is limiting for large assets. High-capacity battery helps (17 min). Tether power unit eliminates limit entirely.
- Not for outdoor use — the cage creates drag, no GPS, limited speed (7 m/s max).
- Not NDAA listed — may be an issue for US federal confined-space inspection contracts.
- Environments must be cleaned and inerted before flying in explosive atmospheres — drone is NOT ATEX certified.
- $50K+ system cost — justified by the 90% cost reduction vs scaffolding/rope access, but significant upfront investment.
When to Use This Platform
If you need to inspect inside a boiler, tank, pressure vessel, mine shaft, or any confined space where sending a person is dangerous, expensive, or impossible. Nothing else does what the Elios 3 does. It replaced months of scaffolding work with 10-minute flights at LKAB's Kiruna mine.
Last updated: March 2026
XAG P100 Pro / P150
Category: Commercial / Industrial — Agriculture NDAA Status: NOT compliant (Chinese manufacturer) Manufacturer: XAG Co. (Guangzhou, China)
Overview
XAG's flagship agricultural drone family. The P100 Pro carries 50 kg payload with 60L spray tank, covering 70 acres/hour. The P150 steps up to 70L tank and 80 kg max payload (P150 Max). Modular hot-swap payload system: spraying, spreading, mapping, and cargo transport. Fully autonomous via XAG One App with RTK cm-level positioning. Biggest direct competitor to DJI Agras T50.
Specs — P100 Pro
| Spec | Value |
|---|---|
| Rated Payload | 50 kg (110 lb) |
| Spray Tank | 60 L (15.8 gal) |
| Max Flow Rate | 22 L/min (5.8 GPM) dual pump |
| Spray Width | Up to 10 m (33 ft) |
| Coverage | ~70 acres/hr @ 2 GPA |
| Droplet Size | 60–400 μm (centrifugal atomization) |
| Flight Speed | Up to 13.8 m/s |
| Spread Rate | 150 kg/min |
| Battery | B13960S, 962 Wh, 11-min water-cooled fast charge |
| IP Rating | IPX6K (flight platform), IPX7 (components) |
| RTK | Centimeter-level, integrated base station support |
| Obstacle Avoidance | 4D imaging radar, terrain-following radar |
Specs — P150 / P150 Max
| Spec | Value |
|---|---|
| Max Payload | 50 kg (P150) / 80 kg (P150 Max) |
| Spray Tank | 70 L (18.5 gal) / 80 L (P150 Max) |
| Max Flow Rate | 32 L/min (P150 Max with RevoSpray 5) |
| Coverage | 70+ acres/hr |
| Flight Speed | Up to 20 m/s (P150 Max) |
| Spread Rate | 150+ kg/min |
Software & Autonomy
- XAG One App: Fully autonomous flight planning, one-tap operation
- XAG SuperX 4 Pro: Intelligent flight control with AI algorithms
- RTK Network: Centimeter-level positioning, supports multiple simultaneous drones
- Multi-drone: Single operator can command multiple aircraft
- Mapping: 12MP camera with mechanical shutter for field survey/boundary detection
Gotchas
- NOT NDAA compliant. Chinese manufacturer — same procurement restrictions as DJI.
- Massive platform — requires truck/trailer infrastructure, generator for fast charging.
- Part 137 exemption required for commercial ag application in the US.
- XAG ecosystem is less mature in North America than DJI Agras — fewer dealers, less local support.
- Competes directly with DJI Agras T50 — DJI has better software integration, XAG has larger payload options.
Last updated: March 2026
Hylio AG-272
Category: Commercial / Industrial — Agriculture NDAA Status: NDAA compliant (designed and manufactured in USA) Manufacturer: Hylio, Inc. (Houston, TX) — Made in USA
Overview
American-made agricultural spray drone. 18-gallon capacity, 8-rotor configuration, up to 50 acres/hour at 2 GPA. NDAA-compliant GroundLink Controller. The largest and most capable US-made ag spray drone currently available. Designed for producers and applicators who need NDAA compliance or want to avoid Chinese supply chain dependencies.
Specs
| Spec | Value |
|---|---|
| Configuration | 8-rotor |
| Tank Capacity | 18.0 gal (68.2 L) |
| Swath Width | Up to 40 ft (12.2 m) |
| Coverage Rate | Up to 50 acres/hr @ 2 GPA |
| Max Spray Rate | 4.6 gal/min |
| Nozzles | TeeJet with electronic flowmeters |
| Batteries | 2x 42 Ah, 51.8V (2175.6 Wh) LiPo — 30 min charge |
| GPS | Dual GPS, RTK-compatible (base station sold separately) |
| Obstacle Avoidance | Multi-angle wide-angle radar (lateral, up, down) |
| FPV | 1080p HD video streaming |
| Controller | GroundLink: 13.3" Windows tablet + 2.4 GHz radio, NDAA compliant |
| Multi-Drone | Up to 3 UAS from single ground station |
| Software | AgroSol GCS (lifetime access, no recurring fees) |
| Waterproof | Yes |
| NDAA | Compliant — designed and manufactured in Houston, TX |
Also in the Hylio Family
| Model | Tank | Swath | Coverage | Notes |
|---|---|---|---|---|
| AG-210 | 2.6 gal (10 L) | — | Spot spray | Compact, swarm-capable |
| AG-216 | 4.5 gal | 25 ft | 27.5 ac/hr | 6-rotor, entry-level |
| AG-230 | 8.0 gal (2x4) | 35 ft | 50 ac/hr | Dual-tank |
| AG-272 | 18.0 gal | 40 ft | 50 ac/hr | Flagship |
Gotchas
- Requires Part 137 exemption — Hylio assists with onboarding (complimentary).
- RTK base station sold separately. Budget for it.
- 30-minute battery charge time is slower than DJI's 9-minute fast charge — need more battery sets for production rates.
- US-made means higher price point than Chinese alternatives (DJI, XAG).
- AgroSol software is functional but not as polished as DJI Agras app.
When to Use This Platform
When you need an American-made, NDAA-compliant ag spray drone. Only real option in the US market for federally-funded ag programs that require NDAA compliance. The AG-272 at 18 gal capacity competes with the DJI Agras T50 on throughput.
Last updated: March 2026
senseFly eBee X (AgEagle)
Category: Commercial / Industrial — Fixed-Wing Mapping NDAA Status: NDAA compliant (Swiss/US — AgEagle Aerial Systems) Manufacturer: senseFly (now part of AgEagle, Wichita, KS)
Overview
Professional fixed-wing mapping drone for survey, agriculture, and mining. Hand-launched, no runway needed. Up to 90-minute flight time. Swappable camera payloads (RGB, multispectral, thermal). eMotion flight planning software. Widely used in surveying, mining volumetrics, and precision agriculture.
Specs
| Spec | Value |
|---|---|
| Type | Fixed-wing, hand-launched |
| Wingspan | 116 cm |
| Weight | ~1.6 kg (with camera) |
| Flight Time | Up to 90 min |
| Cruise Speed | 40–110 km/h |
| Coverage | Up to 500 ha (1,235 acres) per flight |
| Wind Resistance | Up to 46 km/h |
| Cameras | senseFly S.O.D.A. (RGB), Aeria X (multispectral), thermalSODA |
| GNSS | RTK/PPK capable |
| GCS | eMotion software |
| Landing | Automated belly landing |
Gotchas
- Fixed-wing = no hover. Cannot stop and inspect a structure.
- Hand launch requires technique — not ideal for inexperienced operators.
- Belly landing means wear on the fuselage over time.
- AgEagle has had corporate instability — verify current support and parts availability.
- Competes with WingtraOne (VTOL, no hand launch) and DJI Matrice + L2 (multirotor with LiDAR).
Last updated: March 2026
Quantum Systems Trinity Pro
Category: Commercial / Industrial — Fixed-Wing VTOL NDAA Status: NDAA compliant (German manufacturer, NATO-allied) Manufacturer: Quantum Systems (Munich, Germany)
Overview
Long-endurance fixed-wing VTOL drone built for large-scale mapping and ISR missions. Highly modular design with AI-ready onboard computing. Supports wide range of sensors and mission profiles. Used by military and commercial operators across NATO countries.
Specs
| Spec | Value |
|---|---|
| Type | Fixed-wing VTOL (tilt-rotor transition) |
| Flight Time | Up to 90 min |
| Cruise Speed | 17 m/s |
| Range | Up to 75 km |
| Payload | Modular sensor bay |
| Cameras | RGB, multispectral, thermal, EO/IR |
| Onboard Computing | AI-ready edge processing |
| GNSS | RTK/PPK |
| Wind Resistance | Up to 45 km/h |
Notes
Strong NATO/defense pedigree. Used in Ukraine conflict for ISR. Modular sensor bay allows mission-specific configuration. AI onboard processing enables real-time intelligence rather than post-flight analysis.
Last updated: March 2026
DJI Mavic 3 Enterprise (Thermal / Multispectral)
Category: Commercial Off-the-Shelf (COTS) NDAA Status: NOT compliant Manufacturer: DJI (Shenzhen, China)
Overview
DJI's compact enterprise platform. Available in Thermal (Mavic 3T) and Multispectral (Mavic 3M) variants. The go-to portable enterprise drone for inspection, search & rescue, and precision agriculture. Lightweight, foldable, excellent camera. The platform most fire departments and small agencies buy first.
Specs
| Spec | Value |
|---|---|
| Weight | ~920 g (Thermal) / ~951 g (Multispectral) |
| Flight Time | Up to 45 min |
| Cameras (3T) | 48MP wide, 12MP zoom (56x), 640×512 thermal |
| Cameras (3M) | 20MP RGB + 4-band multispectral (G/R/RE/NIR) |
| Video Tx | DJI O3 Enterprise, 15 km |
| RTK | Via D-RTK 2 or network RTK module |
| IP Rating | — |
| Controller | DJI RC Pro Enterprise |
Integration Notes
- DJI Pilot 2 for flight control
- MSDK for third-party app development
- DJI FlightHub 2 for fleet management
- Pairs with Agras T50 for variable-rate prescription spraying (3M variant)
- RTMP/RTSP live streaming capable
- No MAVLink
Gotchas
- NOT NDAA compliant.
- No payload swap — fixed sensor package per variant.
- Not as robust as M30T or M350 — smaller platform, less wind resistance.
- Widely deployed — good parts availability and support network.
Last updated: March 2026
DJI Matrice 4 Series
Category: Commercial Off-the-Shelf (COTS) NDAA Status: NOT compliant Manufacturer: DJI (Shenzhen, China)
Overview
DJI's newest enterprise platform family, announced 2025. Successor positioning alongside the M350 RTK. Details emerging as the platform reaches market. Expected to feature updated DJI O4 transmission, improved obstacle sensing, and next-generation gimbal/payload system.
Notes
Platform is still reaching full market availability. Check DJI Enterprise for latest specs and availability. Community contributions with early field experience welcome.
Last updated: March 2026
Skydio X10 / X10D
Category: NDAA-Compliant / Blue UAS NDAA Status: X10 is NDAA compliant; X10D is Blue UAS listed Manufacturer: Skydio (San Mateo, CA) — Made in USA
Overview
Skydio's flagship AI-autonomous drone. The X10 is the commercial/public safety variant; the X10D is the defense variant with hardened comms, MAVLink support, and RAS-A compliance. Both feature six navigation cameras, NVIDIA Jetson Orin GPU, and the industry's most capable obstacle avoidance. Best-in-class autonomy. Built in the USA.
Specs
| Spec | Value |
|---|---|
| Weight | <4.7 lb (2.13 kg) |
| Max Flight Time | ~40 min |
| Max Speed | 45 mph (20 m/s) |
| Processors | NVIDIA Jetson Orin + Qualcomm QRB5165 |
| Nav Cameras | Six 32MP custom cameras (360° coverage) |
| Encryption | AES-256 |
| IP Rating | IP55 |
| GNSS | GPS, GLONASS, Galileo, BeiDou + ADS-B In receiver |
| Deployment | Folds to 13.8″, sub-40 second launch |
| Modular Payload | 4 attachment bays, 340g max |
Sensor Packages (choose at purchase)
| Package | Wide | Narrow | Thermal | Telephoto |
|---|---|---|---|---|
| VT300-L | 50MP 1″ f/1.95 | 64MP 1/1.7″ f/1.8 | FLIR Boson+ 640×512 | — |
| VT300-Z | 50MP 1″ f/1.95 | 64MP 1/1.7″ f/1.8 | FLIR Boson+ 640×512 | 48MP 190mm f/2.2 (128x zoom) |
| V100-L | 50MP 1″ f/1.95 | 64MP 1/1.7″ f/1.8 | — (LED flashlight) | — |
RF Links
X10 (Commercial)
- WiFi-based control/video link
- 5G/LTE unlimited range via Connect Fusion (optional)
- AES-256 encrypted
X10D (Defense)
- Dedicated defense comms (Doodle Labs Mesh Rider radio options)
- RAS-A v1.2 compliant
- Open MAVLink protocol for third-party GCS
- Multi-band operation
Both variants support Remote Ops for browser-based remote piloting from any location, and DFR Command for drone-as-first-responder workflows.
Firmware & Software
- Firmware: Proprietary Skydio Autonomy software
- X10 Controller: Skydio Flight Deck ONLY — no third-party controller support
- X10D: MAVLink support, QGroundControl compatible, third-party GCS
- SDKs:
- Cloud API — mission planning, fleet management, media sync
- Extend API — workflow integration (evidence management, inspection platforms)
- Mobile SDK — Android apps on controller
- Attachment ICD — custom payload mechanical/electrical specs
Autonomy
This is where Skydio leads the industry:
- GPS-denied navigation via visual-inertial odometry — flies in parking garages, under bridges, inside structures
- NightSense: Zero-light autonomous flight using visible or IR illumination (X10D)
- Subject Tracking (Shadow): Maintains lock on people/vehicles even through brief occlusions
- Scout: Autonomous overwatch mode
- Map Capture: 2D orthomosaic generation
- Onboard 3D Modeling: Low-res 3D preview on-device for field decisions
- Anchor Points: GPS-denied return-to-home via visual reference placement
- Crosshair Coordinates: Identify POI coordinates from air
Attachments
- Parachute — safety fallback for operations over people
- NightSense Visible/IR Light — zero-light autonomous flight
- Spotlight — nighttime visibility
- Speaker — communicate in high-risk situations
- RTK/PPK — precision mapping
- Dropper (planned) — payload release
- Connect Fusion+ (coming) — second cellular connection
Gotchas
-
X10 (commercial) is locked to Skydio software. No MAVLink, no QGC, no Mission Planner. If you need open protocol access, you need the X10D — which costs more and requires government/defense procurement.
-
Attachment bays limited to 340g total. No heavy payloads. This is not a mapping drone with a LiDAR rig.
-
No swappable primary sensor. You pick VT300-L, VT300-Z, or V100-L at purchase. Want a different sensor package? Buy another drone.
-
LTE connectivity requires active cellular plan. Remote Ops is browser-based but needs internet on both ends.
-
Thermal on VT300-L/Z is FLIR Boson+ 640×512 — excellent sensitivity (<30mK) but verify radiometric measurement support on your firmware version.
-
10x more computing power than previous gen means higher power draw — the 40-minute flight time reflects this.
When to Use This Platform
Best autonomous flight in the industry, period. If your mission requires flying in GPS-denied environments, around obstacles, at night, or with minimal pilot training, Skydio X10 is the answer. The X10D is the only Blue UAS platform with this level of autonomy.
Not the right platform for heavy-lift mapping, LiDAR, or custom payload integration. For that, look at Freefly Astro or Inspired Flight IF1200A.
Last updated: March 2026
Freefly Astro (Astro Max)
Category: NDAA-Compliant / Blue UAS NDAA Status: Blue UAS certified (NDAA-compliant build available) Manufacturer: Freefly Systems (Woodinville, WA) — Made in USA
Overview
American-made, open-architecture mapping and inspection drone built on PX4. Running Auterion Enterprise PX4 on a Skynode flight controller with triple-redundant IMUs. Blue UAS certified. Swappable payload via Smart Dovetail system. The Astro Max variant carries the 61MP Sony LR1 full-frame sensor. Over 100,000 commercial flights logged.
This is the open-source success story. PX4-based, MAVLink-native, with a real payload ecosystem and federal compliance.
Specs
| Spec | Value |
|---|---|
| Weight | ~2.3 kg (varies with payload) |
| Max Flight Time | 25 min with LR1 payload, 30 min with 2 lb payload |
| Payload Capacity | 2 lb (0.9 kg) |
| Flight Controller | Auterion Skynode (Pixhawk-class) |
| Firmware | Auterion Enterprise PX4 |
| IMU Redundancy | Triple-redundant |
| GNSS | Multi-band with RTK (NTRIP or base station) |
| Connectivity | LTE via AuterionOS, Doodle Labs RF link |
| Controller | Pilot Pro (ruggedized, hot-swap power) |
| Folded Size | ~390 × 178 mm — fits in a backpack |
| Batteries | Dual SL8-Air, 500+ cycle guarantee |
RF Links
Primary C2/Video
- Radio: Doodle Labs (NDAA compliant)
- Protocol: MAVLink v2 native
- Encryption: AES
Backhaul
- LTE: Via Auterion Skynode — cloud connectivity, OTA updates, fleet management
- Telemetry: SiK-compatible for development environments
Firmware & Software
- Firmware: Auterion Enterprise PX4 (open-source based, commercially supported)
- GCS: Auterion Mission Control (pre-installed)
- Compatible GCS: QGroundControl, UgCS, Esri SiteScan (validated)
- Other PX4 GCS: Works but not officially tested
- Fleet Management: AuterionOS provides predictive maintenance, geotagging, OTA updates
- Auterion SDK: For enterprise developers
This is a real PX4 platform. You get MAVLink. You get open parameters. You get QGC compatibility. But you also get commercial support, LTE connectivity, and fleet management that you won't get from a DIY Pixhawk build.
Payload Integration
Smart Dovetail System
Tool-less payload swap — slide on, lock, fly. Proprietary mechanical interface but open electrical/data bus.
Native Payloads
- Sony LR1: 61MP full-frame — the Astro Max flagship sensor
- Sony A7R IV: 60MP (previous gen)
- Various mapping payloads: Third-party sensors via Smart Dovetail adapter
- Thermal, LiDAR: Via adapter — check Freefly for current payload catalog
Gotchas
-
25-minute flight time is shorter than competitors. DJI M350 does 55 min. Inspired Flight IF1200A does 43 min. If endurance is critical, factor this in.
-
Smart Dovetail is proprietary. Third-party payloads need an adapter. Freefly's payload ecosystem is good but not as deep as DJI's gimbal lineup.
-
NDAA/Blue build ships with GPS logging disabled by default. You must enable it in settings before your first mapping mission or you'll get untagged imagery.
-
Freefly keeps some PX4 code closed — motor drives, autonomy, avoidance. The core flight stack is open, but not everything.
-
Dual SL8-Air batteries are proprietary. Guaranteed 500+ cycles, but no third-party alternatives exist.
-
Network RTK requires Auterion licence (~$1,200) for NTRIP caster access. Base-station RTK works with any multi-band GNSS base.
When to Use This Platform
The Freefly Astro is the right choice when you need: Blue UAS compliance + open MAVLink + real payload flexibility + commercial support. It's the platform that proves you don't have to choose between open-source and enterprise readiness.
Best for: precision mapping, photogrammetry, inspection, agriculture. Not ideal for: long-endurance surveillance (25 min limit), heavy-lift (2 lb max), or thermal-primary missions (need to add thermal as a payload).
Last updated: March 2026
Inspired Flight IF1200A
Category: NDAA-Compliant / Blue UAS NDAA Status: Blue UAS certified, NDAA compliant, Green UAS certified Manufacturer: Inspired Flight Technologies (San Luis Obispo, CA) — Made in USA
Overview
Heavy-lift hexacopter developed to U.S. Air Force standards. The workhorse of the NDAA-compliant drone world. Carries large payloads (LiDAR, EO/IR, Phase One cameras) with 43-minute endurance. Open payload interface. ArduPilot-based. SAFE motor-out redundancy keeps flying if a motor fails.
Specs
| Spec | Value |
|---|---|
| Configuration | Hexacopter (coaxial dual-prop) |
| Max Payload | 19.1 lb (8.66 kg) under Part 107; 28.7 lb with certification |
| Max Flight Time | 43 min (no payload) |
| Real-World with 8 lb Payload | 30+ min |
| Max Speed | 56 mph (25 m/s) |
| Wind Resistance | 29 knots |
| Batteries | 16000mAh intelligent batteries |
| GPS | Dual GPS units |
| FPV | Built-in FPV camera |
| Remote ID | Integrated |
RF Links
- C2/Video: Doodle Labs or similar NDAA-compliant radio
- GCS: GS-ONE ground control station (integrated controller + display)
- Protocol: MAVLink v2
- Telemetry: Standard MAVLink telemetry stream
Firmware & Software
- Firmware: ArduPilot-based
- GCS: Mission Planner, QGroundControl
- Flight Modes: Position Hold, Loiter, Auto, Return-to-Launch
- Open system architecture — configurable for specific missions
Payload Integration
Universal payload interface supports:
- EO/IR: FLIR, L3Harris
- LiDAR: Yellowscan, RIEGL, Velodyne
- Optical Imaging: Phase One, Sony
- Multispectral: Sentera 6X series
- Payload adapter guides available from Inspired Flight
Gotchas
- Heavy platform — not backpackable. This is a truck drone, not a backpack drone.
- Folding arms can be stiff after flight — thrust loads the locking mechanism. Support the arm bottom with upward force while sliding the lock.
- Requires Part 107 waiver if total weight (aircraft + payload) exceeds 55 lb.
- Batteries are proprietary.
- No integrated camera — payload must be purchased separately. Budget accordingly.
- SAFE motor-out capability is a lifesaver for expensive payloads but requires pilot awareness — land promptly when alerted.
When to Use This Platform
The IF1200A is the platform when you need to carry heavy sensors (LiDAR, Phase One, EO/IR) with NDAA/Blue UAS compliance. Nothing else in the Blue UAS ecosystem comes close on payload capacity. ArduPilot firmware means full MAVLink access and Mission Planner compatibility.
Last updated: March 2026
Teal 2
Category: NDAA-Compliant / Blue UAS NDAA Status: Blue UAS certified (added June 2023) Manufacturer: Teal Drones / Red Cat Holdings (Salt Lake City, UT) — Made in USA
Overview
Compact, rucksack-portable ISR drone optimized for night operations. "Dominate the Night." FLIR Hadron 640R EO/IR payload delivers exceptional thermal imaging in a Group 1 package. Used by DoD, law enforcement, and public safety.
Specs
| Spec | Value |
|---|---|
| Weight | 2.75 lb (1.25 kg) takeoff |
| Max Flight Time | 30+ min |
| Max Speed | 23 mph (10 m/s) cruise |
| Service Ceiling | 10,000 ft MSL |
| Operating Temp | -35°C to 43°C (-32°F to 110°F) |
| Encryption | AES-256 (command, control, video) |
| Design | Modular — field-replaceable payload, propulsion, battery |
Sensors
| Sensor | Spec |
|---|---|
| Thermal | FLIR Hadron 640R: 640×512, radiometric, <30mK sensitivity |
| EO | 16MP visible-light camera |
RF Links
- Standard: 2.4 GHz ISM band, AES-256 encrypted, ~5 km range
- Controller: TAC (Teal Air Controller) — ruggedized GCS with built-in display
- Multiband variant available
- Black Widow (SRR Tranche 2): Doodle Labs Helix Mesh Rider Radio with Sense Technology for anti-jamming and low probability of intercept
Gotchas
- Small payload capacity — this is an ISR scout, not a mapping or inspection platform.
- No swappable primary sensor beyond the Hadron EO/IR.
- Near-silent propulsion is a tactical advantage but limits max speed and wind resistance.
- Multi-vehicle command supported from single TAC.
When to Use This Platform
Night ISR, close-range reconnaissance, public safety overwatch. The Hadron 640R thermal is excellent for its size class. If you need a Blue UAS drone that fits in a rucksack and dominates in low-light conditions, this is the one.
Last updated: March 2026
Parrot ANAFI USA
Category: NDAA-Compliant / Blue UAS NDAA Status: Blue UAS listed Manufacturer: Parrot (Paris, France) — NDAA Compliant
Overview
One of the lightest enterprise drones on the market at 500g. French-designed. Triple-sensor payload (32x zoom, wide, FLIR thermal). GOV and MIL variants. The MIL version adds a Microhard radio for extended comms. ISO9001 certified manufacturing.
Specs
| Spec | Value |
|---|---|
| Weight | 500g (GOV) / 1.16 kg (MIL with Microhard) |
| Max Flight Time | 32 min |
| Max Speed | 14.7 m/s (33 mph) |
| Cameras | 32x zoom (21MP), wide (48MP), FLIR Boson 320 thermal |
| Encryption | AES-XTS 256-bit |
| Video Output | RTSP via Ethernet from Skycontroller |
| Transmission | Wi-Fi 802.11 a/b/g/n (GOV); + Microhard radio (MIL) |
RF Links
- GOV version: Wi-Fi based control/video via Skycontroller
- MIL version: Adds Microhard radio for longer range and better RF penetration
- Video sharing: RTSP stream via Ethernet (RJ45) to VLC-equipped PC, or via FFmpeg
- Fly-by-coordinates: GPS coordinate display and sharing for any visible POI
Firmware & Software
- App: FreeFlight 6 Enterprise
- SDK: Open Flight SDK for developer integration
- No MAVLink
Gotchas
- Wi-Fi link on GOV version is range-limited and susceptible to interference in dense RF environments.
- Small thermal sensor — FLIR Boson 320 vs competitors at 640×512. Adequate for detection, not ideal for detailed thermal analysis.
- No payload swap. The integrated sensor package is all you get.
- Lightweight is a double-edged sword — extremely portable, but poor wind resistance.
- Parrot's enterprise support has historically been inconsistent compared to DJI/Autel/Skydio.
When to Use This Platform
Ultra-portable Blue UAS recon. When you need the smallest possible compliant drone with thermal capability. The MIL variant with Microhard is the more serious option for government work. Not a primary inspection or mapping platform.
Last updated: March 2026
WingtraOne GEN II / WingtraRAY
Category: NDAA-Compliant / Blue UAS — Fixed-Wing VTOL Mapping NDAA Status: Blue UAS listed, Green UAS certified Manufacturer: Wingtra (Zurich, Switzerland)
Overview
Professional fixed-wing VTOL mapping drone. Vertical takeoff, fixed-wing cruise at 16 m/s for up to 59 minutes. PPK GNSS for cm-level accuracy without ground control points. Swappable sensors (61MP RGB, 42MP full-frame, multispectral, LiDAR). Over 100,000 flights worldwide. The WingtraRAY (2025) successor covers up to 1,300 acres in one hour-long flight.
Specs — WingtraOne GEN II
| Spec | Value |
|---|---|
| Type | Fixed-wing VTOL (tail-sitter) |
| Flight Time | Up to 59 min |
| Cruise Speed | 16 m/s (36 mph) |
| Payload | Up to 800 g |
| Wind Resistance | 12 m/s sustained, 18 m/s gusts |
| GNSS | Multi-band PPK, 1–3 cm absolute accuracy |
| Coverage | Up to 200 hectares (494 acres) per flight @ 120 m AGL |
| NDAA / Blue UAS | Blue UAS listed, Green UAS |
| Cameras | Sony A7R IV (61MP), Sony RX1R II (42MP), MicaSense RedEdge-P |
| Controller | Rugged Samsung Galaxy Tab Active 3 |
| GCS Software | WingtraPilot |
Specs — WingtraRAY (2025+)
| Spec | Value |
|---|---|
| Coverage | Up to 1,300 acres (~550 ha) per 1-hour flight |
| Capture Speed | ~10x faster than multicopters, ~30x faster than terrestrial |
| Accuracy | 1–3 cm absolute without GCPs |
| Payload Bay | Hot-swap, 6 dedicated payloads (RGB, oblique, LiDAR, multispectral) |
| Turnaround | Under 5 min between flights |
| NDAA / Blue UAS | Blue UAS listed |
Integration Notes
- Processing: Compatible with Pix4D, Metashape, Propeller, DroneDeploy, WingtraCLOUD
- Exports: Civil 3D, TBC, ArcGIS
- No MAVLink — proprietary autopilot
- Airline carry-on compliant batteries (~525 g each vs ~4.7 kg for DJI M400 batteries)
Gotchas
- Fixed-wing means no hover capability during mission. Can't stop and inspect a point.
- Requires open launch/landing area — tail-sitter VTOL needs clear space.
- Not for inspection or close-proximity work — this is a mapping/survey platform only.
- Proprietary autopilot — no MAVLink, no QGC, no Mission Planner.
- Wind limits on ground (8 m/s for launch/land) are lower than in-flight limits.
Last updated: March 2026
Ascent Aerosystems (Coaxial Platforms)
Category: NDAA-Compliant / Blue UAS NDAA Status: NDAA compliant Manufacturer: Ascent Aerosystems (USA)
Overview
Unique coaxial drone design — two counter-rotating rotors on a single axis. Compact, robust, and high-performance. Designed for industrial, defense, and public safety markets. The coaxial design provides exceptional stability and efficiency in a smaller form factor than equivalent multirotor platforms.
Key Features
- Coaxial rotor design: Smaller footprint than traditional multirotors for equivalent lift
- Rugged construction: Built for demanding industrial and defense environments
- Modular payloads: Configurable for ISR, inspection, mapping
- NDAA compliant
- Compact deployment
Notes
Niche platform worth tracking for operators who need compact form factor with heavy-lift capability. Less mainstream than Skydio/Freefly/Inspired Flight but carving out a space in defense and industrial inspection.
Last updated: March 2026
Holybro X500 V2 + Pixhawk 6X (PX4 Dev Kit)
Category: Open-Source / Custom Build NDAA Status: NOT compliant (Chinese-sourced components) Manufacturer: Holybro (Shenzhen, China)
Overview
The reference development platform for PX4 and ArduPilot. Carbon fiber frame with no-solder assembly. Ships with Pixhawk 6X (or 6C), M10 GPS, and SiK telemetry radio. Mounts for Raspberry Pi, Jetson Nano, and Intel RealSense depth cameras.
If you want to understand every layer of the drone integration stack, this is where you start. Every UART is documented. Every protocol is open. Every parameter is tunable. The handbook's chapters on UART layout, MAVLink, PID tuning, and companion computers were written with platforms like this in mind.
Specs
| Spec | Value |
|---|---|
| Frame | Carbon fiber twill, 500mm class |
| Flight Controller | Pixhawk 6X (STM32H753 H7, triple IMU, Ethernet) or Pixhawk 6C |
| Firmware | PX4 (ships default) / ArduPilot compatible |
| GPS | Holybro M10 (requires PX4 1.14+ / ArduPilot 4.3+) |
| Telemetry | SiK radio (915 MHz or 433 MHz), plug-and-play |
| Flight Time | ~18 min hover (no payload, 5000mAh 4S) |
| Payload Capacity | ~1.5 kg (at 70% throttle) |
| Companion Mount | RPi 4, Jetson Nano, Intel RealSense |
| Assembly Time | ~30 min, no soldering |
RF Links
Link 1 — RC Control
Add your own. Any standard RC receiver via UART: - ELRS 2.4 GHz or 900 MHz (CRSF protocol, UART, 420000 baud) - TBS Crossfire (CRSF) - FrSky (SBUS) - FlySky (IBUS)
Link 2 — Telemetry
- SiK radio: 915 MHz (Americas) or 433 MHz (EU/Asia), MAVLink, ~64 kbps, point-to-point
- Connects to Mission Planner or QGroundControl on ground station
Link 3 — Video
Add your own: - Analog 5.8 GHz VTX - DJI O3 Air Unit / HDZero (for FPV) - IP camera via companion computer (RPi + camera module) - No integrated video link — build-your-own
Firmware & Software
- PX4 or ArduPilot — both fully open source
- GCS: QGroundControl (PX4 default) or Mission Planner (ArduPilot default)
- Protocol: MAVLink v2 — full parameter access, mission upload, telemetry streaming
- Simulation: PX4 SITL for testing before flight
- Pixhawk 6X Ethernet interface for high-speed companion computer integration
Pixhawk 6X Flight Controller Details
| Feature | Spec |
|---|---|
| Processor | STM32H753 (Arm Cortex-M7 @ 480 MHz) |
| Flash / RAM | 2MB / 1MB |
| IMUs | 3x (triple redundant, isolated sensor domains) |
| Barometers | 2x |
| Interfaces | Multiple UART, I2C, SPI, CAN, ADC, Ethernet |
| Vibration Isolation | Custom-formulated durable material |
| Temperature Control | On-board heating for IMU temp stability |
| Connector Standard | Pixhawk Autopilot Bus (100-pin + 50-pin) |
| Debug | Pixhawk Debug Full (JST SM10B) |
Companion Computer Integration
The X500 V2 has mounting holes and platform board space for:
- Raspberry Pi 4: Standard mount, USB connection to Pixhawk
- NVIDIA Jetson Nano: Direct mount on platform board
- Intel RealSense: Depth camera mount on rail system (D435, T265)
- Pixhawk 6X Ethernet: High-speed connection for data-intensive applications
Communication: MAVLink via serial UART or USB. MAVSDK / DroneKit for programmatic control.
Gotchas
- 18-minute flight time is short. Bigger batteries help but add weight. Budget for multiple batteries.
- No obstacle avoidance out of the box. Add Intel RealSense + PX4 avoidance module if needed.
- No weatherproofing. This is a fair-weather development platform.
- SiK radios are low-bandwidth (~64 kbps). Fine for MAVLink telemetry, not for video.
- Pixhawk 6X PM02D-HV power module requires firmware setting (
SENS_EN_INA228) and ArduPilot 4.4+. - M10 GPS needs PX4 1.14+ or ArduPilot 4.3+. Older firmware won't see it.
- Chinese-sourced components — not NDAA compliant. For federal work, look at ARK Electronics FC + U.S.-sourced components.
Why This Platform Matters
This is the teaching platform. Every concept in the handbook — the five link types, UART allocation, MAVLink telemetry, PID tuning, companion computers, mesh radios — can be implemented, tested, and understood on an X500. It's not the best at anything, but it teaches you everything.
Last updated: March 2026
Custom ArduPilot / PX4 Builds — General Integration Reference
Category: Open-Source / Custom Build Firmware: ArduPilot or PX4 (open source) Protocol: MAVLink v2
Overview
Any drone built on ArduPilot or PX4 firmware running Pixhawk-compatible hardware. This covers hundreds of commercial products (Freefly Astro, Inspired Flight IF1200, Watts Innovations Prism, Harris Aerial H6, CubePilot-based builds) and thousands of custom builds. The open-source ecosystem is the backbone of non-DJI drone integration.
Common Flight Controllers
| Controller | Processor | IMUs | Notes |
|---|---|---|---|
| Pixhawk 6X / 6X Pro (Holybro) | STM32H753 | 3x | Triple redundant, Ethernet, top tier |
| CubePilot Cube Orange+ | STM32H757 | 3x | Vibration-isolated, carrier board ecosystem |
| Matek H743 | STM32H743 | 2x | Compact, affordable, iNav/ArduPilot |
| SpeedyBee F405 | STM32F405 | 1x | Budget ArduPilot FC, smaller builds |
| ARK Electronics FMU | — | — | Blue UAS Framework listed, NDAA compliant |
| Auterion Skynode S | — | 3x | Blue UAS Framework, commercial PX4 |
Key Integration Points
All ArduPilot/PX4 platforms share:
- MAVLink v2 as the telemetry protocol
- UART-based peripheral connections (GPS, telemetry, RC, rangefinder)
- PWM/DShot motor outputs
- I2C/SPI sensor buses
- USB for configuration and companion computer
- SD card for logging and parameter storage
The handbook's chapters on UART layout (Ch 8), MAVLink (Ch 7), MSP (Ch 6), and companion computers (Ch 13) are written specifically for this ecosystem.
Telemetry Radio Options
| Radio | Band | Bandwidth | Range | Notes |
|---|---|---|---|---|
| SiK (3DR-style) | 915/433 MHz | ~64 kbps | 1–2 km | Simple, cheap, point-to-point |
| RFD900x | 900 MHz | Higher | 5–40 km | Configurable, long range |
| Doodle Labs Mesh Rider | Multi-band | High | 5–15 km | Mesh, EW-resistant, Blue UAS |
| Microhard P900 | 900 MHz | High | 10+ km | Robust, industrial |
| Herelink | 2.4 GHz | Integrated | 5–20 km | Video + telemetry + RC, Android GCS |
Ground Control Stations
| GCS | Primary Firmware | Platform | Notes |
|---|---|---|---|
| Mission Planner | ArduPilot | Windows | Full-featured, parameter management |
| QGroundControl | PX4 (+ ArduPilot) | Cross-platform | Clean UI, PX4 default |
| Auterion Mission Control | PX4 (Auterion) | Skynode | Enterprise, fleet management |
| UgCS | Both | Desktop | Professional mission planning, 3D |
| MAVProxy | Both | CLI | Lightweight, scriptable |
Common Commercial Platforms Using ArduPilot/PX4
- Freefly Astro: PX4 (Auterion), Blue UAS, mapping/inspection
- Inspired Flight IF1200/IF800: ArduPilot, Blue UAS, heavy-lift
- Watts Innovations Prism: Multi-payload, industrial
- Harris Aerial H6: Heavy-lift surveying/mapping
- Aurelia Drones: Industrial-grade, high payload
- CubePilot-based custom builds: Anything you can imagine
The ArduPilot vs PX4 Decision
| Factor | ArduPilot | PX4 |
|---|---|---|
| Vehicle Support | Widest (copter, plane, heli, rover, sub, boat) | Broad (copter, plane, VTOL) |
| Community | Larger, more hobbyist/operator focus | Smaller, more developer/research focus |
| Documentation | Extensive, community-driven | Good, structured |
| Commercial Use | Widespread (IF1200, many custom builds) | Freefly Astro, Auterion ecosystem |
| Licensing | GPL v3 (copyleft) | BSD (permissive) |
| Default GCS | Mission Planner | QGroundControl |
| Configuration | More parameters, more flexibility, steeper curve | Modular, cleaner architecture |
Both speak MAVLink. Both run on Pixhawk. Both work. Pick based on your ecosystem and support needs.
Integration Tips for Custom Builds
- Map your UARTs before you build. See Chapter 8. You will run out.
- Separate RC and video bands. 2.4 GHz RC + 5.8 GHz video, or 900 MHz RC + 5.8 GHz video. Never both on 2.4 GHz.
- CRSF protocol at 420000 baud for ELRS/Crossfire RC links. Not 115200.
- MAVLink stream rates matter. Too high floods the telemetry link. Start with SR0_POSITION=2, SR0_EXTRA1=4.
- Test failsafe before you need it. Every firmware handles it differently. Know yours.
- Blackbox logging is your post-flight truth. See Chapter 10.
- PID tune in the field, not in simulation. See Chapter 11.
Last updated: March 2026
Anduril Ghost X
Category: Tactical / Defense NDAA Status: Blue UAS listed Manufacturer: Anduril Industries (Costa Mesa, CA) — Made in USA Availability: Military/government procurement only
Overview
Anduril's medium-range reconnaissance drone designed for company-level military operations. Helicopter-type design (main + tail rotor) for superior endurance and payload compared to typical quadcopters. Controlled through Anduril's Lattice AI software. Combat-proven in Ukraine. Deployed at JPMRC Hawaii, Combined Resolve Germany, and Balikatan Philippines.
Specs
| Spec | Value |
|---|---|
| Design | Helicopter-type (main + tail rotor), Group 2 (<55 lb) |
| Endurance | 80–90 min |
| Range | ~15 miles (24 km) |
| Payload Capacity | ~11 kg (24 lb) |
| Deployment | Two-person team, fits in rifle case, minutes to assemble |
| Software | Anduril Lattice AI autonomy platform |
Payload Options
Modular mission kits: - EO/IR sensors (day/night imagery) - Laser designators - Communications relay modules - Other mission-specific payloads
Software — Lattice
Lattice automates mission planning, airspace deconfliction, and flight profiles. Integrates with broader C2 ecosystem for sensor-to-shooter workflows (e.g., HIMARS cueing). Reduces operator workload and training time.
Gotchas
- Military/government procurement only — not available for commercial purchase.
- Lattice is proprietary — no MAVLink, no open protocol access.
- Helicopter design provides endurance but is mechanically more complex than multirotor.
- Requires Anduril training and support pipeline.
- Combat-deployed in Ukraine since 2022 — real-world validation, but also means adversaries have had time to study it.
Last updated: March 2026
Teal Black Widow (SRR Tranche 2)
Category: Tactical / Defense NDAA Status: Blue UAS certified, NDAA compliant Manufacturer: Teal Drones / Red Cat Holdings (Salt Lake City, UT) — Made in USA Availability: Military procurement (U.S. Army SRR program)
Overview
The Black Widow won the U.S. Army's Short Range Reconnaissance (SRR) Tranche 2 contract — beating the Skydio X2D. Thousands of units will be fielded across Brigade Combat Teams over the next five years. Purpose-built for GPS-denied, EW-contested environments. Doodle Labs Helix Mesh Rider Radio with Sense Technology provides the communications backbone.
Key Details
- SRR Tranche 2 winner over Skydio X2D
- Comms: Doodle Labs Helix Mesh Rider Radio
- Anti-jamming via proprietary Sense Technology
- Dual-band operation
- Adaptive modulation
- Low-latency HD video and telemetry BVLOS
- Low probability of intercept/detect
- NDAA compliant, Blue UAS approved
- Validated in EW-contested environments including Ukraine
- Modular architecture for future capability upgrades
Gotchas
- Military procurement pipeline only. Not available for commercial purchase.
- Doodle Labs integration is specific to the SRR variant — not the same radio as the commercial Teal 2.
- Detailed technical specs are largely restricted/FOUO.
Last updated: March 2026
Skyfish Osprey
Category: Tactical / Commercial NDAA Status: NDAA compliant Manufacturer: Skyfish (Missoula, MT) — Made in USA
Overview
American-made drone built for precision mapping, inspections, and ISR missions. Designed around accuracy, repeatability, and secure operations rather than consumer features. Government-focused.
Specs
| Spec | Value |
|---|---|
| Weight | ~3.7 lb (1.7 kg) |
| Flight Time | Up to 45 min |
| Transmission | Up to 10 km |
| Use Cases | Infrastructure inspection, surveying, government |
Notes
Emphasizes stable flight, precise positioning, and professional sensor support. Data quality and compliance prioritized over convenience. Worth profiling in more depth as field experience accumulates.
Last updated: March 2026
SiFly Q12
Category: Tactical / Commercial NDAA Status: NDAA compliant Manufacturer: SiFly (USA)
Overview
SiFly entered the market in 2025 with the Q12, a platform that prioritizes endurance and range above everything else. American-made, NDAA-compliant. Positioned for long-duration inspection and surveillance missions where flight time is the primary constraint.
Notes
Relatively new to market — detailed integration specs are still emerging. Worth tracking for operators who need maximum endurance from an NDAA-compliant platform. Community contributions with field data welcome.
Last updated: March 2026
Hoverfly LiveSky / Spectre
Category: Tactical / Industrial — Tethered UAS NDAA Status: Blue UAS listed (Spectre), Green UAS listed Manufacturer: Hoverfly Technologies (Orlando, FL) — Made in USA
Overview
Tethered drone systems for persistent surveillance, communications relay, and overwatch. Powered via tether cable — unlimited flight time as long as ground power is available. No battery constraints. Blue UAS and Green UAS certified. Used by military, law enforcement, and critical infrastructure protection.
Key Features
- Unlimited flight time (tethered power)
- Persistent ISR: EO/IR payload for continuous overwatch
- Communications relay: Extend comms range by elevating radio/antenna
- Blue UAS (Spectre): ATO from 2025 Blue UAS Challenge
- Weather resistant
- Rapid deployment
Gotchas
- Tethered = limited mobility. Drone stays within cable radius of ground station.
- Ground station required — not as portable as free-flying drones.
- Cable management is a real operational concern in field conditions.
- Best for persistent overwatch, events security, and fixed-site protection — not for search/recon over large areas.
Last updated: March 2026
Shield AI Nova 2
Category: Tactical / Defense — Autonomous Indoor ISR NDAA Status: NDAA compliant Manufacturer: Shield AI (San Diego, CA) — Made in USA Availability: Military / government procurement
Overview
Autonomous indoor ISR drone that flies and maps buildings without GPS, without a pilot, and without comms. Uses Shield AI's Hivemind autonomy software for fully autonomous room-by-room clearing and mapping. Designed for military MOUT (Military Operations in Urban Terrain) and law enforcement tactical entry support. The drone enters a structure autonomously and returns with a 3D map and video.
Key Features
- Fully autonomous indoor flight — no GPS, no pilot, no comms required
- Hivemind AI: Autonomous navigation, mapping, and obstacle avoidance
- Room-by-room clearing: Enters unknown structures and maps them
- 3D mapping output
- Quiet operation
- NDAA compliant, Made in USA
Gotchas
- Military/government procurement only.
- Hivemind is proprietary — no MAVLink, no open protocols.
- Indoor-only use case — not an outdoor platform.
- Limited flight time due to small form factor.
- Shield AI is also developing the V-BAT (fixed-wing VTOL) for outdoor missions — separate platform.
Last updated: March 2026
Neros Archer
Category: Tactical / Defense — FPV NDAA Status: Blue UAS listed (ATO from 2025 Blue UAS Challenge) Manufacturer: Neros Technologies (Los Angeles, CA) — Made in USA
Overview
High-performance, American-made FPV drone. Blue UAS certified. Designed for long-range missions, battlefield-proven, cost-effective for large-scale deployment. Optimized to resist electronic warfare. One of the first FPV platforms to receive Blue UAS listing.
Specs
| Spec | Value |
|---|---|
| Type | FPV (First-Person View) |
| Speed | Up to 160 km/h |
| Blue UAS | Yes — ATO from 2025 29 Palms Challenge |
| NDAA | Compliant |
| EW Resistance | Optimized for contested RF environments |
| Manufacturing | Designed and manufactured in Los Angeles, CA |
Notes
The Blue UAS listing for FPV platforms was a first in the 2025 challenge cycle. The Neros Archer represents the DoD's recognition that FPV capabilities are critical for modern warfare (lessons from Ukraine). Detailed integration specs are restricted.
Last updated: March 2026
ModalAI Seeker / Stinger
Category: Tactical / Defense — Autonomous FPV NDAA Status: Blue UAS Framework (16 components listed — most of any manufacturer) Manufacturer: ModalAI (San Diego, CA, USA — spun out of Qualcomm 2018)
Overview
ModalAI produces the most Blue UAS Framework components of any single manufacturer (16 listings). Their VOXL 2 compute platform is the reference companion computer for PX4-based autonomous drones. The Seeker and Stinger are ModalAI's own FPV/autonomous drone platforms built on this ecosystem.
ModalAI placed in the top 5 of DDG Phase I (~77–80 points).
Platforms
Seeker — Vision-Guided FPV
- GPS-denied capable via VOXL 2 visual-inertial odometry
- Onboard AI for target detection and tracking
- Autonomous terminal guidance option
Stinger — Strike FPV
- Strike-optimized variant
- Low-cost, expendable architecture
- Designed for contested RF environments
VOXL 2 Compute Platform
| Spec | Value |
|---|---|
| Processor | Qualcomm QRB5165 (8-core, 2.84 GHz) |
| AI Performance | 15 TOPS (GPU + DSP) |
| Camera Inputs | 7× MIPI CSI-2 |
| Weight | ~16 g (module only) |
| Software | PX4, ROS 2, VOXL SDK |
| Blue UAS | Framework component |
VOXL 2 runs PX4 natively, making it the most direct integration target for any PX4-based AI Wingman deployment.
Notes
ModalAI is the most interesting integration partner for the AI Wingman PX4 architecture. They run PX4 natively on VOXL 2, which maps directly to the existing PX4 Integration Architecture doc. Their visual-inertial odometry stack is production-ready for GPS-denied operations.
Last updated: March 2026
Red Cat FANG F7
Category: Tactical / Defense — FPV NDAA Status: NDAA compliant Manufacturer: Red Cat Holdings / Teal Drones (Salt Lake City, UT, USA)
Overview
The FANG (Fierce, Agile, Nimble, Guerrilla) F7 is Red Cat's entry into the tactical FPV strike market. Built with NDAA-compliant components including UMAC (Unusual Machines) American-made motors. Red Cat is also the manufacturer of the Teal 2 (ISR) and Teal Black Widow (Army SRR Program of Record).
Specs
| Spec | Value |
|---|---|
| Frame Size | 7" class |
| Flight Controller | BrainFPV RADIX2 (F7 processor, BMI270 IMU) |
| Motors | UMAC 2807 (28×7mm stator, N552SH magnets, 3-8S) |
| Battery | 3-8S LiPo |
| NDAA | Compliant |
| Manufacturing | USA (Orlando, FL — UMAC components) |
Red Cat Portfolio
| Product | Role |
|---|---|
| Teal 2 | Night ISR, FLIR Hadron 640R thermal |
| Black Widow | Army SRR Tranche 2 Program of Record |
| FANG F7 | FPV strike platform |
Notes
Red Cat/Teal did not place in the top 11 of DDG Phase I despite holding the Army SRR Program of Record. The FANG F7 represents their pivot toward the strike/FPV market. UMAC's American-made motor facility (50,000+ motors/month capacity in Orlando, FL) is a key Blue UAS Framework component.
Last updated: March 2026
Skycutter Shrike 10 Fiber
Category: Tactical / Defense — FPV Strike NDAA Status: NDAA compliant (via Skycutter UK partnership) Manufacturer: Skycutter (UK) / SkyFall (Ukraine) DDG Phase I: 1st place (99.3 points — highest score in competition)
Overview
The Shrike 10 Fiber won the Drone Dominance Gauntlet Phase I with 99.3 points — the highest score of all 26 competitors. It is a fiber-optic FPV strike drone, meaning the video and control signals travel through a thin fiber-optic cable rather than RF, making it completely immune to electronic warfare jamming.
The platform is a partnership between Skycutter (UK) and SkyFall (Ukraine), combining Ukrainian combat-proven design with a NDAA-compliant Western manufacturing pathway.
Key Features
- Fiber-optic control: Zero RF emissions — immune to jamming, undetectable by RF sensors
- DDG Phase I winner: 99.3/100 — dominated the competition
- Combat-proven lineage: SkyFall's designs are battle-tested in Ukraine
- NDAA compliant (via Skycutter UK manufacturing)
- Low-cost, expendable
SkyFall (Ukraine)
SkyFall also produces the Vampire, a larger FPV platform capable of carrying 15 kg payloads. SkyFall is one of the most experienced combat FPV manufacturers in the world, with designs refined through continuous battlefield feedback.
DDG Phase II Implications
The fiber-optic approach has a fundamental advantage: it cannot be jammed. DDG Phase II introduces full EW opposition, GPS denial, and communications jamming — environments where RF-linked FPV drones degrade significantly. Fiber-optic platforms bypass the entire EW problem at the cost of limited range (determined by spool length) and the requirement to physically trail a fiber behind the drone.
Notes
The Shrike's DDG dominance signals that fiber-optic FPV may define the next generation of tactical strike drones. Kela Technologies (Israel, In-Q-Tel backed) is the key fiber-optic technology provider — they also partner with Neros for the Archer Fiber variant.
Last updated: March 2026
Vantage Robotics Vesper / Trace
Category: Tactical / Defense — ISR NDAA Status: NDAA compliant / Blue UAS Manufacturer: Vantage Robotics (USA)
Overview
Vantage Robotics builds compact ISR platforms for defense and public safety. The Vesper and Trace are small, portable reconnaissance drones designed for squad-level deployment with encrypted communications and secure data handling.
Vantage also manufactures the Vision2 ground control station — a 2500-nit display with 15 TOPS AI processing and AES-256 encryption, which is one of a handful of NDAA-compliant GCS options on the market.
Platforms
Vesper
- Small tactical ISR drone
- Blue UAS listed
- Encrypted data link
- Day/night sensor options
Trace
- Ultra-compact reconnaissance platform
- Designed for rapid deployment and covert operations
- Minimal visual and acoustic signature
Vision2 GCS
| Spec | Value |
|---|---|
| Display | 2500 nit (sunlight readable) |
| AI Compute | 15 TOPS |
| Encryption | AES-256 |
| NDAA | Compliant |
Notes
Vantage occupies the small ISR space alongside Teal 2 and Parrot ANAFI USA. Their Vision2 GCS is notable as one of the few NDAA-compliant ground control options with integrated AI processing.
Last updated: March 2026