# Detection of linear acceleration vs rotational velocity/acceleration

I am wondering, how do you differentiate between linear acceleration and rotational velocity and acceleration for IMU? A rotational velocity or acceleration will still appear to the accelerometer as a time varying acceleration.

The IMU itself cannot distinguish between "true" linear acceleration and "fictitious" (Coriolis) linear acceleration induced by rotation of the IMU coordinate frame with respect to an inertial frame. You must make that distinction in your choice of models. Your estimator will represent your robot's acceleration in some way in its state, and the model that predicts an IMU reading from your state must take into account this Coriolis effect. As long as you are correctly modeling the IMU given your choice of state, your estimator should figure things out "for you".

Example

Consider for instance an estimator (e.g. a Kalman filter) estimating the IMU's 6DoF pose, along with first and second derivatives, expressed as follows (in the language of Lie groups): \begin{align} x(t) &\in \mathrm{SE}(3) \\ \dot x(t) &:= \left. \frac{d}{dh} \right|_{h=0} \log\left( x(t + h) x(t)^{-1} \right) \in \mathfrak{se}(3) \\ \ddot x(t) &:= \frac{d}{dt} \dot x(t) \in \mathfrak{se}(3). \end{align} where $$x(t)$$ is the transformation from world-frame coordinates to IMU-frame coordinates. The first derivative takes the form $$\dot x(t) = \begin{bmatrix} \omega(t) \\ v(t) \end{bmatrix},$$ where $$\omega(t)$$ is the IMU-frame angular velocity and $$v(t)$$ is the (negative) IMU-frame linear velocity, each expressed in the IMU frame. The second derivative has the form $$\ddot x(t) = \begin{bmatrix} q(t) \\ a(t) \end{bmatrix} = \begin{bmatrix} \dot \omega(t) \\ \dot v(t) \end{bmatrix}.$$ In this setup, $$a(t)$$ is the "true" linear acceleration (not taking into account the Coriolis acceleration); it is not the quantity that the accelerometer measures, which is the second derivative of the IMU frame origin in the world frame, rotated into the IMU frame. Note that if the IMU is revolving around the world frame at a constant angular and linear velocity, then the IMU will read positive acceleration orthogonal to the direction of motion, while $$a(t)$$ will be identically zero.

In order to perform estimation using the IMU, you will need a model for predicting what value the gyro and accelerometer will take given an arbitrary state. The gyro model will be simple: $$\mathrm{gyro}_{\mathrm{pred}}(t) = \omega(t).$$ But the accelerometer model must take into account the IMU frame's angular velocity: $$\mathrm{accel}_{\mathrm{pred}}(t) = -a(t) + \omega(t) \times v(t) + g_{\mathrm{IMU}}$$ (where $$g_{\mathrm{IMU}}$$ is the gravity vector rotated into the IMU frame).

Your filter will then distinguish the true from Coriolis acceleration "for you" by producing an estimated state maximizing the likelihood (or something similar) of your observed IMU readings.

When you buy an IMU from a manufacturer, it provides the guidelines on how to read this sensor (IMU). For clarification, IMUs only provide linear accelerations, not the rotational ones. Rotational velocities are obtained from the gyroscope embedded inside an IMU. These velocities are then integrated to obtain the orientation. Some IMUs come with a magnetometer that are able to provide absolute orientation.

• If your IMU isn't centered in the middle of your drone, rotation will look like acceleration. Which is why it's not clear to me how the IMU can distinguish between linear acceleration and rotation. Same applies to the gyroscope I think(though I have no idea how gyros are designed within an IC). Aug 6, 2020 at 7:00
• What do you mean by "rotation will look like acceleration"? Aug 6, 2020 at 11:46
• The imu always gives data in its frame of reference, not of the thing it’s mounted on. It’s up to the designer to deal with that. Aug 6, 2020 at 18:47
• @Franky, e.g. rotational acceleration (w) * arm_length_of_IMU = linear_acceleration_at_IMU see for reference: scripts.mit.edu/~srayyan/PERwiki/… Aug 23, 2020 at 16:34