Initial Setup: MAVLink HUD & ExpressLRS
A step-by-step guide to configuring ArduPilot and ExpressLRS for use with MAVLink HUD.
This guide walks you through the initial setup required to use MAVLink HUD with an ArduPilot vehicle and an ExpressLRS (ELRS) radio link. By the end of this process, you will have a professional-grade "Glass Cockpit" telemetry display running on your Android device, wirelessly connected to your drone via your RC transmitter.
Prerequisites
- Flight Controller: Running ArduPilot 4.5 or newer (Copter or Plane).
- RC Link: ExpressLRS Transmitter and Receiver (TX/RX) running ELRS 3.3+.
- Backpack: Your ELRS Transmitter module must support "Backpack" functionality (most ESP32-based modules do).
- Android Device: Running MAVLink HUD.
- Optional (for AR): USB-C compatible AR Glasses (XREAL, Rokid, etc.).
Critical Requirement
Both your ELRS Transmitter and Receiver MUST be flashed with matching firmware versions that support the MAVLink protocol extension. MAVLink over ELRS is a relatively new feature; ensure you are on the latest stable release.
Step 0: Update ELRS Firmware
If your hardware is running older firmware (e.g. 2.x), you must update both the Transmitter (TX) and Receiver (RX) to the latest 3.x series using the ExpressLRS Configurator.
- Download and install the ExpressLRS Configurator.
-
Update Transmitter (TX):
- Select your device target (e.g., RadioMaster Ranger, BetaFPV Nano).
- Select the latest stable release (3.3+ recommended).
- Critical: Under "Backpack", ensure you also flash the Backpack firmware if available. The Backpack is what handles the WiFi/MAVLink bridge.
- Flash via USB or WiFi: If using WiFi, connect to the module's hotspot, navigate to
http://10.0.0.1, and upload the firmware in the Update section.
-
Update Receiver (RX):
- Select your receiver target (e.g., RadioMaster RP1/RP2).
- Ensure the major version matches the TX (e.g., if TX is 3.3.0, RX should be 3.3.x).
- Binding: You can either enter a "Binding Phrase" for automatic connection OR leave it blank and use the Manual Bind method (see below).
- Flash via WiFi:
- Connect to the receiver's WiFi hotspot.
- Navigate to
http://10.0.0.1in your browser. - Go to the Update section and upload the
firmware.binfile generated by the Configurator.
Alternative: Manual Binding
If you prefer not to use a binding phrase, follow these steps after flashing:
- Enter Bind Mode: Power the receiver ON for 1 second, then OFF. Repeat 3 times. On the 3rd power-up, the LED will blink a fast double-pulse, indicating it is in bind mode.
- Initiate Bind: Open the ExpressLRS Lua Script on your transmitter and click the [Bind] button at the bottom of the menu.
- The status will change to "Bound" and the LED will become solid.
Step 1: Configure the Receiver (RX)
We need to tell the receiver to output MAVLink instead of the standard CRSF protocol.
-
Wiring: Connect your ELRS Receiver's TX/RX pads to a spare UART on your Flight Controller (e.g.,
TELEM2orSERIAL2).
Note: Do not use the SBUS/RCIN port. You need a full UART with both TX and RX lines. -
Receiver WiFi Configuration:
- Power on your drone and transmitter.
- On your transmitter, open the ExpressLRS Lua Script -> WiFi Connectivity -> Enable RX WiFi.
- Connect your computer or phone to the receiver's WiFi hotspot (e.g.,
ExpressLRS RX).
Note: The default WiFi password for ALL ExpressLRS devices (TX, RX, and Backpack) isexpresslrs. - Open a browser and navigate to
http://10.0.0.1/hardware.html. - Find the Serial Protocol setting and change it to MAVLink.
- Find the Baud Rate setting and ensure it is set to 460800.
- Click Save & Reboot.
- Power Settings: In the receiver options (via Lua or Web UI), ensure Telemetry Power is set to match your TX power (or at least 100mW+). MAVLink is a bidirectional protocol; if the receiver can't talk back effectively, the link will fail.
Step 2: Configure ArduPilot
Now we configure the autopilot to speak MAVLink 2 on the port we just wired up.
- Connect your Flight Controller to Mission Planner or QGroundControl.
- Navigate to the Full Parameter List.
-
Serial Port Protocol: Find the
SERIALx_PROTOCOLparameter for your connected UART (e.g.,SERIAL2_PROTOCOL).
Set it to 2 (MAVLink 2). -
Baud Rate: Find the
SERIALx_BAUDparameter.
Set it to 460 (which corresponds to 460800 baud).Important: Unlike older telemetry radios (57600), ELRS MAVLink requires high-speed serial. Ensure this matches exactly. -
RSSI Source: Set
RSSI_TYPEto 5 (Telemetry Radio RSSI). This allows MAVLink HUD to display your link quality correctly. - Reboot the flight controller to apply changes.
Step 3: Configure the Transmitter (TX)
We need to configure the module to act as a bridge, forwarding MAVLink data to its internal WiFi Backpack.
- Open the ExpressLRS Lua script again.
- Main Protocol: In the root menu (top level), ensure the Protocol is set to MAVLink (not CRSF). This packages the telemetry correctly for the Backpack.
- Set Packet Rate to 100Hz Full or 333Hz Full. "Full" resolution modes are generally preferred for telemetry bandwidth.
- Set Telem Ratio to 1:2. This is crucial. Standard 1:64 or 1:16 ratios are too slow for MAVLink traffic.
-
Backpack Setup: Scroll down to the Backpack section.
Set Mode to MAVLink (not CRSF). -
WiFi Mode: Enable WiFi Telemetry on the Backpack. It should create a hotspot named
ExpressLRS TX Module(universal default password isexpresslrs).
Understanding Packet Rates
Your ELRS Packet Rate directly determines the smoothness of the HUD updates. There is a fundamental trade-off:
- High Rate (333Hz Full / 1000Hz): Provides the smoothest Artificial Horizon updates (high bandwidth for MAVLink) but reduces maximum radio range. Recommended for short-to-medium range flying.
- Low Rate (50Hz / 100Hz): Maximizes radio range and penetration but limits MAVLink bandwidth, resulting in a "choppier" HUD update rate (e.g., 2-5Hz for attitude). Recommended for long-range missions.
- Recommendation: Start with 333Hz Full. If you experience failsafes at range, drop to 100Hz Full.
Step 4: MAVLink HUD Setup
The final step is connecting your Android device.
- Connect your Android device to the ExpressLRS TX Module WiFi hotspot.
- Launch MAVLink HUD.
-
The app is designed for zero-touch configuration. It automatically initializes its UDP connection using the standard MAVLink defaults:
- Listen Port: 14550
- Send Port: 14550
No "Connect" button press is required. - Within a few seconds, you should see the Artificial Horizon come alive and the "Waiting for Data" message disappear.
Step 5: AR Glasses Experience (The "Glass Cockpit")
Augmented Reality Integration
This is where MAVLink HUD truly shines. By connecting a pair of supported USB-C AR glasses (like XREAL Air or Rokid Max), you transform from a "chin-down" pilot to a "heads-up" operator.
VIEW COMPATIBLE GLASSES GUIDE- Optical See-Through: The HUD renders with a pure black background. In AR optics, black is transparent, allowing the neon flight data to float perfectly over the real-world horizon.
- Dual Display Logic: Your phone remains active as a high-fidelity map and control surface, while the Primary Flight Display (PFD) is projected directly into your field of vision.
Setup Instructions
- Connect your AR glasses to your Android device via USB-C. This can be done at any time (before or after launching the app).
- Wait for the Android system to recognize the secondary display (you may see a "Samsung DeX" or "Screen Mirroring" prompt).
- Launch (or return to) MAVLink HUD.
- The app will automatically detect the secondary screen and project the Primary Flight Display (PFD) onto it.
Troubleshooting Tips
- Laggy Horizon? Check your "Telem Ratio" is 1:2. Anything lower will choke the bandwidth.
- No Connection? Verify the
SERIAL_BAUDis 460 (460800). 57 (57600) will not work. - "No Heartbeat"? Ensure your Receiver firmware version matches your Transmitter firmware version.
Advanced: MAVLink Multiplexing
For advanced users, the ExpressLRS "Airport" (Backpack) feature can act as a MAVLink stream multiplexer. This allows you to inject custom MAVLink messages (like STATUSTEXT) from a Ground Control Station into the same stream as your RC control data.
Configuration Requirements
- Receiver: Ensure Airport Mode is OFF. The receiver should remain in standard MAVLink output mode at 460800 baud.
- Transmitter (Lua Script):
- Go to Backpack -> Set Telemetry to WiFi.
- Go to WiFi Connectivity -> Enable TX WiFi.
- Injection Source (GCS/Script):
- Connect to the ExpressLRS TX WiFi hotspot.
- Send MAVLink data via UDP to IP
10.0.0.1on Port14555.
This setup merges your injected data with the RC channel data, outputting a single, combined MAVLink stream at the receiver.
Validation Tool
Download our Python script to test packet injection.