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?
Comments
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.
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: https://mbientlab.com/community/discussion/3183/sensor-fusion-reference-frame
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);
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