You can use the acceleration values from the accelerometer to measure the velocity and distance. There is really good paper (Implementing Positioning Algorithms Using Accelerometers) which explains the errors you get from the accelerometer and the techniques to get the velocity and position from the acceleration values.
Some pseudo code:
velocity[i] = (acceleration[i] + acceleration[i-1])/2 * interval + velocity[i-1]
distance[i] = (velocity[i] + velocity[i-1])/2 * interval + distance[i-1]
interval
is the time between acceleration/velocity[i]
and acceleration/velocity[i-1]
which is related to the update frequency of the accelerometer.
To increase accuracy you have to filter the acceleration values in the forehand. I've implemented such an algorithm on an iPhone 3GS and it worked pretty good. The accelerometer let's you measure distances of 30 cm with an error of approximately 1 cm. I didn't tested longer distances yet.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…