Calibrage¶
Mais l'initialisation n'est pas la seule chose à réaliser afin de rendre l'IMU opérationnel. Il faut également le calibrer afin que les mesures données soient les plus justes possibles.
Ceci est réalisable grâce à des tests, qui n'étaient pas réalisable de notre côté. En effet, nous n'avions pas les ressources nécessaires afin de calibrer correctement les différents capteurs de la centrale. Il aurait fallu un cube parfait de plastique dans lequel nous aurions dû placer la centrale inertielle au centre, le tout bien parallèle et perpendiculaire suivant les faces afin d'obtenir des mesures suffisamment précises pour être exploitables. Nous avons donc utilisés le calibrage réalisé par notre tuteur de projet:
De même, les données que nous recevons des capteurs grâce au port I2C ne sont pas tout de suite exploitables puisque la notion d’axe n’est pas mise en place. Le tableau de données suivant permet de mettre en place les mesures sur un repère euclidien. On affecte ici un axe par capteur.
Mais ces initialisations n'étaient pas suffisantes, il a donc fallu développer plusieurs fonctions afin de rendre les mesures les plus précises et justes possibles. Il fallait bien exploiter le tableau de données de notre tuteur. De plus, les mesures que nous obtenions étaient vraiment fantaisistes sans un calibrage. Nous avons donc réalisé une fonction de calibrage, qui nous permet de corriger tout cela.
Afin de filtrer et linéariser les données, nous avons utilisé deux tableaux de 6 et 3 float appelés cumul et gyroOff, destinés à recevoir les données des cumuls d'accélération et des cumuls du gyromètre.
On commence donc par cumuler cent mesures des gyromètres. Lorsqu’on les atteint, on réinitialise la vitesse, la position du gyromètre et les angles calculés. On actualise ensuite l'offset du gyromètre en utilisant la moyenne des cent derniers cumuls que l'on réinitialise ensuite eux-aussi.
Pour ce qui est de l'accéléromètre, il s'agit de la même logique. On calcule le cumul de 16 mesures, puis on utilise la moyenne de ce cumul afin d'envoyer une donnée plus fiable et on réinitialise le cumul.
Ensuite on utilise deux autres fonctions, sensorCalibrate et sensorAlign.
La première permet de calibrer les mesures des trois capteurs. On donne en paramètre de cette fonction les mesures brutes, un pointeur pour les mesures calculées, le calibrage donné plus haut et un delta correspondant logiquement aux écarts mais que l'on laisse à 0.
La fonction SensorAlign permet quant à elle de transformer les données justes sorties de la fonction précédente, afin de, grâce à une échelle donnée, produire des mesures valides dans un repère euclidien grâce au tableau alignmt expliqué avant.
Une fois ces étapes terminées, il ne reste plus qu'à envoyer les données par une mailbox. Ces dernières permettent de communiquer en temps réel dans le microcontrôleur et sont bien moins soumises à d'éventuels bugs.
Nous avons également rajouté une fonctionnalité afin de pouvoir connaitre les données de calibrage et de les envoyer à l’IHM pour qu’elle puisse les afficher à son tour. A la réception d’un sémaphore, nous envoyons les données de calibrer grâce à une mailbox.
Maintenant que nous avons toutes les données nécessaires grâce au port I2C sur le microcontrôleur, nous devons traiter les données reçues.
<- Traitement des données -> Repérage de la main dans l’espace
Mis à jour par Anonyme il y a environ 12 ans · 2 révisions