Remplacement de la centrale inertielle par le modèle Grove IMU 9-DOF v2.0

Grove IMU 9DOF v2

Changement Grove IMU 9-DOF de v1.0 à v2.0

Grove a sorti une mise à jour de la centrale inertielle Grove IMU 9-DOF. Cette nouvelle version intègre un chipset MPU-9250 qui remplace la version MPU-9150. Cette évolution permet en particulier d'avoir un magnétomètre un peu plus précis rendant des valeurs plus stables et fiables. Toutefois, le remplacement de l'ancien capteur par le nouveau ne s'effectue pas tout à fait de manière plug & play même si on n'a qu'à le connecter sur un port I2C de la GrovePi. En effet, lors du remplacement, du capteur par la nouvelle version 2.0, j'obtenais des valeurs correctes, mais avec un décalage assez énorme dans le temps (pouvant aller à plusieurs secondes).

Pour pallier à ce problème d'intégration constaté, j'ai fait une recherche sur Internet pour trouver une raison à ce lag constaté. J'ai pu trouver que plusieurs personnes modifiaient la fréquence du bus I2C en modifiant le fichier config.txt et en ajoutant le paramètre suivant pour passer la fréquence à 400KHz:

dtparam=i2c1_baudrate=400000

Mais cette modification n'a rien changé au problème de latence constaté dans le retour visuel obtenu dans l'interface d'openrov-cockpit. J'ai donc supprimé ce paramétrage du fichier config.txt.

J'ai ensuite fait des tests à plus bas niveau avec les outils fournis par la bibliothèque RTIMULib 2. Il s'est avéré qu'avec le capteur MPU-9150, l'échantillonnage était fixée à 50 échantillons (soit 1 toutes les 20ms) par seconde alors que pour le capteur MPU-9250, celui-ci était de 80 échantillons (soit 1 toutes les 12,5ms). Et avec l'application de test RTIMULibDemoGL fournie dans la bibliothèque, tout fonctionnait correctement sans aucun problème de latence au niveau du rendu.

Après avoir étudié le code source pour trouver où régler cette fréquence d'échantillonage, une simple modification des paramètres dans le fichier d'initialisation lu par la bibliothèque au démarrage était suffisant. Donc pour résoudre le problème, j'ai copié un fichier de d'initialisation à la racine du système de fichier et ai modifié les paramètres suivants pour la configuration du MPU-9250 pour qu'ils soient identiques à ceux du MPU-9150:

# Gyro sample rate (between 5Hz and 1000Hz plus 8000Hz and 32000Hz)
MPU9250GyroAccelSampleRate=50

# Compass sample rate (between 1Hz and 100Hz)
MPU9250CompassSampleRate=25

Avec ce simple changement de paramétrage, j'ai pu retrouver la fonctionnalité de la centrale, sans aucune latence au niveau de l'affichage dans le cockpit (une fréquence de 80Hz est donc trop importante pour l'envoi des données à l'afficheur, nous nous contenterons donc de 50Hz). Mais un calibrage est tout de même nécessaire pour avoir des mesures plus stables.

Calibrage de la centrale inertielle

L'étape de calibrage est importante pour avoir des données stables et fiables. C'est particulièrement vrai pour l'utilisation des informations de la boussole. Des outils sont fournis dans la bibliothèque pour réaliser le calibrage de la centrale inertielle: le programme RTIMULibCal ou bien dans les outils de démonstration graphiques (RTIMULibDemo et RTIMULibDemoGL). Toutefois, j'ai préféré utiliser le programme RTIMULibCal car celui-ci inclus non seulement la configuration du min/max des valeurs, mais aussi le "Ellipsoid Fit Calibration" qui est fortement recommandé en particulier pour l'utilisation de la boussole. Il est nécessaire d'installer le paquettage octave pour utiliser cette calibration "Ellipsoid Fit":

sudo apt-get install octave
cd ~/Src/RTIMULib2/Linux/build/RTIMULibCal/
# Il faut que le dossier RTEllipsoidFit soit accessible dans le dossier parent de l'exécutable
ln -s ../../RTEllipsoidFit ..
./RTIMULibCal
# Faire x pour quitter le programme. Cela vous génère un fichier RTIMULib.ini
# Modifier la fréquence d'échantillonage dans le fichier RTIMULib.ini pour votre capteur
./RTIMULibCal
# Faire la calibration du magnétomètre (m) puis ellipsoid (e) et enfin accéléromètre
# Quitter avec x qui sauvegardera le fichier RTIMULib.ini

Attention, quand vous lancez cette procédure de calibration, il est important que votre programme soit bien le seul à accéder au capteur. Veillez donc bien à avoir stoppé l'interface openrov si vous l'avez lancée ou bien si elle se lance automatiquement (cela m'est arrivé, et vous obtenez des valeurs incohérentes et l'impossibilité de quitter le programme de calibration).

Une fois ce calibrage fait, il ne reste plus qu'à copier le fichier à la racine du système de fichier que lors du lancement d'openrov-cockpit celui-ci soit pris en compte.

# Pour l'utiliser avec openrov-cockpit
sudo cp RTIMULib.ini /