In this project we explore how to add RTK functionality to your UAS (drone), specifically a UAS using Pixhawk. In previous posts and videos we built a ZED-F9P base and rover for ground-based RTK projects, we will use the same F9P GNSS module here. Since we are adding this to a UAS we will need to miniaturize the footprint so we have the lowest possible weight onboard.

Don’t forget to subscribe to our YouTube channel!

For the plastic outer shell we are using a standard project case and have made the necessary cutouts using a rotary cutting tool (Dremel) and drilled for holes. In the pictures below, we provide the measurements and placement of those cutouts. We also have a complete materials list at the bottom of this post for all of the components used overall.

As with our previous ZED-F9P projects, we are pulling our base GNSS corrections into our UART2 port and also logging those coordinates to an Adafruit SD card logger. Luckily, the Pixhawk/Ardupilot software allows us to inject the GNSS corrections from our base (either with base connected directly to laptop or through SNIP/CORS/NTRIP). We inject those corrections to our GPS2 port on the Pixhawk which is also wired to the Tx/Rx (transmit/receive) ports on our F9P module (see wiring diagram below).

See our previous posts (and videos) How to Build an RTK Base and Rover and How to Add an Adafruit Logger with LCD Display for background on the complete system, this updated module would perform the same operations as the larger models but would obviously be easier to transport and is now communicating with Pixhawk. In that second link for the Adafruit Logger version, we discuss how to update the Arduino code on that logger with our custom code for adding on an LCD display (with links to our GitHub page). Similarly here, we created custom Arduino code for using an OLED display and posted that on a separate GitHub repository: SkyHorseTech/F9P_RAWX_Logger_OLED . As discussed in the prior post, the RTCM and UBX messages that are used by the logger and linked F9P can be customized to your needs. Please reference that for additional background on those settings.

Our module has an SD card logger but is not necessary for the use-case of our UAS since Ardupilot internally logs the GNSS coordinates on the Pixhawk if we program it accordingly, including geo-tagged/time-stamped photos taken by the UAS. The SD card logger simply provides us with a backup logging system and is available for non-UAS operations. Bonus: This smaller module can also act as a rover module for land based operations just as we have shown in prior articles. The only update needed would be to build a separate wiring harness (with male header) with connections to the 5v, GND, Tx and Rx wires on a 3DR/SiK radio and/or laptop. The UAS wiring harness (F9P->Pixhawk) and separate ground-based wiring harness (F9P->3DR Radio) could be swapped out within seconds, depending on the mission at hand. We have a complete wiring diagram below which outlines all of the necessary connections.

First, let’s go over how our module appears and the related cutout measurements. The box itself is rather small (3.54 x 2.76 x 1.10 inch) but packs a bunch of components inside:

Front of RTK module with OLED display
Side view with reset button and on/off switch
Top view with SMA antenna connector and 8-pin female header
Bottom of module with SD Card slot

Let’s take a look at the components inside of the module:

The 3.7v LiPo battery is connected to the On/Off switch so this can be powered externally (by wire) or internally (by battery) depending on the length of the mission. The Reset Button would reboot the system in cases where an error was encountered on startup. Notice the standoff screw between the F9P and the SD Card Logger. This keeps both units in place within the case. We hot glued the F9P to the case also which aids stability.

Wiring Diagrams

Wiring diagram for the F9P RTK module
F9P Module Wiring to Pixhawk
Custom wiring harness for F9P module to Pixhawk

Settings in Mission Planner

See our original post and linked video How to Build an RTK Base and Rover to see how we inject GPS corrections into Mission Planner. Another step needed is to have our onboard F9P module use those corrections and use this as a secondary (or primary) GPS module for our UAS. See the Ardupilot link below with regard to GPS blending which is a guide on adding additional GPS systems such as this. Here are various documents on integrating GNSS modules with Pixhawk:

ArduPilot page on setting up RTK w/Mission Planner:

Different GNSS systems, same theory:



ArduSimple’s F9P:

Sky Horse Arduino Github Repository for this project:

Materials List

Full disclosure: We are part of the Amazon Affiliates program and will receive a small portion of sales if you purchase through links below. We place all residuals directly back into future projects.

SparkFun ZED-F9P SMA version*:
*For non-SMA (older) version of F9P get U.fl to SMA connector:
Adafruit SD card logger:
Adafruit headers kit:
Lithium Ion Polymer Battery – 3.7v 350mAh:
Helical RTK GNSS antenna:
Zulkit Project Boxes 3.54 x 2.76 x 1.10 inch (90 x 70 x 28 mm):
Header kit for connecting wires to F9P:
SparkFun Qwiic Adapter:
OLED Display 0.96 Inch SSD1306 I2C:
Qwiic Cable Kit:
Rainbow ribbon (10′):
8-pin male and female headers:
On/Off 5mm slide switch:
Reset push button 6x6x9mm:
Standoff kit (used between logger and F9P):

Link to the Adafruit page with additional technical details on their SD Card adalogger:

Link to the SparkFun F9P Hookup Guide: This page and the SparkFun website have tons of info on setting up the F9P.

Future enhancements within this system:

Thank you for reading and good luck to anyone building their own!

Join the Conversation

1 Comment

Leave a comment

Leave a Reply to esprtk Cancel reply

Please log in using one of these methods to post your comment: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: