Hi everybody, I made a project where I need to stabilize a camera. It looks like a platform with a linear actuator at one end for changing the pitch of the platform.
To achieve this I got an ITG3200/ADXL345 breakout board from Sparkfun (SparkFun 6 Degrees of Freedom IMU Digital Combo Board - ITG3200/ADXL345 - SEN-10121 - SparkFun Electronics)
Here is what the program does:
1-Get the angle of the Y axis of the IMU (using FreeSixIMU library, which calculates the absolute angle with the acc and gyroscope data)
2-Pass it through a function to determine how much juice I need to send over the motor and in which direction to keep the platform stable
3-Output this value to a Polulu motor controller
I achieved all the above easily, but I got stuck with one issue:
I use only one measured axis (X) of the IMU. Whenever I put the IMU sensor at an angle (say 45 degrees X) and I rotate it along the Z axis, the value read by the X axis (which is at 45 degrees) is not 45 degrees anymore.
I made this animation to show which angle I want to read. But in practice, the value changes and goes from -45 to 0 to 45 degrees when it spins on Z axis. I want the reading to always be -45 like in the video.
I tried to modify the FreeSix IMU library to delete every references to the Z axis, which I don't need in the project, but I don't have much knowledge of the formulas used. Here are the basic lines of the library, it seems to use a quaternion system, which I don't fully understand :
(FreeSixIMU.cpp)
void FreeSixIMU::getEuler(float * angles) {
float q[4]; // quaternion
getQ(q);
angles[0] = atan2(2 * q[1] * q[2] - 2 * q[0] * q[3], 2 * q[0]*q[0] + 2 * q[1] * q[1] - 1) * 180/M_PI; // psi
angles[1] = -asin(2 * q[1] * q[3] + 2 * q[0] * q[2]) * 180/M_PI; // theta
angles[2] = atan2(2 * q[2] * q[3] - 2 * q[0] * q[1], 2 * q[0] * q[0] + 2 * q[3] * q[3] - 1) * 180/M_PI; // phi
}
Where angles[0] corresponds to Z axis,
angles[1] to X axis and
angles[2] to Y axis.
The entire library is avalaible at: http://code.bildr.org/project/6dof/Arduino and for download at http://code.bildr.org/download/985.zip.
What I want is someone who could patch the library for me so it would exclude Z axis when measuring angle. It would apply to X and Y measurements. I need to get it working as soon as possible, so I am willing to pay 15$ paypal to whoever will supply me a working patched library.
If you have additional questions, feel free to ask me!
Thank you very much for your time!
Charles