Question

I'm developing an AR app for android and I need a really accurate position (under 1m). The app is pedestrian based (outdoors) and needs the location in real time. I'm aware that the problem is probably a really hard one, but hopefully others have come across a solution to this.

I've already looked into Kalman filters and extended Kalman filters, but so far I haven't found a solution that I have been able to use or adapt. I think that a kalman filter is probably the direction I need to go.

Right now i'm using the raw gps data to set my location, but this is too inaccurate and can move around or even jump by about 5-10 meters when the device is standing still in one place.

So my question is: while I am using now the raw unfiltered gps data to get a position, how would I need to filter it (kalman? extended kalman?) and which sensors would i need to use (gps position? gps speed? accelerometer?) to get the most possible accurate location pedestrian outdoor location.

UPDATE: i need to update my question, since it's not possible to do what my initial question was, getting a sub 1-meter accuracy on tablet/phone gps. my question now is: how can i apply filtering so that subsequent gps position measurements stay within a manageable distance. e.g. so that when i go 10m north with my device that my gps also measures that i went 10m north +/-1m (10%) from my initial position and not the jumping/moving around that the gps measures.

OTHER TIPS

In real-world applications, a GPS system cannot give you a precision/accuracy much better than 5 - 10 meters, in particular if you use a smartphone or a tablet as a receiver. Have a look at the Wikipedia pages regarding GPS for a detailed explanation:

https://en.wikipedia.org/wiki/Gps

https://en.wikipedia.org/wiki/Error_analysis_for_the_Global_Positioning_System

https://en.wikipedia.org/wiki/GPS_augmentation

There isn't any way to improve this accuracy using filtering or other mathematical "data massage" only. You have to rely on some auxiliary positioning system (that is: an auxiliary source of geographic reference data).

The most widely used auxiliary positioning system is the "network" one. It uses both cellular phone antennas and wi-fi antennas as auxiliary reference points. This approach is already used by Google Maps and other services, as well as by Android, Apple and Windows 8 smartphones and tablets. You just have to select it amongst the available location providers in your code.

Wi-Fi/Cell-based systems rarely can give you a precision better that a few meters ("room-level accuracy"), even if you apply a massive amount of data processing/filtering.

If you want to use a different system, you can evaluate inertial navigation systems or geomagnetic navigation systems (like Indoor Atlas: http://www.indooratlas.com/).

Writing an inertial navigation system (INS) is not easy. You can find some description on the web but most likely you will have to write all of the code by yourself. INS usually cannot give you a precision better than GPS.

Alternatively, you can buy a commercial, ready-to-use geomagnetic system like Indoor Atlas. Geomagnetic systems can be very precise. Indoor Atlas claims a precision of few centimeters.

If you are looking for a wi-fi/cell-antennas-based system, alternative to Google Maps, you can have a look at Combain:

http://combain.com/

http://location-api.com/

I had a very good experience with WiFiSLAM, as well:

http://wifislam.com/

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top