Limits of dead reckoning using MEMS sensors
What exactly are they?
  


The error sources include zero-offset (bias) and scale errors (which tend to vary slowly) and noise. The prices of MEMS sensors vary from less than $10 to over $1000, and the magnitude of the error terms covers a wide range, depending on the quality of the sensor.

The big problem is that integration is usually required to get from the sensor value (acceleration, angular rate) to the desired value (position, angle). All of the error sources are compounded &mdash; growing with time &mdash; when integrated. The value of the data for dead reckoning decays with time, with cheap sensors giving you at most a few minutes of useful data and high-end sensors being good for maybe a few hours.


  
  What can I do to improve these limits?
  


As you have already found, the best way to get rid of the growing integrated errors is to combine the sensor data with other independent sources of data that don't have the same kinds of errors. For example, GPS can give you an absolute position value that doesn't drift long-term, but has a relatively large "noise" component. You can use this data to estimate the bias and scale errors of your accelerometers, which allows you to correct for them in real time. It also allows you to cancel out the "random walk" created by the sensor noise. A Kalman Filter is one common method used to model the system (including the sensor error terms) and combine the data together to come up with an optimal estimate of the system state at any point in time.

Another example is to use the "gravity vector", as measured by the accelerometers, to cancel out the angular drift of the gyros. The trick here is to know exactly when you have a valid gravity vector; i.e., the system is not accelerating in any direction. Various heuristics (e.g., "zero update") are used to accomplish this. A magnetometer can also be used to measure gyro errors, even if you don't know the absolute direction of the magnetic field &mdash; as long as you can assume it's constant.

Optical sensing is another way to get a drift-free velocity, angle or position estimate, but the image processing that's required can require a lot of CPU (or FPGA) cycles, and the development of such a system is quite complicated.