I want to implement an indoor localisation system using the sensors of a mobile device (accelerometer, compass, gyro) . This problem was already discussed here on several pl
I've developped the very same thing for Android tablets. When it comes to accuracy of the sensors, there are some huge differences between one and another. Recently released tablets tend to have better equipment.
Better in their accuracy, but also as there is an effort to provide sensors from the same constructor for given devices.
Let me explain. I've worked with Galaxy Tabs 7.0 and 10.1. GT7's sensors are provided by various constructors, which ends up in disparities related to polling frequencies. If you have an accelerometer from X and a gyroscope from Y, both being used at their largest frequency (which you do want for better precision), those frequencies won't match. One might be around 10 ms, the other around 15. And that's pretty annoying for calculations. For the GT10, all of the sensors are build by InvenSense on the tablet I used. InvenSense creates sensors and software solutions for inertial navigation (I recommend you to check their website and some of their papers). Not only their accuracy is great, but all of the sensors will work together, and especially when it comes to frequencies.
TL;DR - Prefer using the latest equipment (and probably the most expensive) for better accuracy and luckily adequation between sensors.
Developing an INS with such bad sensors is a tricky thing I can tell, but you can make it work.
Here are a few general notes to consider: The issue of time syncing sensor measurements is managed by Kalman filters very well. The KF is very powerful but will take some time to learn and implement. It's a very big leap.
With KF you can do data fusion of many types of sensors (rate gyros, accelerometers, and angle or position measurements of all types) at varying data rates.
The overall method is called Data Fusion. If the item you are tracking is moving, then the process is referred to as 'trajectory estimation'. The KF algorithm estimates the object's position, velocity, and acceleration over time, based on the all measurements and certain assumptions about the object's ability to move (the dynamic model).
For example, if the object is a cow, you can make certain assumptions about the speed, acceleration, and position (it will be on the earth's surface). If the object is a rocket, the assumptions about the possible movements will be different. Knowing the object's 'dynamic model' increases the accuracy of the trajectory estimation.
Another nice thing about the KF algorithm is it helps filter out sensor noise based on a 'noise model' and a sensor accuracy model. You can also model sensor biases, drifts, etc.