How can I determine linear motion in 3D using a 3-axis accelerometer?

AI Thread Summary
Determining linear motion in 3D using a 3-axis accelerometer requires understanding both acceleration and orientation. While the total acceleration can be calculated using the formula for the square root of the sum of squares of the axes, the accelerometer alone cannot distinguish between different motion scenarios, such as being tilted or accelerating in various directions. To accurately capture linear motion, one must transform the acceleration vector from the accelerometer's coordinate system to the world coordinate system, typically using quaternion multiplication for rotation. Calibration is essential to ensure accurate readings, particularly when stationary, where the accelerometer should measure 9.8 m/s² in the negative z direction. Understanding these concepts is crucial for effectively interpreting the data from a 3-axis accelerometer.
mark2468
Messages
12
Reaction score
0
Hi.

I have a problem using 3-axis accelerometer. I understand that the total acceleration is the square root of (x^2 + y^2 + z^2) but I cannot determine the direction of the acceleration.

Say the device is at 45 degrees and is moved straight up, how can this vertical motion be detected.
I can determine the angle/tilt of the device using trigonometry but cannot determine the linear motion in 3d. How can this be achieved, or is there any basic formula available.

Thanks,

Mark.
 
Physics news on Phys.org
Accelerometer cannot determine motion at all, and will only measure acceleration relative to its own orientation. It cannot, for example, tell you the difference between being horizontal and accelerating horizontally, or being tilted and accelerating straight up. Both will give you the same acceleration in X, Y, and Z directions.

If you need to know acceleration in the world-coordinates, you need to know orientation relative to world.
 
You'd probably be best off leaving the linear motion as a vector, but if you want angles, you could just convert to http://en.wikipedia.org/wiki/Spherical_coordinates"
 
Last edited by a moderator:
Thanks for the reply's.

I do know the orientation relative to world, the problem is linear acceleration. Its easy get the acceleration in one direction if the other two don't move but what if it moves up at an angle or starts at an angle and moves straight up or straight across linearly.

"You'd probably be best off leaving the linear motion as a vector"

I am unable to determine the linear motion, how is this achieved??

Thanks again,

Mark.
 
If you know orientation, what's your problem? Are you simply asking how to transform a vector from one coordinate system to another? That is, take the x, y, z relative to accelerometer and transform to x, y, z relative to ground?
 
Well if you represent the accelerometer's orientation as a unit vector, you can just perform a rotation on the acceleration vector opposite the rotation of the orientation vector. It winds up being easiest to do as quaternion multiplication
 
The problem is that I know the angle relative to ground (45 degrees in this case) but when the device is moved directly up I am unable so capture this as linear acceleration in the z direction because all 3 axis change.

This may seem trivial for some people but i am new to this.

Mark.
 
Lets say the 45° is rotation of Z axis towards X axis. Then:

a_x = \frac{a'_x+a'_z}{\sqrt{2}}

a_y = a'_y

a_z = \frac{a'_z-a'_x}{\sqrt{2}}

Where a' are the accelerations reported by accelerometer. Make sure to calibrate your axis appropriately, you should be measuring 9.8m/s² in negative z when the thing isn't accelerating.
 
Back
Top