10-31-2019 08:25 AM
Hello there,
i am using the BNO055 in a robot for tracking the heading via the gyroscope only.
The BNO055 is running in AMG mode (so no fusion) with range set to 2000DPS. The datasheets states 16 LSB/°/s overall resolution/sensitivity for the gyro.
I encountered two issues/inaccuracies with the datasheet:
The datasheet of BMI055 (used in BNO055?) states a resolution/sensitivity of 16.4 and the newer BMI088 even has 16.384.
16.384 would make sense, as this is 2^15/2000.
Can someone please clarify this issues with the datasheet?
Thanks!
regards Fox
Solved! Go to Solution.
11-04-2019 11:11 AM
Hi Fox,
The gyroscope inside BNO055 is the same as BMI055 and BMI088. It has 16-bit resolution, which means that in 2000dps range, the resolution is indeed 2^15/2000.
However, the BNO055 calculates the rotation in floating point, then multiplies it by 16 or 900 (depending if using degrees of radians) before converting it back to integer for the register value. Since the difference between 16.384 and 16 is only 2%, you will find that most of the time, the resolution appears to be 16.384 due to rounding error.
11-04-2019 12:10 PM
Hi,
thanks for the reply. But i don't understand what want to say in your last sentence.
If all 3 ICs use the same gyro, why does the register value resolution differ (BNO055: 16, BMI055: 16.4 and BMI088 16.384)?
What about my issue with the changing resolution when i change the range? There is no documentation about that in the BNO055 datasheet (but in BMI055/BMI088 datashetts). What is the gyro register resolution when gyro range is set to 250DPS?
Thanks
11-04-2019 04:35 PM - edited 11-05-2019 09:51 AM
Hello,
Let me rephrase. If there is difference between input and output resolution, then will either be output values that are not possible (1LSB change of input causing 2LSB change in output), or output values that are duplicate (1LSB change of inpute causing 0LSB change in output). Here is what it looks like in a graph: https://www.desmos.com/calculator/ek8sqckaq5
If all 3 ICs use the same gyro, why does the register value resolution differ (BNO055: 16, BMI055: 16.4 and BMI088 16.384)?
For BMI055 and BMI088, the difference is simply the rounding of the decimal places. These two products have 100% identical gyroscope.
For BNO055, it is a bit different, since you are not reading the data directly from the gyroscope, but rather reading data from a microcontroller which processes the data and calculates sensor fusion. There, even if the true resolution of the gyroscope data is 16.384 LSB/dps, the output resolution is 16.0 LSB/dps.
May I also here point out, that the sensitivity tolerance at room temperature is typically 1%. When considering other factor due as temperature, clock accuracy and noise, the rounding error introduced by the microcontroller is not so significant.
What about my issue with the changing resolution when i change the range?
I do not have at my disposal quick way to test for this and determine which case this falls in :
a) Intended behavior -> Incorrect documentation
b) Unintended behavior -> Correct documentation
c) Intended behavior -> Correct documentation (Could not reproduce / incorrect interpretation)
EDIT:
After verification, the firmware that ships with BNO055 does contain bug where the gyroscope data is not scaled according to datasheet sensitivity. The gyroscope data in non-fusion mode in LSB mode is directly the raw data from the BMG160 gyroscope. Therefore, the scaling factor is 2^15/range.
This is fixed in upcoming BNO055 firmware update and scaling factor is constant to 16.0LSB/dps. We hope to release this firmware update soon. The firmware update will come with flashing instructions, sample code, and errata.
o_o
11-11-2019 12:14 PM
Hello,
uh great, thanks for the verification. We had a 6-7° error for one real world 360° turn, i think this bug explains the error.
Is there any timeline when the new firmware will be released? At some point, new BNO055 ICs will we shipped with the new firmware i guess?
Thanks