Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 

    bno055 related questions

    bno055 related questions

    prot
    Member

    I understand that the bno-055's internal autocalibration which runs in background cannot be switched off. I get massive heading drifting  and after reading everything I could find about this I implemented my own routine to minimize this. I use the following steps in my algorithm:

    1.  Bno055 initialization

    2. Calibration (in NDOF mode)

    3. Write the calibration values (ACC, Gyro, Mag Offsets and Acc and Mag Radius bytes) in the microcontroller's (AVR) EEPROM for later use

    4. find a stable position close to roll=0, pitch=0, yaw=0 on my table and log the readings

    5. enter a loop where:

         5.1. read the CALIB_STAT register and see if it is 0xFF (if not goto  5.1.1)

                       5.1.1. read EEPROM values of offsets and radii. Enter Bno055's ConfigMode. Write these saved calibration values. Reenter NDOF Mode. Blink a LED to indicate that the calib. values were reloaded.

         5.2. read euler angles or raw data from sensors or whatever

    I've noticed that whenever I write the offset and radius registers the CALIB_STAT register will show 0x00111111. This tells me according to the datasheet section 4.3.54 that the status of the Gyro, Acc and Mag is "calibrated" but the system's calibration status (bits 7:6) remains  0x00 "NOT CALIBRATED" . Why is that ?

    What triggers the system's calibration ? According to the datasheet (same section) the status of the system calibration deppends on status of all other sensors. So why do I get 0x00111111 ? I used the value stored in this register as a trigger for reloading the initial calibration values. Eventually I made my condition: " is the current value <= Hex 3F ?" which ignores the bit 7 and 6. It works until now. But I still wanna know the reason for the described problem.

    Also, would there be another method to detect when the offset and radius are getting messed up, instead of using the CALIB_Stat register ? I thought about reading only the MAG Offset and Radius cause obviously these are the most succeptible ones to distortions. This would mean only 8 read/compare/write operations instead of 22.

    Another question: when going through the initial calibration process (NDOF Mode) I calibrate gyro first then the acc and the mag at the end of the routine. I'm using the calibration steps from the datasheet (and the youtoube video). After calibrating the gyro and the acc, the mag is almost always calibrated without having to do anymore movements (figure 8 or else).

    If I wanna re-calibrate just one sensor, for instance the magnetometer, would this be possible ? Pause the data output, recalibrate, save the new offset/radius, resume data output.

     

     
    6 REPLIES 6

    Hi Vincent,

    Your observation is correct I do re-enter the NDOF-Fusion operation mode after reading/writing calibration status and calibration values registers, but I forgot to call a sub to enter Config_Mode before doing that. I made the corrections and I will recheck.

    But...   you do perform a reset in order to reload the calibration values. That works on my board too. I thought it isn't necessary to power off / on (reset) the BNO055 chip in order to write the calibration values registers ?!

    The manual (page46) says:

    Setting Calibration profile
    It is important that the correct offsets and corresponding sensor radius are used. Incorrect
    offsets may result in unreliable orientation data even at calibration accuracy level 3. To set
    the calibration profile the following steps need to be taken
    1. Select the operation mode to CONFIG_MODE
    2. Write the corresponding sensor offsets and radius data
    3. Change operation mode to fusion mode

    And on the same page:

    3.11.4 Reuse of Calibration Profile
    Once the device is calibrated, the calibration profile can be reused to get the correct
    (prior to going through the steps
    mentioned in the above section). However, once the sensor enters the internal calibration
    routine, the calibration profile is overwritten with the newly obtained sensor offsets and
    sensor radius. Depending on the application, necessary steps had to be ensured for proper
    calibration of the sensor.

     

    So I guess the question is: Do I have to first reset the chip to reload the pre-saved calibration values (offset and radius values) ?

     

     

     

    Vincent
    Community Moderator
    Community Moderator

    The calibration profile restore are expected when sensor is after soft reset or power on reset. 

    When sensor is working, the fusion lib is working properly,  write to the calibration parameters are not recommed or even i will say not allowed  because the offset value with current caculation will be broken by your write.  

    The calibration level drop during sensor run is expected if any distortion on magnetic field or offset change from sensor due to any reason will cause the calibration level drop from 3.  And a recalibration process are running in background to bring it back to 3.  No user interaction needed here on SW side.  Just require some movement to calibrate the magnetic sensor here.  

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist