SparkFun GPS-RTK2 Board - ZED-F9P for moving base RTK

As a newcomer to GPS, I’m looking for some practical advice on setting up the radio link between base and rover receivers. Sparkfun’s tutorial isn’t helpful as it uses Bluetooth with an inferior data rate and range. I’ve also read Ublox’s datasheet, Integration manual & Moving Base App Note, but need clarification on:
What Wi-Fi links are compatible and fast enough between base and rover (Ublox guide is 460800 baud for 5Hz position update)?
Could the Wi-Fi on a Pi Zero W be used, if the Pi’s processor will be part of this project?

Are you looking at a WiFi link or RF 900Mhz Radio modem link?
RTK correction messages are not typical very high, the older ublox C94-M8P dev boards RF link is defaulted to 19200bps and works quite well. I dont know off top of head the bandwidth consumed on that fairly slow link but its set for optimal distance vs speed / latency.
The F9 probably can handle higher RTK messages via UART 2.
Best to make sure your only emitting ONLY the RTCM messages that relate to the GPS Constellation your using in your area. eg GPS/Glonass etc

But your mentioning WiFi? RTCM messages are inputted to the F9 or M8 via UART serial or I2C, USB etc…
Also “(Ublox guide is 460800 baud for 5Hz position update)?” There are two seperate considerations, the Position reporting speed at 5Hz would not need sucha high baud rate, as the NMEA info at 5hz is pretty small. But the rate of RTCM corrections messages & their latency would play a part in getting higher that 1Hz position accuracy. 460800 seesm high to me even for 5Hz report rate.
Typically over RF modems, the best config is lower data rate for greater distance. But depends if distance is a concern for your APP? As Wifi typically is not great over large distances without considerable design & hardware and adds overhead.
Why Wifi just for RTK?

C94-M8P-AppBoard_UserGuide_(UBX-15031066).pdf (1.6 MB)

Thanks for your comments Paul. I am trying to get a real time bearing from base to rover at 3 to 25 meters range with updates at 5Hz. I am looking for the most compact solution, so I’m trying to avoid Ublox’s C099-F9P’s larger size. Also the C94-M8P User Guide states an update rate of only 1Hz for in moving base mode, hence my interest in the Sparkfun Z9P board.

Ublox’s ZED-F9P Moving base applications Application Note states on page 14 “Considering that the minimum baud rate is 38400 baud for a 1 Hz navigation rate application and 460800 baud is recommended for a 5 Hz navigation rate application this will usually limit what radio technology can be used as the gross data rate will need to be considerably higher to transfer data forwards and backwards.”

Being a newby to the GPS/RF field, I was just guessing that WiFi might be an efficient solution for minimum physical size, data rate and range for this project? Please let me know if there is a better type of wireless link?

For MAVLINK optimised RF links recommend RDF900’s

They are MAVLINK packet aware and integrate into Mission Planner well!
Might be an over kill for 3-25 meters. And maybe WIFI with UDP might provide better through put at that close range.

Whats the application?

The C099-F9P boards might be worth a look for short range WIFI conectivity

My application is mobile “follow-me” at ranges <25m where base and rover are moving. It seems I need to chat with someone who has experience with moving base RTK, in particular wireless linked F9P’s.

I have just read this thread and am in a similar situation to Richard, but less demanding perhaps - I will have a moving base on the deck of a catamaran, and the rover on a kite at about 25 - 50m range which is towing the sailboat. I need to know the position of the rover with respect to the base at say 1Hz and +/- 10 cm. I will study these user guides. Any further help or advice much appreciated.


Hey Tom,

Personally, the best way to achieve this would be to use an accelerometer and potentially combine it with a GPS too. I’ve linked a couple of parts below that should be able to get readings within that required range with reasonable accuracy when combined with a microcontroller to interpret the values recorded.

All the best with your project! Make sure to let us know how you go :smiley:

Core Electronics | Support

1 Like

Tom, my radio link between mobile base and rover is now working very efficiently using a pair of Xbee 3 transceivers. I am still tweaking my setup, which looks promising but has a long way to go. From my experience, the biggest challenge in a dynamic environment is sufficient GPS signal strength for a reliable RTK fix. The base antenna on the cat should be fine, but the kite antenna and ground plane would be an interesting challenge. I also found the code to parse RELPOSNED messages difficult as I have never written code before. I am using an aluminium foil 70x70mm ground plane for a 35x35mm multiband active patch antenna. From my experience, at your speed, range and update rate, I doubt you will need to supplement your GPS data with accelerometer data if you only need to know the relative position/heading between cat and kite? I am currently using an LSM303D accelerometer & magnetometer, but this data is being used to determine the rover’s absolute orientation, and not to augment the F9P’s RELPOSNED data as I think Bryce suggests.

1 Like

Hello Richard,

Can you please let me know your setup in details? I am currently building a RTK system using two SparkFun ZED-F9P boards. Which Xbee radio module I should buy in to have a 3km coverage? Also, how can I connect Xbee module to the ZED-F9P? Thanks in advance.

1 Like

Hi Shi
My setup is based on the diagram on page 15 of this Note. I’m using a pair of these Xbee’s between my moving base and rover, but they are at close range, so not appropriate for your needs. I am also using an onboard Raspberry Pi Zero W on my rover to parse RELPOSNED messages and perform other functions. You don’t mention whether you have line of sight, but you could consider using a lower frequency (eg LoRa) or optimizing your antenna setup to achieve your range. Sparkfun state " Heads up! We’ve been experimenting with various LoRa solutions and the bandwidth needed for the best RTCM (~500 bytes per second) is right at the usable byte limit for many LoRa setups. It’s possible but you may need to adjust your LoRa settings to reach the throughput necessary for RTK." Pages 16 & 17 of the above Note give some advise for Improving RF link performance. Good luck with your project!


Hey Richard,

Thanks for you reply.

I don’t have the Xbee board now but here is my connection plan. Please correct me if I was wrong. The sparkfun hookup guide says use the UART2 (2nd UART) is primarily used for RTCM3 correction. It has TX2, RX2, 3V3, and GND. Using the pin diagram, I should connect F9P TX2 to Xbee Pin 4, F9P RX2 to Xbee Pin 3, F9P 3V3 to Xbee Pin 2, and F9P GND to Xbee Pin 1.

Xbee 3 Pro seems a good option for me since it can reach 3.2km range.

Also, I think you also mentioned in other topic, Xbee needs to be configured to legacy 802.15.4 protocol. How can I do that? 1 Hz correction rate may be too slow for me. Is it possible to achieve 8 Hz?

I am going to use raspberry pi 4B for my station and rover.


I can’t see your connection plan?


I’ll try to help you further, but can’t accept any liability for any mistakes!

For an Xbee3, per page 29 of Digi XBee® 3 RF Module Hardware Reference Manual, I used the following pins: Pin1=Vcc, Pin2=UART data OUT (from rover’s Xbee3 to F9P UART2 RX2), Pin3=UART data IN (base F9P UART2 TX2 to Xbee3 pin3), Pin10=GND

My rover F9P UART1 TX/MISO pin is connected to my Pi Zero’s GPIO15/UART0 RX.

I followed the Sparkfun Xbee shield hookup guide which states " Heads up! Originally, this tutorial was written to configure an XBee Series 1 to communicate in transparency mode. However, this can apply to the XBee Series 3 module as long as you configure the firmware to the legacy 802.15.4 protocol. For more information, check out the Exploring XBees and XCTU tutorial."

You don’t say whether your base station is moving. Ublox’s moving base application note states on page 13 that the maximum update rate is 5Hz, otherwise page 4 of their datasheet shows the rate for other setups. Also, your navigation update rate may be limited by your setup, such as the number of messages sent via radio link, the speed of the link, baud rate etc. Read Ublox’s application note if you need further details.


I appreciate your kind help. I brought the Serial Radio Telemetry kit instead of Digi XBee for testing. I followed the sparkfun tutorial and connect the pins as listed below.

The base board can send out the correction message and the radio itself can receive it. However, the rover board can not receive the message. I started a new topic with trouble shooting details. Any comments?

  • Radio 5V - RTK 5V
  • Radio TX - RTK RX2
  • Radio RX - RTK TX2
  • Radio GND - RTK GND

Did you get your moving base RTK project (2021) to work?
I have restarted my project to see if I can get more reliable results.
Unfortunately my preferred Xbee 3 transceivers are not available now, so I’m looking into alternatives, and instead may try the nRF24L01 module instead.

1 Like