Probably you hate the GNSS chipset on your phone, which eats battery a lot and never ready to use when you need it. I had a GNSS course 10 years ago, at that time, if you need sub-meters coordinates.

  • The phone was not an option at all for positioning.
  • Elevation by GPS was thought shitty. We did only believe orthometric height by level measurement.
  • The credible differential GPS technique was RTK (Real Time Kinemetric). We need find a ground control point first and hope it is high enough, otherwise we need do transition by total station. Then setting up stationary GPS and radio antenna to broadcast corrections.

Somethings changed since 2018, 2019:

This changed with the launch of Android Nougat 7.0, which brought the ability to collect and process raw pseudorange measurements and navigation messages within an Android app. Android Pie 9.0 went further by providing developer options for testing real-time kinematic (RTK), or carrier-phase measurements.

The “dual-frequency” GNSS feature on newer Android devices has gotten a lot of attention lately, as using multiple GNSS frequencies is potentially a game-changer in terms of location accuracy — going from several meters of error (over 10 feet) to decimeter level (less than 1 foot).

The traditional positioning is done by code correlation, determining a pseudorange with limitations (3 meters for the C/A code and 0.3 meters for the P code, which is up to the chipping rate of the code used). The actually accuracy needs plus clock error and path delays.Carrier-phase measurement is calculated by carrier wavelength times the number of the cycles. So, the wavelength determined the error, which is 0.19 m for the L1 signal. It is possible improve to 1% of its wavelength by solving the problem called integer ambiguity .

I never expect that today we have so many GNSS satellites available. And satellite-based augmentation system (SBAS) is everywhere.

Amazing Tools for Exploring GNSS on Android

Here is a full list, barbeau/awesome-gnss: Community list of open-source GNSS software and resources (github.com).

Some Results

By using RTKLIB and raw measurements from smartphone, one of the processing results is here.

the resulting errors for the training set were 1.37 meters for the 50th percentile, 5.35 meters for the 95th percentile and 3.36 meters for the average of the two. rtklibexplorer (wordpress.com)

What I Have Got

I do not have enough time to do PPP process. By hardware estimation (android outputs the raw measurements with accuracy estimation at 68% confidence), the precision is 3.8m, 2.5m for the one of points, corresponding to horizontal and vertical measurements.

Screenshot from GPSTest

If the ground truth is error free, at the moment I look at my phone, the true error is 6.67/5.97 m. After 268 seconds (1 sample per second), on average, the true error is 6.72/5.45 m.

My location is surrounded by trees and a 5-floors-building.

If possible, I shall check the ground control point. I believe it is possible to achieve 1 meter accuracy of positioning with dual frequency smartphones.

What’s in the Future

In the future.

Machine learning and precision GNSS algorithms are expected to improve this accuracy and provide billions of Android phone users with a more fine-tuned positioning experience. Google Smartphone Decimeter Challenge | Kaggle