ExpressLRS (ELRS) is the dominant open-source radio link for FPV, offering sub-1ms latency and multi-kilometer range. Paired with modern ESC firmware, your control link and motor control are the foundation of a responsive quad.
ExpressLRS is an open-source radio control link operating on 900MHz or 2.4GHz. It's free, community-driven, and outperforms commercial systems in both latency and range. ELRS is now the standard for FPV drones worldwide.
| Parameter | 2.4 GHz | 900 MHz |
|---|---|---|
| Packet Rate | 50–1000 Hz | 25–200 Hz |
| Latency | ~1ms (at 1000Hz) | ~5ms (at 200Hz) |
| Range (typical) | 5–15 km | 10–40+ km |
| Power Output | 25–1000 mW | 25–1000 mW |
| Best For | Racing, freestyle | Long range, penetration |
If not using a binding phrase, use the traditional bind method: power the RX 3 times quickly (plug-unplug-plug-unplug-plug) to enter bind mode, then select "Bind" in the ELRS Lua script on your radio.
| Packet Rate | Latency | Range | Best Use |
|---|---|---|---|
| 1000 Hz | ~1ms | Short | Racing, indoor proximity |
| 500 Hz | ~2ms | Medium | Freestyle (best balance) |
| 250 Hz | ~4ms | Long | General, good all-around |
| 150 Hz | ~6ms | Very Long | Long range cruising |
| 50 Hz | ~15ms | Maximum | Extreme long range |
While 1000 Hz gives the lowest latency, it has significantly reduced range and can cause failsafes at distance. For most freestyle flying, 500 Hz is the sweet spot. Use 1000 Hz only for racing gates.
The ELRS Lua script runs on your radio (EdgeTX/OpenTX) to control ELRS settings:
ESC firmware controls your brushless motors. Modern ESCs use BLHeli_32, BLHeli_S, or AM32 firmware, configured via their respective configurator apps.
| Firmware | MCU Type | Protocol | Features |
|---|---|---|---|
| BLHeli_32 | STM32 (32-bit) | DSHOT, PWM | Most features, telemetry, braking |
| BLHeli_S (JESC) | ATmega (8-bit) | DSHOT300/600 | Good performance, lightweight |
| AM32 | Various 32-bit | DSHOT | Open source, growing support |
| KISS | Proprietary | KISS DSHOT | Smooth, KISS ESCs only |
BLHeli_32 Configurator (or BLHeliSuite for older ESCs) lets you configure your ESCs via USB passthrough from Betaflight.
| Setting | Recommended | Notes |
|---|---|---|
| Motor Direction | Normal or Reversed | Match the X-frame motor layout |
| PWM Frequency | 24-48 kHz | Higher = smoother, slightly more heat |
| Motor Timing | 16-23° | 16° for racing, 23° for smoothness |
| Rampup Power | 0.25-0.5 | Lower = softer throttle response |
| Brake on Stop | Enabled | Better prop braking on zero throttle |
| Demag Compensation | High | Prevents desync on rapid throttle changes |
| Bidirectional DSHOT | Enabled | Required for RPM filtering |
Bidirectional DSHOT sends motor RPM data back to the FC. Betaflight uses this for RPM Filter — the single most impactful filter. It automatically notches out each motor's noise frequency. Enable it in Configuration → DSHOT Bidirectional = ON. This alone can clean up a noisy build dramatically.
Standard X-frame motor direction (props-in configuration):
| Position | Motor # | Direction | Prop |
|---|---|---|---|
| Front Right | Motor 1 | CW (clockwise) | CW prop |
| Rear Right | Motor 2 | CCW (counter-clockwise) | CCW prop |
| Rear Left | Motor 3 | CW (clockwise) | CW prop |
| Front Left | Motor 4 | CCW (counter-clockwise) | CCW prop |
To reverse a motor: use BLHeli Configurator to flip direction, or physically swap any two motor wires. BLHeli method is preferred as it's software-based and reversible.
INAV focuses on GPS navigation, autonomous flight, and fixed-wing/multirotor support. It's the go-to for:
ArduPilot is the most capable open-source autopilot. It supports everything from 250mm quads to full-size helicopters.
| Feature | Betaflight | INAV | ArduPilot |
|---|---|---|---|
| Best For | FPV racing/freestyle | GPS nav, fixed-wing | Full autonomy |
| Flight Performance | ★★★★★ | ★★★★☆ | ★★★☆☆ |
| GPS Features | ★★☆☆☆ | ★★★★★ | ★★★★★ |
| Ease of Setup | ★★★★★ | ★★★★☆ | ★★☆☆☆ |
| Community Size | ★★★★★ | ★★★★☆ | ★★★★☆ |