I am using the MPU6050 in conjunction with an Arduino and Jeff Rowberg's i2cdev library, and my project requires that the gyro rate outputs be more precise than the default setting, which is 1/16.4 of a degree (+/-2000 deg/sec range). The gyro outputs can be changed with mpu.setFullScaleGyroRange(uint8_t range)
for which I passed in MPU6050_GYO_FS_500
for range to get a higher precision
In this project, I also need the YPR position, which I obtain through mpu.dmpGetQuaternion(&q, fifoBuffer)
and mpu.dmpGetGravity(&gravity, &q)
and mpu.dmpGetYawPitchRoll(ypr, &q, &gravity)
.
The problem is with the new gyro output range, the YPR position changes drastically when the MPU is being rotated and slowly catches up again once the MPU is held still. I think there is an error in the filter that combines the gyro and accel data that is making the gyro to sensitive. Maybe the DMP is dividing the GYRO rate data by the default sensitivity factor (16.4) when it should be dividing by the new one (131)?
How can I get accurate YPR readings without delay?
Here is a screenshot of the data. The axis aren't labeled, but the x-axis represents about 16 seconds of time. The blue line is the gyro rate data, and the pink line is the roll position of the MPU. The graph shows two rotations of the MPU.