Q: ArduPilot RTK Integration with Emlid Reach: Setup Guide

Updated 14 min read

Quick Answer

Integrating an Emlid Reach RTK GNSS receiver with ArduPilot gives your drone centimetre-level positioning by feeding corrected position data directly into the flight controller. The setup involves connecting the Emlid receiver to your autopilot via UART, configuring the right serial protocol in ArduPilot, and supplying RTCM corrections either from a base station or an NTRIP service.

Why Combine ArduPilot with RTK GNSS?

Standard GPS modules give you position accuracy of roughly 1 to 3 metres. That is fine for basic waypoint navigation and return-to-home, but it falls short for applications that demand precision. Aerial surveying, corridor mapping, precision agriculture, and automated inspection flights all benefit from knowing exactly where the drone is, not approximately where it is.

RTK (Real-Time Kinematic) GNSS closes that gap. By applying real-time corrections from a base station or an NTRIP network, an RTK receiver can achieve 1 to 2 centimetre horizontal accuracy and 2 to 3 centimetre vertical accuracy. When you feed that corrected position into ArduPilot, the autopilot can fly more accurate survey grids, hold position with tighter tolerances, and tag each photo with survey-grade coordinates during mapping missions.

ArduPilot has supported RTK for years through its GPS driver, which accepts RTCM correction data and outputs a corrected position that the EKF (Extended Kalman Filter) uses for navigation. The Emlid Reach receivers are well suited to this because they run a mature RTK engine, support multi-band, multi-constellation tracking, and output standard NMEA and RTCM protocols that ArduPilot understands natively.

For a broader look at how Emlid receivers compare, our Emlid Reach RTK GNSS Receivers: Complete Guide covers the full product range and their capabilities.

Hardware You Need

Building an ArduPilot RTK drone with Emlid requires three main components: an ArduPilot-compatible flight controller, an Emlid RTK GNSS receiver, and a source of RTCM corrections.

Flight Controller

Any flight controller running ArduPilot with at least two free UART ports will work. One UART is needed for the primary GPS (a standard non-RTK module is still useful as a fallback), and a second for the Emlid receiver. Popular choices include the CubePilot Cube Orange and the Pixhawk 6C. Both have multiple serial ports and enough processing headroom for RTK positioning alongside other autopilot tasks. Browse the full range in our autopilots and flight controllers collection.

If you are new to ArduPilot, the ArduPilot setup guide walks through the initial firmware flash and basic configuration.

RTK GNSS Receiver: Emlid Reach M2

For drone use, the Emlid Reach M2 is the natural choice. It weighs around 30 grams, tracks GPS, GLONASS, Galileo, BeiDou, and QZSS on multiple frequency bands, and can output corrected NMEA positions at up to 10 Hz over a serial connection. The M2 is designed for UAV mapping and has built-in support for both RTK and PPK workflows.

Older single-band receivers like the Reach M+ can still work with ArduPilot, but they are limited to L1 frequency corrections, which means longer initialisation times and reduced reliability in challenging environments. Multi-band receivers like the M2 resolve ambiguities faster and maintain lock more reliably.

Correction Source

RTK needs a stream of correction data. You have two options:

  • Local base station: An Emlid Reach RS2+ or Emlid Reach RS4 Pro set up on a known point, broadcasting RTCM corrections via a radio link to the rover on the drone. This is the standard approach for mapping in areas without internet connectivity.
  • NTRIP service: Connect the Reach M2 to the internet (via Wi-Fi or a mobile hotspot) and pull corrections from a nearby CORS (Continuously Operating Reference Station) network. This eliminates the need for a local base station but requires internet access at the flying site.

Physical Wiring and Connections

The Emlid Reach M2 communicates with ArduPilot through a standard UART serial connection. Here is how to wire it up.

Identifying Available UART Ports

Check your flight controller's documentation to find which serial ports are available. On most Pixhawk-compatible boards, SERIALx ports map to specific TELEM or GPS headers on the board. You will need to assign one of these ports to the Emlid receiver.

Avoid using the same port as your primary GPS. ArduPilot supports dual GPS inputs, and the RTK receiver should be configured as GPS 2 (the secondary) while a standard GPS module stays as GPS 1. This way, if the RTK loses correction data, the autopilot falls back to the standard GPS rather than losing navigation entirely.

Wiring the Reach M2 to the Flight Controller

The Reach M2 has a JST-GH connector with four pins: TX, RX, VCC, and GND. Connect these to the corresponding pins on a spare UART port on your flight controller:

  • M2 TX goes to the flight controller RX
  • M2 RX goes to the flight controller TX
  • M2 VCC connects to 5V (the M2 accepts 5V input)
  • M2 GND connects to ground

Double-check the pinout for your specific flight controller. Some boards label pins as TELEM1, TELEM2, GPS1, GPS2, or SERIALx. The physical pin order varies between manufacturers. Wiring TX to TX or RX to RX is the single most common mistake in RTK integration, and it will result in no communication at all.

Route the M2's GNSS antenna cable away from the flight controller, ESCs, and video transmitters. GNSS signals are extremely weak by the time they reach the antenna, and nearby sources of RF noise can degrade tracking performance or cause cycle slips. Mount the antenna on a conductive ground plane (at least 70 x 70 mm) on top of the drone for the best satellite visibility.

Correction Link Radio (for Local Base Setup)

If you are using a local base station rather than NTRIP, you need a radio link to carry RTCM corrections from the base to the rover. A pair of 433 MHz or 868 MHz telemetry radios works well for this. Connect one radio to the Reach RS2+ or RS4 Pro (via its serial port or Bluetooth) and the other to the Reach M2 on the drone.

Emlid Flow supports outputting RTCM3 corrections over serial, which can be fed directly into a radio modem. Set the baud rate to match between the base receiver, radio modems, and rover receiver. A common setting is 115200 baud, which provides enough bandwidth for multi-constellation RTCM data at 1 Hz.

For more on telemetry radio setup, see our RFDesign Telemetry Radios guide, which covers radio configuration with both ArduPilot and PX4.

ArduPilot Parameter Configuration

Once the hardware is wired up, you need to tell ArduPilot how to talk to the Emlid receiver. This is done through parameter settings in Mission Planner, QGroundControl, or any other ground control station.

Assign the Serial Port

Identify which physical UART port you connected the Reach M2 to. Then set the corresponding SERIALx_PROTOCOL parameter to tell ArduPilot what is connected to it.

For example, if the M2 is connected to SERIAL4 (TELEM2 on many boards):

  • SERIAL4_PROTOCOL = 5 (this tells ArduPilot to treat this port as a GPS input)
  • SERIAL4_BAUD = 115 (115200 baud, which is the M2's default serial speed)

The protocol value of 5 enables ArduPilot's GPS driver to accept both NMEA position data and RTCM correction input on the same port. The Emlid receiver handles the RTK computation internally and outputs a corrected NMEA stream, so ArduPilot simply receives the corrected position as if it were a very accurate GPS module.

Configure Dual GPS

ArduPilot supports two GPS inputs simultaneously. Set the following parameters to configure the primary and secondary GPS:

  • GPS1_TYPE = 1 (AUTO) for the standard GPS module on the default port
  • GPS2_TYPE = 1 (AUTO) for the Emlid RTK receiver on the serial port you assigned

With both GPS sources active, ArduPilot will prefer the receiver with the better reported accuracy. When the Emlid has an RTK fix, it will automatically be selected as the primary position source. If the RTK fix drops to float or single-point mode, the autopilot can switch back to the standard GPS. Set GPS_AUTO_SWITCH = 2 to enable this intelligent switching based on reported accuracy.

RTK Injection via MAVLink (Alternative)

There is an alternative method where raw RTCM correction data is injected into ArduPilot's GPS driver via MAVLink. In this setup, the Reach M2 connects to a companion computer (like a Raspberry Pi), which forwards corrections to ArduPilot over MAVLink (GPS2_TYPE = 2). The direct serial method above is simpler and more reliable for most users, so stick with that unless you have a specific reason to use MAVLink injection.

Configuring the Emlid Reach M2

With the wiring done and ArduPilot configured, you need to set up the Reach M2 itself using the Emlid Flow app.

Position Output Settings

Open Emlid Flow and connect to the Reach M2. In the Position Output settings, configure the following:

  • Output format: NMEA (this is what ArduPilot's GPS driver expects)
  • Update rate: 5 Hz or 10 Hz (higher rates give smoother position tracking)
  • Serial port: Enable output on the UART port you have connected to the flight controller
  • Baud rate: 115200 (must match the SERIALx_BAUD setting in ArduPilot)

Correction Input Settings

If you are receiving corrections over a radio link from a local base station, configure the M2 to accept RTCM3 corrections on the serial port that the radio is connected to. In Emlid Flow, go to Correction Input and set:

  • Source: Serial
  • Format: RTCM3
  • Baud rate: Match the radio modem settings

If you are using NTRIP instead, set the correction input to NTRIP and enter your NTRIP caster details (server address, port, mount point, username, and password). The M2 needs internet access for this, either through its Wi-Fi connection to a mobile hotspot or a Wi-Fi bridge on the drone.

Setting Up the Base Station

If you are running your own base station rather than using an NTRIP service, here is the quick setup.

Position the Base

Place your Reach RS2+ or RS4 Pro on a tripod over a point with clear sky visibility, away from trees, buildings, and sources of electromagnetic interference. The antenna should have an unobstructed view of the sky down to about 15 degrees elevation in all directions.

Enter Known Coordinates

For the best RTK results, the base station needs to know its own position accurately. If you have a known survey mark, enter its coordinates manually in Emlid Flow. If not, you can average the base position over a period of time. The longer you average, the more accurate the base position will be:

  • 10 minutes of averaging gives roughly 0.5 to 1 metre base accuracy
  • 30 minutes gives roughly 10 to 20 centimetres
  • 2 hours or more gives centimetre-level base accuracy

The accuracy of the base position directly affects the accuracy of the rover's RTK solution. For mapping work, entering a known coordinate or averaging for at least 30 minutes is strongly recommended.

Start Broadcasting Corrections

In Emlid Flow, configure the base to send RTCM3 corrections over the serial port connected to the radio modem. The default RTCM3 message set works well for most applications. Ensure the base is in "Base" mode and has achieved a position fix before starting corrections.

Verification and Testing

Before taking your RTK drone into the field for a real mission, test the complete system on the bench and in a short flight.

Bench Test

Power everything on indoors where you can see all the components. Connect to ArduPilot through Mission Planner and check the following:

  • The Reach M2 shows up as GPS 2 in Mission Planner's flight data screen
  • The M2's HDOP and satellite count are visible and reasonable (HDOP below 2 and more than 10 satellites is good)
  • The RTK status indicator in Mission Planner shows the fix type. You want to see "RTK Fixed" or "RTK Float"

With correction data flowing, the M2 should transition from "Single" to "Float" to "Fixed" within a few minutes. A "Fixed" solution means the RTK engine has resolved the carrier phase ambiguities and is delivering centimetre-level accuracy.

Ground Test Outdoors

Take the setup outside to a location with good sky visibility. Power on the base station and start corrections, then power on the drone (propellers off) and watch the RTK status in Mission Planner. A typical time to first fix with a multi-band receiver is 30 seconds to 2 minutes with a local base. Verify that the reported position matches your actual location on the map, and that horizontal accuracy reads below 2 centimetres once the fix is established.

Short Flight Test

Do a short hover flight in a safe location and watch the RTK status. It should maintain "Fixed" throughout. If the fix drops during flight, check for RF interference from the drone's electronics, radio link issues between base and rover, or multipath reflections from nearby structures. After landing, review the position logs. The track should be smooth and accurate, without the wandering typical of standard GPS.

Troubleshooting Common Issues

RTK integration can be fiddly the first time. Here are the most common problems and their solutions.

No GPS Detected in ArduPilot

If ArduPilot does not see the Emlid receiver at all, the problem is almost certainly wiring or serial port configuration. Check the following:

  • TX and RX are crossed (M2 TX to FC RX, M2 RX to FC TX)
  • The SERIALx_PROTOCOL parameter is set to 5 for the correct port
  • The SERIALx_BAUD parameter matches the M2's configured baud rate
  • The cable is not damaged and all connectors are fully seated

A quick way to test the M2 independently is to connect it to your computer via USB and check its output in a terminal program. If it outputs NMEA sentences on USB, the receiver is working and the problem is in the connection to the flight controller.

RTK Never Reaches "Fixed" Status

If the receiver stays in "Float" or "Single" mode, the correction data is either not arriving or not sufficient. Check these things:

  • Correction stream: In Emlid Flow, verify that the M2 is receiving corrections. The Correction Input screen shows the correction age and data rate. If corrections are not arriving, check the radio link or NTRIP connection.
  • Baseline distance: RTK works best with baselines under 10 km for multi-band and under 5 km for single-band. Longer baselines degrade accuracy and increase time to fix.
  • Satellite geometry: Check the number of satellites and HDOP values on both base and rover. Poor geometry makes it harder to resolve ambiguities. Sometimes waiting 15 to 30 minutes for the satellite constellation to improve is the simplest fix.
  • Multipath: If either antenna is near reflective surfaces (buildings, vehicles, metal roofs), multipath interference can prevent a fixed solution. Move to a more open location.

Position Jumps or Is Unstable

Sudden position jumps in an RTK solution usually indicate cycle slips, where the receiver momentarily loses lock on a satellite signal. Common causes include vibration from the drone's motors, RF interference from other electronics, and poor antenna placement.

Try mounting the M2 on a vibration-damped platform and increasing the separation between the GNSS antenna and sources of interference. A ground plane under the antenna also helps by rejecting signals reflected from below.

In ArduPilot, the EKF applies smoothing and outlier rejection to the GPS input, so small position jumps should be filtered out. If jumps are large enough to affect navigation, the issue is likely in the hardware setup rather than the software configuration.

Correction Latency Too High

RTK corrections need to arrive within a few seconds of the observations they correct. Emlid Flow shows the correction age in real time. Anything above 5 seconds is a concern. To reduce latency, use a closer NTRIP mount point, improve your internet connection, or switch to a local base station with a direct radio link.

Practical Use Cases

Once your ArduPilot RTK system is working, here are the applications where it makes a real difference.

Aerial Surveying and Mapping

RTK is the standard for professional drone mapping. With centimetre-accurate camera positions from the Emlid receiver, you can produce orthomosaics and digital surface models with minimal ground control points. This reduces field time and processing effort compared to relying entirely on GCPs. The RTK vs PPK comparison guide breaks down when each approach works best for mapping missions.

Corridor Mapping

For linear infrastructure surveys (roads, railways, power lines, pipelines), the drone needs to fly precisely along a corridor. RTK positioning ensures the flight path matches the planned survey lines, reducing gaps in coverage and the need for repeat flights. ArduPilot's waypoint navigation benefits directly from the improved positional accuracy.

Precision Agriculture

RTK enables consistent, repeatable flight paths over agricultural fields across multiple flights and seasons. This is essential for change detection analysis, where you compare imagery from different dates to assess crop health, identify problem areas, or measure growth. Standard GPS drift between flights would make such comparisons unreliable.

Mission Planner Tips for RTK Missions

Mission Planner has several features that help with RTK drone operations.

Monitoring RTK Status

The flight data screen shows GPS status information including the fix type. You can add a datafield to display the RTK state ("No RTK", "RTK Float", or "RTK Fixed") so you can confirm the system is working before starting a mission. Do not begin a survey mission until the fix type is "RTK Fixed".

Waypoint Precision and Logging

With RTK active, waypoints are flown with centimetre accuracy, which is critical for mapping missions where consistent overlap and spacing matter. ArduPilot also logs GPS data including RTK status, satellite count, HDOP, and position for both GPS inputs. After a flight, review the logs to verify the RTK maintained a fixed solution throughout. The BIN log files can also be used alongside Emlid's raw observation data for PPK processing as a backup accuracy check.

Performance Expectations

A well-configured RTK system with a multi-band Emlid receiver should deliver 1 to 2 centimetres horizontal and 2 to 3 centimetres vertical accuracy with a fixed solution. A float solution degrades this to roughly 5 to 10 centimetres. Expect the RTK to reach fixed status within 30 seconds to 2 minutes with a local base station and multi-band receiver.

The fix should remain stable during normal flight. Brief losses can occur when the drone banks sharply and the antenna's sky view is partially blocked, but the receiver should recover quickly. If you see frequent fix losses during level flight, investigate the correction link quality and antenna placement.

FAQ

Q: Do I need a special ArduPilot firmware version for RTK?

A: RTK support has been in ArduPilot for years and is included in all standard firmware builds. You do not need a special version. However, keeping your firmware up to date ensures you have the latest GPS driver improvements and bug fixes.

Q: Can I use a single Emlid receiver as both the primary GPS and the RTK source?

A: Yes, you can. If you only have the Emlid receiver and no standard GPS module, set it up as GPS 1 on a single serial port. ArduPilot will use the RTK-corrected position for navigation. However, having a second standard GPS as a backup is recommended for reliability.

Q: What happens if the RTK corrections stop during a flight?

A: The Emlid receiver will continue providing position data, but accuracy will degrade from centimetre to metre level. If you have GPS_AUTO_SWITCH enabled and a standard GPS connected, ArduPilot will switch to the more accurate source automatically. The drone will continue to navigate safely, just with reduced precision.

Q: Can I use the Reach M2 for both RTK positioning and camera time marks simultaneously?

A: Yes. The Reach M2 can output corrected NMEA positions to the flight controller via UART while simultaneously logging camera time marks through its hot shoe adapter connection. These two functions operate independently.

Q: Is there a maximum baseline distance for RTK with Emlid?

A: Multi-band receivers like the Reach M2 and RS2+ can maintain RTK fixed solutions at baselines up to 60 to 100 km in ideal conditions. However, for reliable survey-grade accuracy, keeping the baseline under 10 km is recommended. Beyond that, atmospheric modelling errors start to degrade the solution.

Q: Do I need to calibrate the compass differently with RTK?

A: No. The compass calibration process is the same regardless of whether you are using standard GPS or RTK. The compass provides heading information, while GPS provides position. They are complementary but independent sensor inputs to the EKF.

Q: How much power does the Reach M2 draw?

A: The Reach M2 draws approximately 1 to 2 watts depending on operating mode. At 5V, that is roughly 200 to 400 mA. Most flight controller BEC circuits can supply this easily, but verify that the BEC rating has enough headroom to also power servos, telemetry radios, and other peripherals.

Q: Can I use Emlid Flow and Mission Planner at the same time?

A: Yes, but not on the same connection. Emlid Flow connects to the Reach M2 via Wi-Fi or Bluetooth, while Mission Planner connects to the flight controller via USB or telemetry radio. They operate independently and do not interfere with each other.