- #1
ChuckFinley
- 2
- 0
During the course of working with inertial measurement units (IMU) I have run into a problem.
The issue is that an IMU reports accelerations relative to the IMU's orientation rather than it's initial orientation. The IMU's initial orientation is the identity quaternion (1,0,0,0). All changes in the IMU's orientation will be relative to the initial orientation.
With this in mind, I have tried to create a way to map the accelerations of the IMU's specific orientation to that of it initial orientation. e.x. If the IMU is rotated but not accelerated the acceleration in the initial orientation should be constant.
So far I have this.
Let [itex]Q_{i}[/itex] be the quaternion that represents the IMU's initial orientation (1,0,0,0).
Let [itex]Q_{c}[/itex] be the quaternion that represents the IMU's current orientation.
Let [itex]R[/itex] be the quaternion that describes the quaternion that represents the quaternion required to rotate [itex]Q_{c}[/itex] to [itex]Q_{i}[/itex].
Let [itex]\vec{a_{i}}[/itex] be the acceleration reading from the IMU initial orientation.
Let [itex]\vec{a_{c}}[/itex] be the acceleration reading from IMU's current orientation.
[itex]R = Q_{i} Q^{-1}_{c} [/itex]
Then: (the 0 above the vector is to show the vector is being transformed to a quaternion where w = 0)
[itex]\left(\stackrel{\textbf{0}}{\vec{a_{i}}}\right) = R\left(\stackrel{\textbf{0}}{\vec{a_{c}}}\right) R^{-1} [/itex]
But this above equation only works when the IMU is rotated around 1 axis from it's initial position. For example, the logic holds when rotated around X, but not when rotated around both X and Y.
Thanks so much!
The issue is that an IMU reports accelerations relative to the IMU's orientation rather than it's initial orientation. The IMU's initial orientation is the identity quaternion (1,0,0,0). All changes in the IMU's orientation will be relative to the initial orientation.
With this in mind, I have tried to create a way to map the accelerations of the IMU's specific orientation to that of it initial orientation. e.x. If the IMU is rotated but not accelerated the acceleration in the initial orientation should be constant.
So far I have this.
Let [itex]Q_{i}[/itex] be the quaternion that represents the IMU's initial orientation (1,0,0,0).
Let [itex]Q_{c}[/itex] be the quaternion that represents the IMU's current orientation.
Let [itex]R[/itex] be the quaternion that describes the quaternion that represents the quaternion required to rotate [itex]Q_{c}[/itex] to [itex]Q_{i}[/itex].
Let [itex]\vec{a_{i}}[/itex] be the acceleration reading from the IMU initial orientation.
Let [itex]\vec{a_{c}}[/itex] be the acceleration reading from IMU's current orientation.
[itex]R = Q_{i} Q^{-1}_{c} [/itex]
Then: (the 0 above the vector is to show the vector is being transformed to a quaternion where w = 0)
[itex]\left(\stackrel{\textbf{0}}{\vec{a_{i}}}\right) = R\left(\stackrel{\textbf{0}}{\vec{a_{c}}}\right) R^{-1} [/itex]
But this above equation only works when the IMU is rotated around 1 axis from it's initial position. For example, the logic holds when rotated around X, but not when rotated around both X and Y.
Thanks so much!