I’m reading out an OS0 rev 6 with the 0.8.1 SDK and I’m seeing some odd values, even with the unit at rest. The acceleration is close to (0,0,1) as expected, but the gyroscope is reporting values near (0.5, 0.1, 1.5) degrees per second, which seems much larger than I would expect from the IMU spec sheet.
Does the IMU need some kind of zeroing or calibration that I’m missing?
Yes, you need to detect the IMU bias upon start while the sensor is in stand still then subtract the bias from the imu reading. You can establish the IMU bias for both the accelermator and gyroscope by taking the average over a sample size of 10-100 imu readings, which translates to about ~1 second or less.
Note that you need to establish this bias on a per session basis (i.e. at the start of sequence), since the bias can be affected by the environment and temperature.
How can I estimate the accelerometer bias when my sensor is mounted with limited degrees of freedom?
For instance I have a device mounted almost-upside-down on a big crane, and the accelerometer used to show reasonable values, but is delivering nonsensical values (almost inverted gravity vector, and no longer normalized). But I can only move this sensor in a plane, without rotation. How could one calibrate the accelerometer in such a case?
Hi @rasmus, you can establish your ACC IMU bias by computing the deviation ACC values from the standard gravity vector of . Computing the an average of your ACC values over a specific period of time (let’s say 1 second), take the difference between the mean of your ACC values and the standard gravity vector. To put that in math:
g is the standard gravity ~ 9.80665 (You may need customize for the specific region of operation)
ā is the mean of your linear acceleration values
ba is the computed acc bias
Once you have established ba you can then subtract these values from your acc estimates to get the unbiased acc values. If your sensor is inverted then you can apply a 180 degress on the x or y axis to re-orient the acc vectors. You can perform this calibration at the start of the session or maintain a running average of you the bias overtime and use it to get the un-biased acc vector.
With regard to estimating the bias there is no assumptions about the sensor state (whether it is stationary or orientation) .. That part is simply taking an average over a period of time and estimate how much it deviates from a standard G vector, that quantity is used as the bias. It doesn’t make an assumption about the current orientation of the sensor or whether it is stationary. However, the most accurate measurement of bias can only be done while the sensor is stationary. Once you have the estimated bias you can subtract from the ACC values to get the un-biased corrected ACC values; which then you could use in your pipeline. Establishing the values while the sensor is stationary gives you more accurate estimate of the bias for sure. So if it is known to you when the sensor is stationary or not you can try to incorporate this info into your bias estimation algorithm.