J'utilise le magnétomètre du téléphone portable.
Le cap évolue bien si le téléphone est debout ou couché, mais il peut avoir un biais et ce biais n'est pas le même lorsque le téléphone est couché ou debout.
Je pense que cela est dû à des problèmes d'offset.
Ces erreurs systématiques doivent pouvoir être corrigées par une calibration.
Ces erreurs sont décrites dans http://www.freescale.com/files/sensors/doc/app_note/AN4246.pdf. Les mesures se trouvent sur une ellipsoide décentrée au lieu d'une sphère. Il faut identifier cette ellipsoide pour pouvoir corriger. Un algorithme permettant d'identifier seulement le centre de l'ellipsoid est proposé dans ce document.
Un post sur le forum diydrones http://diydrones.com/forum/topics/magnetometer-soft-and-hard-iron-calibration s'intéresse également à la correction des mesures.
Le post http://www.varesano.net/blog/fabio/ellipsoid-sphere-optimization-using-numpy-and-linalg présente un algo en python mais qui ne traite pas le cas générique.
J'ai récupéré le fichier de test http://www.varesano.net/files/acc.txt et l'ai testé avec le code donné dans http://davidegironi.blogspot.it/2013/01/magnetometer-calibration-helper-01-for.html#.UnfKgHjSWRY. Le code est en matlab mais fonctionne en grande partie avec octave.
Le code complet que j'ai utilisé est ici
Pour l'acquisition des données, j'ai utilisé le script https://github.com/baptistelabat/robokite/blob/master/ObjectTracking/mobileState.py que j'ai légèremment adapté pour créer un fichier de sauvegarde.
Voici les résultats obtenus pour l'identification de l'ellipsoide
Ellipsoid center :
0.177 -0.107 0.566
Ellipsoid radii :
46.6 45.6 43.3
Ellipsoid evecs :
-0.816442 0.42536 -0.390503
0.319485 0.896097 0.308123
-0.480991 -0.126805 0.867507
Ellpisoid comp evecs :
0.948847 0.0100939 -0.0268862
0.0100939 0.948304 -0.00195987
-0.0268862 -0.00195987 0.984806
Et voici une image des données initiales (rouges) et corrigées (bleues)
Je trouve malheureusement que la différence n'est pas significative... A creuser.
http://bazaar.launchpad.net/~fabio-varesano/freeimu/trunk/files/head:/FreeIMU_GUI/FreeIMU_GUI/
RépondreSupprimer