I'm using a BNO055 IMU for a project, and I'm learning to calibrate each sensor separately.

  • The gyroscope is calibrated by standing the device still in any position
  • The magnetometer is calibrated with sufficient normal movement of the device
  • The accelerometer is calibrated by placing the device in 6 standing positions

My question is why is each sensor calibrated in this way? I'm looking for an explanation of the science behind the sensors which determines these methods of calibration. I've looked around the internet for an explanation but I can just find loads of tutorials on HOW to do it (as explained above), and not WHY its done in this way.

Link to the calibration procedure: https://learn.adafruit.com/adafruit-bno055-absolute-orientation-sensor/device-calibration#generating-calibration-data-2974405-5

  • \$\begingroup\$ Please post a link to the calibration procedure for the three sensors. \$\endgroup\$
    – AJN
    May 20, 2021 at 9:53
  • \$\begingroup\$ @AJN question is edited with a link \$\endgroup\$
    – SamONeill
    May 20, 2021 at 9:55
  • \$\begingroup\$ You need not accept an answer quickly. You can wait and see if a more detailed answer specific to BNO IMU library will be written. \$\endgroup\$
    – AJN
    May 20, 2021 at 10:46

1 Answer 1


To calibrate a device, you generally need to feed as input to it a known signal / value. The word calibration here probably means to measure and correct the bias and scale factor / sensitivity errors of the sensor.

The only real requirement is that you need at least two different known input to be fed to a sensor to calculate its bias and scale factor / sensitivity. The sensor is assumed to be an ideal linear sensor. then you need to solve for the equation output = m * input + c. Where m is the scale factor and c is the bias. To solve for these values, you need two known values of input and the corresponding measured values of output.

By standing still, you are feeding a 0 deg/s (not really[1]) input to the sensor. With this, gyroscope bias can be measured and corrected, but not sensitivity/scale factor.

[1]When standing still, the gyros should pick up the component of earth's rotation parallel to their sensitive axis. If the sensor is good enough to pickup earth's rotation rate, You need to position the gyro in many (6?) different positions to calibrate it.

Just as earth rotation rate is a natural (and free of cost to use) input for gyroscopes, earth's gravity is a natural input to accelerometers. By pointing the sensitive axis of the accelerometer, parallel and perpendicular to the center of the earth, you can input +1g, -1g, and 0g to it. This will allow for the measurement of sensitivity and bias of the sensor.

I don't know about magnetometers though. I would imagine that magnetometers also need only 6 positions like the accelerometers, but the software you may be referring to, may be able to make do with sufficient random movement.

For hobby equipment the above procedure is enough. For high grade sensors, there are machines which can accelerate, and rotate the sensor at accurate and precise known values from which you can calibrate the sensor.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.