Tuesday, February 12, 2013

Differential GPS via WiFi

Navigation and location awareness are an issue I've been thinking about for some time now, with regards to small robotics. GPS, by itself, is not accurate enough for my purposes (feedbot to take scraps to the chickens, lawnbot for mowing the lawn) but there may be ways to increase its accuracy.

I expect that we'll see great improvements in the near future as GPS is still a relatively young technology (the 1990 gulf war was the first time it was widely used in a conflict) and we've already seen the price of GPS receivers dropping significantly. This gps tracker, for example, is less than $USD25.

Differential GPS (DGps) is commonly used by surveyers, marine navigators and aircraft as a way to increase the accuracy of GPS from a nominal 15m to more like 100-150mm. This is achieved by using ground based station, at a known position, to broadcast corrections. These corrections are the difference between the known position and the position calculated by the GPS.

Based on the assumption that all receivers in a given area have the same positional error, receivers in unknown locations can correct their calculated position by knowing the error caculated by the fixed station. For example, if the known location of the fixed station differs from its received GPS location by 3m to the east, a receiver at an unknown location can correct its position by 3m to the east to calculate its actual position.

DGps equipment is relatively expensive and I won't be buying it anytime soon but I want to experiment with my "poor mans" version of DGps using equipment I already have. If I connect a GPS to my PC and build a web service that exposes the difference between the location the GPS is calculating with an arbitrary position I'll have my ground based reference station. I can then write an Android application that receives the location from the built in GPS, queries the web service across the Wi Fi, applies the correction and displays the result I'll have a simple DGps setup. Will it be any better than using a GPS by itself? I have no idea. I suspect my understanding of DGps is a bit simplistic but it doesn't sound like a difficult task to build the system and find out.

The first step is to confirm my assumption that all GPS receivers in a given area have the same positional error. I'll confirm this by placing my laptop GPS receiver next to my phone and see what the difference in displayed position is.