Open LeFsCC opened 2 years ago
Hello there! Sorry about the lack of documentation; this repository is very much a work in progress, on which note the wip branch contains more up to date work (but also depends on libmapper)
The procedure is as described in this paper: https://ieeexplore.ieee.org/document/6907297 (gyro not yet implemented), incorporating the magnetometer calibration principle from this paper: https://iopscience.iop.org/article/10.1088/0957-0233/23/10/105105
My implementation is original and may contain errors. I have had a lot of trouble over the years getting things to work nicely; sometimes it seems to work perfectly, other times no matter what I try it just doesn't, especially the magnetometer. I guess I should probably add a license somewhere... No warranty, etc.
To describe the procedure very briefly: put the MIMU in 16 to 30 different orientations, leaving it stationary in each orientation for 5 to 10 seconds, so that both the magnetometer and accelerometer are exposed to a variety of readings roughly covering the full (ideally spherical) response of the sensor to the constant gravitational and magnetic fields of the Earth. The accelerometer is calibrated by fitting the measurements to a sphere using non-linear optimization. The magnetometer is calibrated in the same way, and then aligned to the accelerometer based on the fact that the dot product of the gravity and magnetic field measurements should be constant.
The calibration procedure produces a matrix and a vector for each sensor triad (presently just the accelerometer and magnetometer). The error model to compensate for the measured errors can be found in the source code for each sensor; in general it's y = M(x-b) where y is the corrected measurement, x the raw measurement, M a matrix transform, and b an offset vector.
I hope it helps!
Also, I'm happy to answer any more specific questions.
Hello there! Sorry about the lack of documentation; this repository is very much a work in progress, on which note the wip branch contains more up to date work (but also depends on libmapper)
The procedure is as described in this paper: https://ieeexplore.ieee.org/document/6907297 (gyro not yet implemented), incorporating the magnetometer calibration principle from this paper: https://iopscience.iop.org/article/10.1088/0957-0233/23/10/105105
My implementation is original and may contain errors. I have had a lot of trouble over the years getting things to work nicely; sometimes it seems to work perfectly, other times no matter what I try it just doesn't, especially the magnetometer. I guess I should probably add a license somewhere... No warranty, etc.
To describe the procedure very briefly: put the MIMU in 16 to 30 different orientations, leaving it stationary in each orientation for 5 to 10 seconds, so that both the magnetometer and accelerometer are exposed to a variety of readings roughly covering the full (ideally spherical) response of the sensor to the constant gravitational and magnetic fields of the Earth. The accelerometer is calibrated by fitting the measurements to a sphere using non-linear optimization. The magnetometer is calibrated in the same way, and then aligned to the accelerometer based on the fact that the dot product of the gravity and magnetic field measurements should be constant.
The calibration procedure produces a matrix and a vector for each sensor triad (presently just the accelerometer and magnetometer). The error model to compensate for the measured errors can be found in the source code for each sensor; in general it's y = M(x-b) where y is the corrected measurement, x the raw measurement, M a matrix transform, and b an offset vector.
I hope it helps!
Thanks a lot, it really helps.
Is there any readme or doc for explaining the principle of your IMU calibrating algorithm? --- from a IMU beginner.