BerryIMU s’exécutant sur Raspberry Pi exécutant Windows IoT

BerryIMU s'exécutant sur Raspberry Pi exécutant Windows IoT

BerryIMU fonctionne également très bien avec Windows IoT Core sur le Raspberry Pi.

YouTube video

Notre référentiel Git contient les fichiers sources nécessaires pour que BerryIMU soit opérationnel sur Windows IoT.

Le code imprimera les valeurs suivantes à l’écran ;

  • Valeurs brutes du gyroscope, de l’accéléromètre et du magnétomètre.
  • Angles calculés par accéléromètre.
  • Angles suivis par gyroscope.
  • Angles X et Y fusionnés.
  • Titre.
  • Cap compensé en inclinaison.

Connecter BerryIMU à un Raspberry Pi

BrryIMU peut se connecter via les câbles de démarrage au Raspberry Pi comme indiqué ci-dessous ;
Framboise Pi BerryIMU

Gyromètre accéléromètre IMU Raspberry Pi

Ou BerryIMU peut s’asseoir juste au-dessus des broches GPIO d’un Raspberry Pi. Les 6 premiers GPIO sont utilisés comme indiqué ci-dessous.

Gyromètre accéléromètre IMU Raspberry Pi

Téléchargez le code BerryIMU pour Windows IoT depuis notre GIT dépôt. Les fichiers dont vous avez besoin se trouvent sous le WindowsIoT-BerryIMU dossier.

Vous devrez télécharger l’intégralité du référentiel git car GIT ne permet pas de télécharger des dossiers individuels.

Une fois téléchargé, double-cliquez sur le fichier WindowsIoT-BerryIMU.sln ouvrir le projet dans Visual Studio.

Le code du projet affiche toutes les valeurs nécessaires sur l’écran et un filtre complémentaire est utilisé pour fusionner les angles de l’accéléromètre et du gyroscope.

Nous avons déjà documenté un certain nombre de guides sur la façon de faire fonctionner le BerryIMU avec le Raspberry Pi.
https://www.raspberryme.com/berryimu/
Ceux-ci sont basés sur Raspbian, mais les principes et les mathématiques sont les mêmes pour Windows Iot.

Les valeurs finales qui doivent être utilisées sont les angles X et Y fusionnés et le cap compensé en inclinaison.

Le capteur sur le BerryIMU est le LSM9DS0 et tous les registres I2C pour ce capteur se trouvent dans LSM9DS0.cs

Le code principal se trouve dans MainPage.xaml.cs

Accéléromètre gyroscope BerryIMU Raspberry Pi

Filtre complémentaire

Un filtre complémentaire est utilisé pour fusionner les angles. En résumé, le filtre complémentaire fait confiance au gyroscope pour de courtes périodes et fait confiance à l’accéléromètre pour de plus longues périodes ;

CFangleX = AA * (CFangleX + (rate_gyr_x * DT / 1000)) + (1.0f - AA) * AccXangle;
CFangleY = AA * (CFangleY + (rate_gyr_y * DT / 1000)) + (1.0f - AA) * AccYangle;

La modification de la confiance accordée à chacun des capteurs peut être modifiée en modifiant la constante de filtre complémentaire au début du code.

const float AA = 0.03f;     // Complementary filter constant

Vitesse de boucle

La vitesse de boucle est importante car nous avons besoin de savoir combien de temps s’est écoulé pour calculer les degrés de rotation par seconde sur le gyroscope.
Un delta de temps est défini au début du code.

const int DT = 100;         //DT is the loop delta in milliseconds.

Ceci est ensuite utilisé pour spécifier une nouvelle méthode de minuterie.

periodicTimer = new Timer(this.TimerCallback, null, 0,DT);

Ici, vous pouvez voir où DT est utilisé pour suivre l’angle du gyroscope. Vous pouvez également le voir dans le calcul ci-dessus pour le filtre complémentaire.

//Calculate the angles from the gyro
gyroXangle += rate_gyr_x * DT / 1000;
gyroYangle += rate_gyr_y * DT / 1000;
gyroZangle += rate_gyr_z * DT / 1000;

Orientation BerryIMU

Les calculs dans le code sont basés sur la façon dont le BerryIMU est orienté. Si BerryIMU est à l’envers, certains angles doivent être inversés. Il est à l’envers lorsque le logo du crâne est tourné vers le haut (ou vers le ciel).
S’il est à l’envers, définissez la valeur ci-dessous sur true. Sinon, définissez-le sur false.

bool IMU_upside_down = true;

.