Aller au contenu


Photo
- - - - -

L'IMU MPU-9250


15 réponses à ce sujet

#1 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 969 messages
  • Gender:Male

Posté 26 janvier 2021 - 03:13

L'IMU (Inertial measurement unit ou centrale inertielle) MPU-9250 est considéré comme l'un des meilleurs composants de sa catégorie, dans le monde des Makers.

 

Je n'ai pas la prétention de vous faire un exposé sur le composant, mais de vous faire part de mon retour, sur ma tentative d'utilisation de ce composant.

 

Pour de plus amples informations, voici quelques liens documentaires :

- le Data sheet : https://pdf1.alldata...K/MPU-9250.html

- la bibliotèque MPU9250.h :  https://github.com/b...rflight/MPU9250

 

Ayant une petite expérience du Gyro Lego, je me disais que la mise en oeuvre de ce composant allait être une formalité.

Je pensais qu'il suffisait d'appeler une fonction pour récupérer les valeurs X, Y et Z du gyroscope. Et bien, non !

Le PMU-9250 possède un Accéléromètre 3 axes, un Gyroscope 3 axes, une Boussole(magnètomètre) 3 axes et un thermomètre.

 

Le plus simple, c'est le thermomètre qui fonctionne immédiatement. Rien à dire.

Mon objectif était d'utilisé le Gyroscope pour diriger mon quadrupède en ligne droite. Malheureusement, le Gyroscope ne donne pas les valeurs des 3 angles d'inclinaison X, Y et Z, mais la vitesse angulaire, exprimé en degré/s. Je ne sais même pas de quoi, il s'agit.

 

J'imaginais que j'allais trouver un grand nombre d'exemples utilisant la bibliothèque MPU9250. Et bien non, je n'ai trouvé aucun exemple mettant en oeuvre les fonctions de cette bibliothèque.

 

Hors l'utilisation de cette bibliothèque, il existe, en particulier, le Blog de Lulu https://lucidar.me/f...ino-9-axis-imu/ qui propose un code assez complexe qui donne la valeur de tous les capteurs dans chaque axes. Ce code ne donne rien de plus que l'exemple Basic_I2C.ino de la bibliothèque MPU9250.h.

 

Ce code est repris par GreatScott! dans une vidéo très populaire, voir code et lien, ci-dessous.

Malheureusement, il utilise une astuce en utilisant l'axe Y de l'Accéléromètre pour mesurer l'inclinaison d'un Spirit Level (niveau à bulle) plutôt que le Gyroscope. Promettant l'utilisation du Gyroscope ultérieurement, cela fait déjà, 3 ans . . .

 
La version de GreatScott!
 
Le code:
Spoiler
 

 

Le code le Lulu.

Spoiler

 

Et voici le code de l'exemple Basic_I2C. ino de la bibliothèque.

Spoiler

 

Voilà, vous l'aurez compris, je suis en galère. Moi, ce qui m'intéresse, c'est de connaitre la valeur de l'axe Z du Gyroscope.

 

Mais, peut-être pourriez-vous répondre à un petite question. Pourquoi, dans son code, GreatScoth! divise t-il la valeur de ay par 182.04 ?



#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 095 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 26 janvier 2021 - 04:53

16384 / 90 = 182.04  

16384 est la valeur d'accélération que tu obtiens lorsque tu es incliné à 90° par rapport à l'horizontale sur l'axe y. ( axe choisi par rapport à son projet qui mesure que l'inclinaison sur cet axe.) 
( revoir dans sa vidéo à 3m36 si besoin )

 

Après malheureusement c'est une approximation linéaire d'une règle sinusoïdale ....
Pour son besoin c'est pas forcément grave mais c'est pas top ...

 

Pour le reste si tu pose une question plus précise je suis sûr que je peux d'avantage t'aider. 
Car la valeur de l'axe z du gyroscope est affichée en brut ... 
C'est Gz dans le code basic. 

Mais il faut savoir dans quelle unité le résultat est donné et savoir que ça ne mesure pas un angle mais une vitesse angulaire ... Contrairement au magnétomètre mais que je ne recommande pas forcément d'utiliser comme boussole et encore moins seul ( car facilement perturbable par des éléments extérieurs )


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#3 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 969 messages
  • Gender:Male

Posté 26 janvier 2021 - 07:01

16384 / 90 = 182.04  

16384 est la valeur d'accélération que tu obtiens lorsque tu es incliné à 90° par rapport à l'horizontale sur l'axe y. ( axe choisi par rapport à son projet qui mesure que l'inclinaison sur cet axe.) 
( revoir dans sa vidéo à 3m36 si besoin )

Merci Mike.

J'avais bien vu à 3'36", mais je n'avais pas du tout fait la relation.

Oui, j'ai bien compris que Gz était une vitesse angulaire. La valeur varie fortement en fonction de la vitesse à laquelle tu tournes l'axe. Malheureusement, je n'en vois pas l'intérêt dans mon projet, mais j'ai quand même fait quelque chose qui pourrait servir.

 

Ce soir, c'est trop tard. J'essaye d'avancer demain et je poserai des questions plus précises.



#4 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 314 messages
  • Gender:Male

Posté 26 janvier 2021 - 07:40

Bonsoir,

je penses que ta déception vient en partie de la confusion entre le gyroscope et le gyromètre (qui sont malheureusement tous deux abrégés en "gyro"):

- le gyroscope, c'est un engin mécanique avec une pièce centrale qui tourne et qui reste toujours dans la même orientation absolue même si le boîtier est incliné. C'est gros, lourd et cher, mais ça a l'avantage de donner directement l'inclinaison (sur les 3 axes)

- le gyromètre donne une vitesse de rotation (selon un axe ou selon les 3 axes si on utilise un composant qui contient 3 gyromètres). L'avantage c'est qu'on en trouve des pas du tout cher, dans des tout petits circuits intégrés (on en trouve aussi des super précis, qui sont gros et cher). En soit un gyromètre ne permet pas d'avoir l'orientation.

 

Néanmoins, avec un gyromètre, si on intègre correctement les données, on peut mesurer les changements d'orientation (par exemple par rapport à l'orientation initiale). A noter néanmoins qu'il y a inévitablement une dérive dans le temps (proportionnelle au temps le plus souvent, au mieux proportionnelle à la racine carrée du temps si l'offset est calibré à la perfection).

 

Le cas "facile" est celui où le capteur reste parfaitement horizontal : il suffit d'intégrer la vitesse de rotation autour de l'axe Z. Néanmoins, si le capteur se retrouve à un moment légèrement incliné, ça fausse significativement les résultats.

Dans le cas contraire, il faut faire l'intégration des 3 angles, ce qui est bien plus complexe.

 

Si on veut limiter les dérives, on peut éventuellement combiner avec un accéléromètre (qui donne la verticale si le capteur est immobile, ou un indice sur la verticale si le capteur bouge (mais ce cas est bien plus dur à traiter)).

 

Donc ton capteur Légo, s'il te donnait une orientation, était probablement en fait un gyromètre relié à un petit microcontroleur qui faisait les calculs pour estimer l'orientation (relative à l'orientation de départ), éventuellement utilisant des références absolues via un accéléromètre (verticale) et/ou un magnétomètre (nord, très bruité en intérieur).

 

Si tu ne veux pas te casser la tête, et avoir un module "tout intégré", qui se charge de faire les fusions de données et de te donner une estimation d'angle absolut, ça existe, mais c'est un peu plus cher. Par exemple https://www.gotronic...a2472-23896.htm d'adafruit.


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#5 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 969 messages
  • Gender:Male

Posté 26 janvier 2021 - 09:35

Merci Sandro.

Comme tu as pu le voir dans mes vidéos, mon quadrupède est très sautillant.

L'idée, c'était de faire au plus simple, c'est à dire utiliser un IMU plutôt que 2 ou 3 télémètres laser, https://www.robot-ma...l53l0x-161.htmlpour parcourir les 10m de la TRR.

 

La description du module ADA2472 d'Adafruit, m'a conduit au BNO055 (qui ne vaut que quelques euros sur Ali) et sur quelques tutoriaux sur YouTube. 

Je vais étudier tout ça de plus près.



#6 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 969 messages
  • Gender:Male

Posté 27 janvier 2021 - 11:42

J'ai modifié le programme de GreatScot! que j'ai mis à ma sauce. La sortie se fait sur le Moniteur Série.

Cela fonctionne comme un niveau à bulle. Ici, c'est l'axe Y qui tourne autour de l'axe X.

La plage des valeurs va de 8° à 180°. Quand le niveau à bulle est à l'horizontale, la valeur est de 90°.

 

// modified ref. https://www.instructables.com/DIY-Digital-Spirit-Level/ and GreatScott! https://youtu.be/USa3HFLnrlk
#include "Wire.h"
#define MPU9250_ADDRESS 0x68
#define ACC_FULL_SCALE_2_G 0x00
byte Buf[14];
 
void setup() {
  Serial.begin(9600);
  Wire.begin();
  I2CwriteByte(MPU9250_ADDRESS, 29, 0x06);
  I2CwriteByte(MPU9250_ADDRESS, 28, ACC_FULL_SCALE_2_G);
  I2CwriteByte(MPU9250_ADDRESS, 108, 0x2F);
}
 
void loop() {
  I2Cread(MPU9250_ADDRESS, 0x3B, 14, Buf);
  Serial.print("\n\t ay=");Serial.print(-(Buf[2]*256/182.04),0);
  delay(500);
}
 
void I2Cread(byte Address, byte Register, byte Nbytes, byte* Data){
  // Set register address
  Wire.beginTransmission(Address);
  Wire.write(Register);
  Wire.endTransmission();
  // Read Nbytes
  Wire.requestFrom(Address, Nbytes);
  byte index = 0;
  while (Wire.available())
  Data[index++] = Wire.read();
}
 
void I2CwriteByte(byte Address, byte Register, byte Data){
  // Set register address
  Wire.beginTransmission(Address);
  Wire.write(Register);
  Wire.write(Data);
  Wire.endTransmission();
}
 


#7 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 314 messages
  • Gender:Male

Posté 27 janvier 2021 - 12:11

Bonjour,

Si ton robot est à peu près immobile, ça devrait assez bien marcher.

Par contre, fait attention une fois que ton robot bouge : ce que tu mesures, c'est l'angle entre ton capteur et le vecteur (accélération - g) où g est le vecteur gravité (g=9.81 m/s^2, orienté vers le bas).

Donc si l'angle entre -g et (accélération-g) n'est plus négligeable, tu aura une erreur du même ordre de grandeur dans ton estimation de l'inclinaison.


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#8 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 095 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 27 janvier 2021 - 12:46

 

J'ai modifié le programme de GreatScot! que j'ai mis à ma sauce. La sortie se fait sur le Moniteur Série.

Cela fonctionne comme un niveau à bulle. Ici, c'est l'axe Y qui tourne autour de l'axe X.

La plage des valeurs va de 8° à 180°. Quand le niveau à bulle est à l'horizontale, la valeur est de 90°.

 

// modified ref. https://www.instructables.com/DIY-Digital-Spirit-Level/ and GreatScott! https://youtu.be/USa3HFLnrlk
#include "Wire.h"
#define MPU9250_ADDRESS 0x68
#define ACC_FULL_SCALE_2_G 0x00
byte Buf[14];
 
void setup() {
  Serial.begin(9600);
  Wire.begin();
  I2CwriteByte(MPU9250_ADDRESS, 29, 0x06);
  I2CwriteByte(MPU9250_ADDRESS, 28, ACC_FULL_SCALE_2_G);
  I2CwriteByte(MPU9250_ADDRESS, 108, 0x2F);
}
 
void loop() {
  I2Cread(MPU9250_ADDRESS, 0x3B, 14, Buf);
  Serial.print("\n\t ay=");Serial.print(-(Buf[2]*256/182.04),0);
  delay(500);
}
 
void I2Cread(byte Address, byte Register, byte Nbytes, byte* Data){
  // Set register address
  Wire.beginTransmission(Address);
  Wire.write(Register);
  Wire.endTransmission();
  // Read Nbytes
  Wire.requestFrom(Address, Nbytes);
  byte index = 0;
  while (Wire.available())
  Data[index++] = Wire.read();
}
 
void I2CwriteByte(byte Address, byte Register, byte Data){
  // Set register address
  Wire.beginTransmission(Address);
  Wire.write(Register);
  Wire.write(Data);
  Wire.endTransmission();
}
 

 

 

 

Comme évoqué plus haut, le divisé par 182.04 est une approximation grossière ... 

Normalement l'effort en du vecteur gravité projeté sur l'axe y est censé s'exprimée en K*sin(Teta )  ( ou K * cos(Teta) en fonction d'où tu considère ton 0° ) 

De sorte à ce que à 0° on se retrouve avec un effort nulle sur l'axe ( ou à 90° si on prend la formule avec le cosinus ) et à inversement à 90° on a la valeur la plus importante ... 
Tu peux tester d'incliner ton robot à 45° et regarder si ça t'affiche bien 45° sur le moniteur série pour t'en convaincre ...
 

Donc en théorie tu devrais pouvoir améliorer la précision en faisant : 

angle =  arcSin( accelY / K )    (ou arcCos en fonction de où tu veux ton 0 ... ) 

AccelY c'est la valeur que tu mesure en Y , K c'est la valeur maximum que tu as ( ça représente la constante de gravité à l'échelle prêt...  car doit être exprimé dans les même unités que accelY)


Sinon pour le reste ce qui devrait t'intéresser c'est d'utiliser le filtre de magwick. ça marche très bien avec L'imu mpu9250. ça te permet d'avoir la position angulaire de ton imu sur ses 3 axes. C'est un peu compliqué pour un novice complet mais tout se trouve tout fait sur internet =) . 

Et tu verras ce que sont les quaternions ... Mais c'est peut être un tout petit peu complexe pour toi pour le moment et tu seras peut être d'abord intéressé par faire de l'intégration continue de le vitesse de rotation sur l'axe z. Ce qui normalement devrait être suffisant pour ton besoin.

Le principe :
Au départ ton angle = 0;
Tu lis la valeur de gz ( qui représente une rotation / secondes)  en boucle, tout en notant le temps écoulé entre 2 lectures que l'on note DeltaT . 
Et tu fais angle += gz * deltaT. 



 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#9 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 969 messages
  • Gender:Male

Posté 27 janvier 2021 - 05:47

L'utilisation de ce type de capteur est hors de ma portée. 

Je vais peut-être approfondir celui proposé par Sandro, le ADA2472 basé sur un BNO-055, mais sans y consacrer trop de temps.

 

Merci pour votre aide.



#10 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 095 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 27 janvier 2021 - 06:34

Si je te propose des bouts de code complet tu appliqueras ? 

Je souhaite te montrer que ce n'est pas hors de ta portée =). 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#11 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 969 messages
  • Gender:Male

Posté 27 janvier 2021 - 07:20

Si je te propose des bouts de code complet tu appliqueras ? 
Je souhaite te montrer que ce n'est pas hors de ta portée =). 

Je te remercie Mike.

J'ai passé trop de temps là dessus. J'ai besoin de faire autre chose, mais je reviendrai certainement sur le sujet.



#12 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 095 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 27 janvier 2021 - 07:47

Bon eh bien quand tu voudra essayer à nouveau tu pourras essayer ça: 

 

#include <MPU9250.h>
 
// an MPU9250 object with the MPU-9250 sensor on I2C bus 0 with address 0x68
MPU9250 IMU(Wire,0x68);
 
void setup() {
  // serial to display data
  Serial.begin(9600);
  while(!Serial) {}
 
  // start communication with IMU 
  int status = IMU.begin();
  if (status < 0) {
    Serial.println("IMU initialization unsuccessful");
    Serial.println("Check IMU wiring or try cycling power");
    Serial.print("Status: ");
    Serial.println(status);
    while(1) {}
  }
  for (uint8_t i = 0; i < 100; i++)
   computeHeading(false);                // on initialise le biais, ne pas bouger l'IMU pendant ce temps là
}
 
void loop() {
  Serial.print("heading : ");
  Serial.print(computeHeading(true),6);
  Serial.print("°\t gyro : ");
  Serial.print(IMU.getGyroZ_rads(),6);
  Serial.println("rad /s");
}


float computeHeading( bool isMoving) {
    // Variables static qui seront réutilisée d'une itération sur l'autre 
    static uint32_t previousTime = micros();                 
    static float heading = 0;
    static float biais = 0;

    uint32_t now = micros();
    IMU.readSensor();                                        // On lit les données du capteurs
    float gyroSpeedZ = degrees(IMU.getGyroZ_rads());         // On récupère la vitesse de rotation en Rad /s selon l'axe z et on la convertie en degrées 

    if( isMoving && abs(gyroSpeedZ) > 1) {
     uint32_t deltaTime = now - previousTime;                 // On calcul le delta de temps depuis la dernière mesure en microsecondes (µs)
     heading += (gyroSpeedZ - biais) * deltaTime * 1e-6;      // On intègre la vitesse de rotation pour obtenir l'angle avec 1e-6 permet de convertir les µs en secondes

     //On remet l'angle entre -/+ 180 °
     if(heading > 180) 
      heading -= 180; 
     else if(heading < -180)
      heading += 180;
      
    } else {
      biais = (99 * biais + gyroSpeedZ) / 100;                // On calcul le biais avec une moyenne de 100 valeurs ...
    }

    previousTime = now;                                       // On sauvegarde notre référence de temps pour la prochaine itération du calcul.
    return heading;
}


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#13 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 969 messages
  • Gender:Male

Posté 28 janvier 2021 - 01:19

J'ai testé ton programme. Il fonctionne bien, malgré une dérive au bout de quelques déplacements. Je ne pense pas que cela provienne de mon banc de tests.

Tu utilises une variable  "biais", y a t-il un rapport avec les fonctions bias de la bibliothèque ?

Qu'elle est la signification de ce terme, en dehors du sens premier ?

 

Merci Mike.



#14 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 314 messages
  • Gender:Male

Posté 28 janvier 2021 - 02:13

Les gyromètre, comme beaucoup de capteurs, ont un biais (aussi appelé offset), c'est à dire que toutes les valeurs affichées sont décalées de cette valeur.

Ainsi, si le biais de ton gyromètre est (par exemple) de +1°/s, alors :

- si ton robot est immobile, le gyromètre renverra 0+1=1°/s

- si ton robot tourne de +10°/s, il renverra 10+1=11°/s

- si ton robot tourne de -3°/s, il renverra -3+1=-2°/s

...

 

Le gros problème, est que si tu intègre la vitesse angulaire pour connaître ton orientation, tu intègres aussi l'offset : tu auras donc une dérive de biais*durée. Si l'offset est de 1°/s, alors au bout de 3 minutes, tu aura une erreur de 180° sur l'orientation de ton robot.

 

 

La solution, c'est d'estimer ce biais, pour le soustraire.

Certains capteurs ont un biais vraiment fixe, donc on peut calculer la valeur une fois pour toute (par exemple un capteur de distance très précis, mais qui est montée 1cm derrière l'endroit où il aurait du être : il affichera toujours 1cm de trop). Mais la plupart des capteurs électroniques ont une biais qui change (entre autre avec la température, la tension d'alimentation, ...). C'est pourquoi le mieux est en général de calibrer juste avant l'utilisation. Pour ça, le plus facile, c'est que quand on sait que le robot est immobile (moving==false), on prend la moyenne des valeurs lues : c'est ce que fait Mike.

 

Le "problème", c'est que beaucoup de capteurs ont des biais qui malgré tout varient lentement : donc la calibration n'est plus parfaite au bout de quelques secondes, d'où un dérive (beaucoup plus lente néanmoins que sans calibration du tout)


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#15 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 095 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 28 janvier 2021 - 05:20

Sandro a très bien répondu à la question, il y a en effet plusieurs méthodes pour corriger ce biais ( filtrage), là j'ai proposé une méthode simple sans prendre les outils qui sont présent dans la librairie. Le but étant de comprendre ce qui était derrière et de voir le problème ... J'avais même hésite à poster d'abord un code qui ne prendrait pas en compte le biais ... Mais je me suis ravisé en me disant que sandro viendrait sans doute me rappeler à l'ordre ;)

Bien entendu il existe des filtres beaucoup plus performant. Dont le filtre de magwik AHRS. 

100 données c'est pas énorme pour le biais ... 

Mais du coup est ce que ça t'intéresse de creuser un peu plus ce thème maintenant que tu vois un peu les tenants et aboutissant ? 

 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#16 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 969 messages
  • Gender:Male

Posté 28 janvier 2021 - 06:50

Mais du coup est ce que ça t'intéresse de creuser un peu plus ce thème maintenant que tu vois un peu les tenants et aboutissant ?

Merci à vous deux pour votre aide et vos explications. Non, je ne poursuivrai pas avec ce type de capteur.
J'ai commandé d'autres capteurs, j'en reparlerai quand je les recevrai et si cela fonctionne correctement.
En attendant de les recevoir, je passe à autre chose.

Merci encore, à vous deux.



Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users