We now have several RTK GPS options available
One of the things that will influence the quality of your fix (FLOAT vs FIX) is the distance to your BASE, and satellite matches between your ROVER and the BASE.
There are various services out there that will provide you with RTCM corrections via NTRIP. Generally their location accuracy will be high, but they might only have GPS or GPS+GLO or perhaps only L1, or L1/L2, but not L5 and so forth.
If you’re able to get FLOAT but your FIX never happens, or is spotty, and you’re fairly sure the problem is too-long of a baseline, or a lack of overlapping satellite coverage, you might setup a local BASE to improve your chances.
In my case, I had two services available, each about 100 miles away. I’d get RTK FIX from time to time, and FLOAT a lot, but I wanted FIX and it wasn’t reliable.
Those services also didn’t include Galileo and sometimes not even L2 observations.
In any case, I setup my own base and things improved.
Seemingly by default, most bases will “survey in” and establish their own sense of location, and then you get a good RELATIVE RTK fix against the BASE. This is often good enough, and if you’re moving around from site to site, this is most likely as good as you’re going to get with a reasonable budget.
But if you’re mostly in one location, and you need repeatable results - even after a power outage - you need to site your BASE as accurately as you can.
You could hire a surveyor.
Or, the government of Canada offers a PPP service
You log a few hours or a few days of observations, send them in, and you may get your location to within .003m lat/long.
24 hours is good, 48 hours is better.
With an F9P, using UCenter, have it send out the UBX RXM-RAWX and UBX RXM-SFRBX messages.
RTKLIB Explorer covers a lot of this as well.
You can log via UCenter, or I’ve had better luck using the RTKLIB tool “str2str” on a Linux computer (which also includes doing this on a Raspberry Pi, and even on an OpenWRT router with a USB port)
i.e.
str2str -in serial://ttyUSB0:1152000#ubx -t 1 -out file://tmp/baseLog.gps
Log 24 to 48 hours.
Use RTKCONV from the RTKLIB package to convert the RAW UBX captures to RINEX.
You may opt to use an interval, or box it by start/end date - the compressed RINEX needs to be under 300MB to upload to the service.
Upload to the service, await your results. Check the accuracy, and if you’re satisfied, you can then go back into UCenter and establish your fixed position. (see TMODE3)
Entering the fixed position is a little odd since you use the extended/high precision fields for entering Lat/Long and it takes me a few tries to get it right. If I recall, the high-precision fields go from -99 to +99 rather than representing a direct fraction. It modifies the other high precision field for the last little bit.
I have two bases using an F9P. I have another with a UM980 tri-band receiver.
I wasn’t able to figure out how to get the right RAW data out of the UM980 (though I see now maybe I could do it with the RTCM1077 and 1087 messages) so I resorted to using an F9P to capture the initial data to get the position, then swapped the UM980 into place and putting it into fixed mode with the coordinates obtained with the F9P - without changing the antenna, of course.
After that, I’m able to use str2str to make the RTCM information available.
One key thing I’ve learned is - unless your RTKLIB installation has some new code that I don’t - to try to make the output a pass-through, rather than having RTKLIB try to convert the UBX messages into RTCM since in many ways the F9P and UM980 have a few more messages than my copy of rtklib understands.
str2str -in serial://ttyUSB0:115200#rtcm3 -t 1 -out tcpsvr://:9000 -out ntrips://someserver:2101/mymount
This makes my RTCM available on port 9000 for anything on my local network. Or I can use the NTRIP URL if I have an NTRIP server. Remove the ntrips portion if you don’t have an NTRIP server to use.
Put the NTRIP or the TCP client information into Mission Planner for the RTK corrections.
Or, if you have a companion computer, like I do, you can use str2str to feed the corrections to your GPS if you have a good network connection.
str2str -in ntrip://serveraddress:2101/MOUNTPOINT -out serial://ttyACM0
or
str2str -in tcpcli://serveraddress:9000 -out serial://ttyUSB0
Put that into your startup script and have your companion computer supply your GPS with corrections upon startup - you will, of course, need a second port on the GPS to do this, and it needs to accept RTCM on that port.
My F9Ps are connected to the flight controller via serial, leaving the USB port available to plug into the Pi, which becomes ttyACM0
If your wifi coverage/network is good between the ROVER and BASE this gives you a good high bandwidth connection, and frees your telemetry radio link for other things.