# Axis of rotation via IMU

Using an IMU (gyro, accelerometer and magnetometer), as found in most smartphones, can I detect the differences between tilting the device, say forward, along different (parallel) axis positions?

To clarify, if the axis of rotation is far from the sensor, the the motion contains a translational component.

Can the distance and position of this axis be extracted from the IMU data and if so how?
Is there some data fusion algorithm that can do all this?

Yes, in theory, from the gyro information. The accelerometers will give you orientation information, but won't help you interpret where the axis has been translated to.

Keep in mind though, that data from the gyros are time based and you will only have accurate information for the moments that you actually sample the data. I believe it will be difficult to get accurate enough info without using a very high sampling rate, but theoretically it is possible.

• Is there some data fusion algorithm that can do all this robustly? How would I integrated the gyro data to make the distinction and calculate the axis location? – Adi Shavit Aug 29 '15 at 9:14

I don't think that you will be able to do this, given the limitations of an IMU. The main limitation being any kind of position or translation data.

With angluar rotations you have the equations shown in the included image (image from here)

From the IMU, you can get angle $\theta$ and you can get angular velocity $\omega$ through some calculations. But to go from there to radius ($r$-this is want you want I believe) or linear velocity $v$ you would need to know arc length $S$. Unfortunately, this is a piece of translation data and that is difficult (at best) to get.

Overall, it seems quite common for users to try and figure out a way to get any kind of positional/translation information from an IMU, but it just isn't the right tool for that job.

EDIT (More details based on comment):

$\theta$ about an axis of rotation is the same no matter how far away (radius $r$) you are from said axis of rotation.

You have two equations available for $\theta$,

$\theta$ = $\omega$ * $t$ (this you can get with the gyro reading and time)

and

$\theta$ = $S$/$r$ (you can directly read $\theta$ from the accelerometers)

Setting those equations equal,

$\omega$ * $t$ = $S$/$r$

Now you only have one equation, but two unknowns. That is not solvable without making an assumption or knowing something else about the system.

• The gyro data tells me the rate of angular change ($\omega$ above?), and the accelerometer the tilt ($\theta$). At least in principle, shouldn't these match only at a particular radius $S$? – Adi Shavit Sep 1 '15 at 5:47