I recently described an experiment in which I mounted a Tersus BX306 receiver and a u-blox M8T receiver on top of a car and collected simultaneous data while driving around in a parking lot and on residential streets.
In this post I will describe a similar experiment, this time with a Swift Piksi Multi receiver and a u-blox M8T receiver. In the previous experiment, I had to use a CORS reference station as the base station for the Tersus receiver since I did not have a second full L2 receiver to use as a local base. I do have two Swift receivers however, so in this experiment I was able to use matched local bases for both rover receivers. The base receivers were both connected through an antenna splitter to a single dual frequency GPS500 antenna that comes in the Piksi evaluation kit and that was mounted on the roof of my house.
The two rover antennas were both mounted on top of my car. The Piksi was using a Tallysman 3872 dual frequency antenna and the u-blox M8T was using a Tallysman 1421 antenna, the same antennas I used in the previous Tersus/u-blox experiment.
Here are the raw observations for both rovers, M8T on the left, and Piksi on the right. Green indicates dual frequency measurements, yellow just a single frequency. The red ticks indicate cycle slips. The relatively slip-free region in the middle was collected in the parking lot with very open sky views. The data before and after this region was collected on the residential streets with more obstructed views and hence more cycle slips.
u-blox M8T Swift Piksi
As I mentioned before in my earlier description of the Piksi receiver, it uses the new civilian L2C code rather than the standard L2 code for the L2 measurements. This code is only available on the newer satellites, right now about half of them support it. Also, the Piksi firmware currently supports only the GPS satellites. In this particular data set, four of the six GPS satellites were broadcasting L2C codes which meant the Piksi is working with ten measurements from six different satellites. The M8T, on the other hand, with GPS, GLONASS, SBAS, and Galileo enabled had 19 measurements from 19 different satellites. In both cases, since they were matched receivers, all measurements were available for ambiguity resolution.
Like the Tersus receiver, the Swift Piksi can only process solutions real-time, it has no capability to post-process data. I configured the Piksi receiver to save the raw measurements to a USB drive on the receiver and to save the real-time solution in NMEA format to a PC connected to the rover over the serial port. I set up NTRIP servers for the base stations and used a hot spot on my cell phone for the real-time data link between receivers as I described in this post. I then compared the Swift real-time solution to RTKLIB post-processed solutions of the Swift measurements and the u-blox measurements. I also did run the u-blox solution in real-time and believe it was nearly identical to the post-processed solution I show here but unfortunately I overwrote the solution file with a post-process run so wasn’t able to compare them directly. I did verify that the real-time u-blox solution had nearly 100% fix before I lost it. I also tried to re-run a simulated real-time solution with RTKNAVI using the time-tag files but unfortunately it looks like some of the recent changes ported in from the release code have broken this capability. I need to look into this further but it looks like while attempting to fix some existing incompatibilities in the tag files between the 32 bit and 64 bit versions of RTKLIB, the 32 bit version was broken. In theory, the real-time solution and the post-processed solutions should be nearly identical, the only difference being the slight delay of the base data over the cell-phone link, so I don’t expect this to have a significant affect on the results.
Given that the M8T has nearly twice as many measurements to work with as the Piksi, I would expect the M8T results to be better than the Piksi and that indeed is the case. The Swift internal RTK solution did a good job when the car was in the parking lot with nearly unobstructed views as you seen in the middle plot where the zigzag section is all fixed (green). On the residential streets, the solution bounces back and forth between fix and float. It is interesting that when the internal solution reverts to a float solution, it becomes quite noisy relative to the RTKLIB float solution as you can see in the z-axis. The RTKLIB solution for the Piksi data is not as good as the internal Swift solution. This may be a combination of an imperfect match of cycle-slip definitions between Swift and RTKLIB and RTKLIB not taking full advantage of the dual-frequency measurements.
I don’t think there were any real surprises here. Until the Piksi receiver adds firmware support for the other satellite constellations and until more GPS satellites support the L2C codes, the Swift receiver is going to have difficulty matching the results of receivers with more measurements. In the long-term, the L2C code is a good choice, especially for moving rovers because it is a stronger signal and a more robust code than using the encrypted L2 code, but in the short term I’m not sure I would recommend this receiver, at least for this sort of application. It is still the least expensive dual frequency receiver available as far as I know, so it may still be the right choice for other applications.
Like my previous comparison, this was all based on a single set of data and is not intended to be a comprehensive analysis, more of a first impression. If anyone disagrees with any of this or can add more details, please respond in the comment section below.
If anybody would like to compare the data themselves, I have uploaded the data and the config files I used to process the data to the “Sample Data Set” section of my website.