Accelerometer calibration permanency

Can you share with us any experience about how often people need to redo the sensor calibrations? We're especially interested in the accelerometer calibration. Is it enough to do it once every few months? Is it worth it to set up a process to calibrate the accelerometer on sensors before distributing it to end users, or are they going to have to redo it shortly anyway?


  • Calibration only needs to be done if you are using sensor fusion.

  • That... wasn't my question.
    Let me rephrase: does it make sense to pre-calibrate the accelerometer on the sensors before shipping them to end-users? Will this calibration last a reasonable amount of time? Do you have any experience on this matter?

  • It is important to note that calibration only affects the sensor fusion outputs, so if you are streaming raw accelerometer values then no calibration is needed.

    The calibration constants for the accelerometer and gyroscope account for hardware variations and remain quite stable of long periods of time (months from what i've seen). The magnetometer, on the other hand, deals with local metal and magnetic sources and should be calibrated in situ.

    So if you are in-fact using sensor fusion outputs in a mode that just uses accel+gyro then yes you can calibrate once and save the calibration constants. I would perform a write of the constants within a bootup macro to make them permanent.

  • edited June 2019

    I see. Yes, we're using sensor fusion.
    This means though that it is possible to make the first user experience smoother, by doing the first calibration before shipping the sensors to the users. They'll still have to calibrate the magnetometer, but it's easier to explain to them than the accelerometer calibration.

    On the topic of saving the constants within a bootup macro: I've seen this recommendation in the docs as well. Can you please verify that this is the order of operations that I should do?
    1. Start sensor fusion
    2. Read the calibration state signal until it indicates that calibration is of high enough quality
    3. Stop sensor fusion
    4. Read calibration data
    6. Call mbl_mw_macro_erase_all to get rid of bootup macro written by potential previous calibration. (Any easier way to do this?)
    7. Record new bootup macro with new calibration data
    8. Let the user use the sensor.

    Is there a need to write the calibration data separately, outside of the macro recording?
    Also, is there a need to disconnect the sensor so that mbl_mw_macro_erase_all can take effect before recording the new bootup macro? (In its documentation it's stated that macros will actually be erased after disconnect.)

  • @kustra

    You have the general process down.

    You will want to perform step 4 before step 3, disabling sensor fusion will drop the internal state and will not be guaranteed give the correct results.

    Step 6 can be done at any time, and you will need to disconnect after calling mbl_mw_macro_erase_all. You may want to do this in advance, or at least clear the starting calibration state to have a clean slate.

    When you reboot it will load the calibration data, so you shouldn't need to write it again separately. If you don't reboot, just call the macro to load it manually the first time.

  • Here's a related bug report, for those struggling with the calibration and finding this thread first:

  • Hi everyone

    I see that this is a hot topic and we've also stepped into the quicksand. Our problem is that every time the battery drains ,or we do a reset, we get MBL_MW_SENSOR_FUSION_CALIBRATION_ACCURACY_LOW
    for both the accelerometer and the gyroscope.

    we get this value on the data sent to the calibrationCallback that initiated from
    m_calibrationSignal = mbl_mw_sensor_fusion_calibration_state_data_signal(m_metaWearBoard);

    mbl_mw_datasignal_subscribe(m_calibrationSignal, this, calibrationCallback);

    any idea?? that somewhat **contradicts **the above answer, as we it seems that the accuracy is not permanent.
    We do not use magentometer at all

Sign In or Register to comment.