Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I find the velocity using accelerometers only?

Using only the phone's (Android) built in accelerometer, how would I go about finding its velocity?

I have been tinkering with the maths of this but whatever function I come up with tends to lead to exponential growth of the velocity. I am working from the assumption that on startup of the App, the phone is at a standstill. This should definitely make finding the velocity (at least roughly) possible.

I have a decent background in physics and math too, so I shouldn't have any difficulty with any concepts here.

How should I do it?

like image 676
Mark D Avatar asked May 22 '11 01:05

Mark D


People also ask

Can you get velocity from an accelerometer?

While the temporal integral of acceleration is velocity, and the second integral is position, it is very difficult in practice to use an accelerometer alone to find velocity and acceleration.

What can you calculate with an accelerometer?

Accelerometers are devices that measure acceleration, which is the rate of change of the velocity of an object. They measure in meters per second squared (m/s2) or in G-forces (g).

How do you find velocity from IMU?

Velocity = V(inital) + a * t So to get velocity you would (perhaps) take 10 readings in 1 second (for all 10). Then multiply the average acceleration * 1 second for velocity in whatever unit system a was in. The next 10 readings will result in a new velocity that will be added to the above velocity result .

How do you calculate acceleration from an accelerometer?

An accelerometer actually measures normal force or restoring force which we equate to acceleration using the formula, F=ma.


2 Answers

That will really depend on what the acceleration is and for how long. A mild, long acceleration could be measurable, but any sudden increase in acceleration, followed by a constant velocity, will make your measurements quite difficult and prone to error.

Assuming constant acceleration, the formula is extremely simple: a = (V1-V0)/t . So, knowing the time and the acceleration, and assuming V0 = 0, then V1 = a*t

In a more real world, you probably won't have a constant acceleration, so you should calculate Delta V for each measurement, and adding all those changes in velocity to get the final velocity. Always consider that you won't have a continuous acceleration data, so this is the most feasible way (i.e, real data vs integral math theory).

In any way, even in the best scenario, you will end up with a very high error margin, so I do not recommend this approach for any app that truly depends on real velocities.

like image 80
Aleadam Avatar answered Sep 23 '22 21:09

Aleadam


First, you have to remove the acceleration due to gravity from the accelerometer data. Then it's just a matter of integrating the acceleration to get the velocity. Don't forget that acceleration and velocity are properly vectors, not scalars, and that you will also have to track rotation of the phone in space to properly determine the orientation of the acceleration vector with respect to the calculated velocity vector.

like image 37
Anomie Avatar answered Sep 23 '22 21:09

Anomie