Selecting a GPS receiver

[Update 11/25/16:  See here for a more recent version of this post]

The first thing you will need is a GPS receiver that provides access to the raw GPS position signals;  pseudorange and carrier phase.  There are  only a few low cost GPS chips that provide these signals.  I chose the Ublox receivers because they seem to be the most available and lowest cost option out there, and I was able to find examples of other people successfully using them with RTKLIB, including Tomoji Takasu, the author of RTKLIB (see here).  The NEO-M8 series is the latest generation from Ublox.  The NEO-M8N chip from this family does not officially support output of the raw GPS signals but can be configured to do so with undocumented and unsupported commands over the serial port.

I started with two receivers, the first from CSG.  This is the receiver used by Tomoji in his work in the link above.  It is available for $65.99 + $19.99 for an antenna.  With shipping this came to $92.98.  I do not intend to use this receiver in my final project but bought it for comparison to the lower priced options described below.

UBLOX NEO-M8N GPS GNSS receiver board with SMA for UAV, RobotsHigh performance active GPS antenna

The second receiver is marked as a GY-GPSV3-NEOM8N. It is also use an M8N receiver and is designed for use on drones.  It is available from several suppliers, I bought it on Ebay for $25.78 including antenna and shipping.  This board came with a battery for storing the GPS configuration when the board is powered down.  The CSG board included a battery holder but not a battery.

There is also a version available with an on-board magnetometer (GY-GPSV5-NEOM8N) for an additional $5.  I have bought one of these but have not yet had a chance to test it.  I intend to use these receivers from Ebay with their included antennas for my project given their very low cost.

Both receivers have given me good results with RTKLIB that appear to be quite similar, but I hope to do a more detailed comparison in the future.


Update: 5/18/16

For those of you trying to get the best results you can today for a reasonably low price, the ultra-low cost options I have chosen are probably not your best choice.  I’ve cut and paste below some comments from JB that he made on a more recent post.  He makes a good argument for buying the Ublox NEOM8T instead of the NEOM8N, and also suggests spending a little more on the antennas.  I would agree with almost everything he says and am in fact considering switching to the M8T myself at some point.

From JB 5/16/16:

Very impressive work. Thanks for sharing.

I know you are focusing on the cheapest possible equipment (~$30 for receiver and antenna), but if that can be increased to $100 or $150 the capability improves quite a bit and we are still well below the cost of the least expensive dual frequency receivers. If this is too high a price for your project perhaps it may not be for others.

Improving the antenna is often mentioned and those on your typical $30 combo are pretty bad. Even a $10-$15 one like those supplied with the Ublox evaluation kit will help a lot. A $40 or $80 Tallysman will help a bit more. A $1000 NovAtel Pinwheel will be even better, but we’ve completely left the low cost realm. I would really suggest upgrading the couple dollar patch antenna typical of the cheapest equipment.

The other thing to improve of course is the receiver. Starting at several hundred dollars you can get a better performing one than the Ublox, but this is getting expensive. For ~$80 a Ublox M8T receiver can be obtained. This has a major advantage over the M8N as signals from GPS, Glonass, Galileo, and SBAS can all be used for fixed integer work with RTKLIB. With the M8N only GPS can be used.

As a simple example to show the benefits of lots of satellites for fixing the integers I recorded 90 minutes
of static data with two M8Ts attached to Tallysman antennas on a roof of a vehicle under ideal receiving conditions. They were set to record GPS, Glonass, Galileo, and SBAS data at a 1 Hz rate. I then ran the data through RTKPOST chopping it up into 30 three minute segments and attempted to fix the integers in Kinematic mode with a ratio of 3.

First, using only GPS sats (6-8) a fixed integer solution was obtained (within 3 minutes) in 20 of the 30 trials. One of these was incorrect. The average time to a fix for those that did was 59 seconds.

Then the Glonass sats were added (13-15 total sats) and a correct fixed integer solution was obtained every time. On average it took 10 seconds.

Then Galileo and SBAS sats were added (20-22 total) and a correct fix was obtained every time with an average of 1 second to get there.

Of course this data is correlated and real world kinematic performance won’t be as good, but the idea is to show the relative improvement that large numbers of satellites can make.

From JB 5/17/16:

My comments were really more for those who want to try low cost RTK with RTKLIB the way it is now. There are people relatively new to this watching your site and we agree that if they can afford it the M8T route would be the way to go.

I do think you can get more out of an M8N with some software mods (which you are doing), but since Ublox doesn’t support raw data from it – and they’ve already changed things as to enabling raw data with their latest firmware – the M8N seems to be at a dead end for high accuracy work. As you mentioned though, for your purposes it has value.

Of course I haven’t tried every cheap patch antenna out there, but in general you get what you pay for. Under really good conditions I’ve done kinematic work with a $5 antenna, but a $40 one will be a bit more robust. For one of my M8N’s I got a good deal on a Tallysman 1421 antenna ($29) to replace the stock patch and some before and after tests near a pond and metal sided building (multipath) showed substantial improvement. When doing kinematic work, especially RTK, every little advantage helps.

When I added SBAS sats in the test I mentioned that was just the pseudorange and carrier data. I don’t think RTKLIB will use any other SBAS info when differencing. Again, just showing that more sats are better.