One of the widely ignored (in open source projects, not in industry) sources of error in attitude and inertial estimation are temperature dependent offsets and scaling changes (some open source systems do, and we would love to hear about how you are doing it - the purpose of this post is to gather the community knowledge). Some systems estimate them online with a bias state. However, not all of them can be easily and reliably estimated online, and bias estimation always poses the risk that the designer makes too strong assumptions about observability. Consequently the quality of the estimate then depends on the flight pattern (straight line vs. circling) and GPS accuracy.
It is therefore always a good idea to estimate temperature effects upfront (if we reliably can) and remove all known effects from the measurement before estimating the remaining offsets online.
Please find below the link to a 1500 seconds (25 minutes) dataset showing the MPU6K warming from 5 deg to 40 deg Celsius.
The temperature drift is obvious. The link contains a ZIP file with a complete Matlab dataset and scripts to plot the data. You will find that tempdrift.m does all the plotting and is already set up with all convenience logic - you just need to insert your compensation function.
The dataset is however not perfect: It might very well turn out that we need multiple (e.g. six) orientations to differentiate between accel offsets and accel scaling changes, and we might need constant rates (e.g. from a record player) for the same differentiation between offset and scaling for the gyroscopes. Please get in touch via the mailing list to request additional data and describe what you want to have.
Note that we already know that there are two different offsets / scalings: The per-boot offset of the sensor, which only varies mildly. That’s why 10 reference boots at different temperatures are attached for validation. And the temperature-induced general offset (this might be per-device or per instance, we’ll see).
Please get in touch if you have questions. To make this more fun and give it a personal touch: I’m offering a three-course dinner at a local restaurant if we ever manage to meet (I’m traveling a lot). I will offer this to the best solution once I end the competition :).
The benchmark is clear: Show that you can measure the Earths rotation rate of 15 deg/hour. I know its not impossible with today’s MEMS sensors - I have no baseline on the MPU6K though, from which this dataset originates (the MAG is the LSM303D's internal mag).
(photograph CC-by-SA Wikipedia)
Comments
It's almost down to the ambient seismic activity in Calif*. The ADXRS453 shows 16 deg/hour of drift on its datasheet. That might even be counting the Earth's rotation. Despite Invensense having the marketing budget, Analog Devices is still the gold standard. If you built up a calibration table, mounted it on the most stable platform, it just might do the job.
Marius,
There are more than a dozen MEMS devices on the market, and I did not imply that the MPU6K will give us these results - I however know that people have done it with MEMS devices (e.g. think about the high-end Analog devices MEMS units and other recently released sensors). As we know that data sheets are always off (mostly they make it look more positive, but who knows), I want to encourage curiosity and hopefully get the right people interested to push for the limits. We clearly do not need this level of sensitivity for the autopilot applications, but I think the idea here is to see how far we can push on all ends - mostly regarding the offsets / scaling, but also sensitivity and noise characteristics. If someone raises their hand and suggests we should try a different sensor as well, we'll happily do. And I'm also looking for people with rate tables willing to perform some (better) logging for us.
I'm curious how you determined that gyrocompassing is possible with today's MEMS sensors. The ST L3GD20H gyro, which is relatively new, has a published sensitivity of 8.75 mdps/digit at its lowest measurement range setting. This translates to 31.5 deg/h per digit, twice as large as the Earth rotation rate. It seems logical to me that in order to observe a rate of 15 deg/h the sensor would have to be sensitive to at least 7.5 deg/h, or four times the sensitivity of the L3GD20H gyro.
Just for info, on our autopilot we do a full temp compensation on all inertial sensors, as well as the static and dynamic pressure sensors.
Inertial sensors are done on a rate table, for the rate gyros, and using the same table with set angles of orientation for the accelerometers, all in the environmental chamber from -10deg C to 65deg C. Static pressure sensor is done at three accurate pressures, 1000mbar , 700mbar and 300mbar, and the dynamic at 3 differential pressures, 0.5mbar, 3mbar and 8mbar, over the temp range -10deg C to +65deg C. A certified pressure standards test set is used to generate these pressures.
We then apply a polynomial correction to all sensors. Each sensor or sensor set has an adjacent or internal temp sensor that the Autopilot host CPU reads to determine the temp of the sensor, and ten applies the polynomial corrections. Only way to go if you want real accuracy. Static pressure errors over the full temp range is less than 0.2mbar.
Joe
The Nampilot