As promised earlier, here is a quick example of IMU temperature calibration fit. The IMU is an MPU-6000 from an APM2. The EKF is a 15-state kalman filter published in ch 6-7 here: https://books.google.com/books/about/GNSS_Applications_and_Methods.html?id=juXAE3SHQroC&hl=en
The 15-state EKF does a really good job at estimating both gyro and accelerometer biases. I added IMU temperature logging. With that I can go do a flight, collect bias and imu temp data, plot bias vs. temp, and do a 2nd degree polynomial fit.
The result is a bias estimate for the current temperature for each individual inertial sensor (within the range of temperatures where we have previously flown.)
The plots below are were collected by placing the full system in my car and driving for 30-45 minutes with the heater full on, and then later with the windows open to create a range of temperatures.
The idea is that the more an individual system is flown across a broader range of conditions, the more data you have and the better the overall fit becomes.
The filter does a really good job at estimating bias, but pre-calibrating the sensor values for the current IMU temperature means that the filter has a lot less distance to travel for it’s initial convergence. This is useful for things like auto-takeoff where the filter is still establishing a good convergence.
I am also developing a process to estimate scale errors from the flight data. Scale errors are less observable, but my process so far is showing promise. The filter is pretty robust to 5% scaling errors though so scale calibration is less of a big deal than you might first thin … especially for typical uav flying where most of the time the aircraft flies near the sensor zero points.
Oh, and for what it’s worth, the values I’ve derived from the flight data seem to agree pretty well with the values I’ve determined from a typical manual calibration process.