Hi All,
I am facing a real problem with all IMUs with most of open source algorithms around. The problem is that the IMU gives a stable good readings when you are not moving it too fast, but when shacking and moving the IMU really fast then place it stationary, it never gets back to zero again in some algorithms /or gets back too slow in other algorithms.
By the way, i have used Arduimu, mpu6050, mpu9150, mpu9250 and they all suffer from the same problem when moving them in all axes fast for around 20 seconds then back to initial zero position, and it did not get back to zero.
I have found the source of the problem which is the Gyroscope. I have tested fast rotations using Gyroscope integration only to get eulers and found that it is causing this effect.
The Accelerometer data is supposed to correct this effect using the sensor fusion algorithm, as it gives accurate reading as long as the device is stationary. but it doesn't actually do anything except a too slow correction. and what will correct the Gyro error while the device is moving in a fast rotations like this ?? If i decided to depend more on Accelerometer using complementary filter, or raising the weights in algorithms like Magdewick and Mahony open source algorithms, it gets back to zero after a very fast rotations in one second(still slow but good comparing with previous results) but i LOOSE a very important feature for me which is the good dynamic behavior. For example, if I move the IMU right and left while keeping the roll and pitch angles zero on table, the result is that roll and pitch angles changes with this yaw movements because the device now depends more on accelerometer readings which measure the acceleration i am moving with as well.
I tried even a lot of weights for all algorithms and it is still have the same effect. why Gyro integration fails at high speed rotations ?? I have even tried to make Ki value equal ZERO at high rotations with no useful results, and also making it zero at low rotations gives nearly the same results for me.
even when using the open source fusion algorithms it still have the same effect ?? i know this effect doesn't greatly affect Copters or fixed wing planes because it never moves too fast like when i move the IMU too fast in with hand which makes the IMU do not suffer from this effect. But imagine if the user is holding an IMU in his hands for any fast rotation application, definitely he will suffer from this effect.
Is there any solution to this problem ?
I know there is a lot of experts here and i wish they can answer me. Any help is greatly appreciated.
Thank you
Replies
Avoid doing anything that takes much time away from the IMU. Sending data out of the serial port is a horrible waste of time. If you need to see data, only output the very minimum amount a couple of times a second. Any more often than this and the Arduino will be spending more time sending data than running the IMU, and this will guarantee poor results. Obviously, run the serial port at max bit rate.
I hope this helps. Regards,
Phillip
That's an awesome explanation of many things involving IMU's.