GnssLogger? Many surveyors are familiar with the U.S. National Geodetic Survey’s Online Positioning User Service (OPUS), a cloud-based processing service that allows them to upload a Receiver-Independent Exchange (RINEX) file and receive results in minutes. Soon, they may be able to achieve centimeter accuracy by accessing raw GNSS measurements on their Android phone.
Google announced in May 2016 that, following a complex multi-year effort in collaboration with its GNSS partners, it would begin to give application developers access to these measurements and make them available to apps in the Android N operating system, which was released later that year. This gave users access to pseudoranges, Dopplers, and carrier phase on a phone or tablet.
“Android’s foundation is open-source software and the open-source community,” Steve Malkos, technical program manager at Google, wrote a few months later. “So, it was a natural development step for us to provide these raw measurements to the community.”
Google has since worked with its partners to perfect this system through several generations and hundreds of models of phones. Android’s next version, Android O, included new GNSS measurement features, such as support with GNSS measurements for the SBAS, GLONASS, QZSS, BeiDou, and Galileo constellations in addition to GPS; measurement support on the L1 and L5 and other frequencies; and reported accumulated gain control (AGC) jamming detection.
Additionally, Google developed a phone app to collect the raw GNSS data and a companion desktop program to analyze them and produce a series of colorful plots. The phone app, called GnssLogger, has been available through an Android site for developers and will be on the Google Play Store later this year.
Google has also released its source code. The app logs the measurement data in comma-separated values (CSV) text format and sends the file via the Internet to an e-mail address, a Google Drive account, or some other file-sharing facility selected by the user. Developers can use the app as-is to log the GNSS measurements to a text file or they can use the source code to incorporate these measurements into their own apps.
Google’s Android GNSS Analysis desktop program, now in release v22.214.171.124, provides advanced processing and analysis tools for raw GNSS measurements retrieved from Android devices. It provides interactive plots, organized into three columns, showing the behavior of the RF, clock, and measurements. The user can see the behavior of the GNSS receiver in detail, including receiver clock offset and drift to the order of one nanosecond and one ppb and measurement errors on a satellite-by-satellite basis. This kind of sophisticated analysis was previously available virtually only to chip manufacturers.
The program provides an interactive control screen for manipulating the plots, as well as automatic test reports of receivers, evaluation of the API implementation, received signal, clock behavior, and measurement accuracy. In each case it will report “pass“ or “fail“ based on the performance against known good benchmarks. The program can be used to convert the Android raw measurements to RINEX formats. The next release of the phone app will allow users to log the GNSS data directly to RINEX.
Achieving High Accuracy
Collecting pseudorange measurements is not enough to turn a smartphone into a high-accuracy positioning tool. That requires making use of carrier-phase measurements, which are at least 100 times more precise and have been available in commercial GPS receivers since the 1980s.
Using carrier-phase measurements, in turn, requires resolving the carrier-phase ambiguity, which is a constant value provided that the receiver continuously tracks each satellite. This is problematic when the receiver’s view of the sky is obstructed by buildings, trees, or the local topography.
As surveyors know, ambiguity resolution enables centimeter-level accurate positioning by transforming carrier-phase measurements into very precise range measurements. However, it requires an initial position to be known to within a decimeter or better, which is not possible with the quality of pseudorange measurements obtainable with smartphone antennas. One option, though perhaps inconvenient and expensive, would be to use a much better external antenna, but no one has yet developed one for use with smartphones.
Alternatively, one could average measurement noise for several minutes while collecting continuous carrier phases measurements. However, that requires getting around the problem of “duty cycling” the GNSS receiver, which is a technique that smartphone manufacturers use to keep it from draining the phone’s batteries: they turn it on for a period—say, 200 milliseconds—then off for a longer period—say, 800 milliseconds—then on again, and so on. Android P with a developer option allows users to disable duty cycling.
Now that phones, too, can collect these measurements, they can also take advantage of multiple frequencies. In addition to the L1 frequency they all currently use, they increasingly have access to the new L5 frequency, which is supported by the GPS, Galileo, BeiDou, QZSS, and IRNSS GNSS constellations. This greatly increases the speed of convergence to carrier-phase accuracy.
The biggest remaining obstacle to achieving positional accuracy with a smartphone is the quality of the low-cost GNSS antennas and chips they contain, as opposed to the high-quality antenna and receiver components used in survey-grade GNSS receivers that track signals on multiple frequencies and enable them to achieve centimeter- and even millimeter-level accuracies.
What the Apps Do
The GnssLogger and Android GNSS Analysis tools enable manufacturers to improve their devices’ design and GNSS performance by seeing in detail how well the GNSS receivers are working in each device design. They are also of great value to researchers and app developers. For surveyors, they are of interest because of the possible future developments they portend.
The tools are not intended to generate the best possible position, although an expert user may be able to achieve that by manipulating all the available features. Rather, they make it possible to examine in detail the workings of the phone’s GNSS receiver.
One thing they reveal is that most GNSS receivers very often get bad measurements, which they filter out before generating the position, or (in the case of survey receivers) before generating measurements to output in RINEX files. So, users only used to seeing the result may be surprised at what they see when they use these tools to dig into the raw data.
However, using these tools to remove the bad measurements proves that phones can get decimeter accuracy. Professionals can spend days using the Android GNSS Analysis tool to do such things as deselect satellites one at a time, or by constellation, change mask angles, and so on.
Results of tests conducted by Google demonstrate that the use of carrier-phase measurements and careful modeling of the error sources affecting GPS observations make it possible to measure the displacement of a smartphone at the centimeter level. Surveyors should cheer and start planning to make the most of this new capability, as soon as it becomes fully available.
Sidebar: Using the Apps
I downloaded GnssLogger from Github and installed it on my Google Pixel 4XL smartphone. I downloaded Android GNSS Analysis from a Google site for developers and installed it on my Acer 1080 laptop which is running on Windows 10. I followed closely the program’s “Installation and User Manual“ with regards to where to put the files and a few other technical details. The installation includes MATLAB Runtime, which took a long time to download.
I used GnssLogger (See Figure 1) to collect about five minutes of data in the middle of a tennis court, then uploaded the log file it generated to DropBox and downloaded it from there to the appropriate folder on my computer. I opened Android GNSS Analysis, navigated to my log file, opened it, then clicked on the program’s “Analyze and Plot” button.
The program generated 12 plots, showing the behavior of the RF, clock, and measurements. In particular, the plot of the WLS relative position from the carrier phase accumulated delta range (ADR) showed that the points were all within about a decimeter of each other. (See Figure 2)