Lecture de données issues de capteurs sur Raspberry Pi

Grove IMU 9DOF V1 sensor

GrovePi est une solution pour adresser les capteurs Grove de SeeedStudio sur Raspberry Pi. De très nombreux capteurs sont disponibles et il est très aisé de la intégrer dans un développement logiciel. Après une recherche rapide, il semble qu'il soit aussi possible d'accéder aux capteurs par un module Node.js. Plusieurs versions de la plate-forme sont disponible. J'ai pris la version actuellement disponible GrovePi+. C'est la deuxième version du produit dont le schéma a été revu et qui présente un chipset plus compact au centre de la carte.

Installation de GrovePi

L'installation des éléments nécessaires pour accéder aux capteurs via GrovePi sont décrits dans les pages suivantes:

Installation des logiciels nécessaires

Les actions pour l'installation sont simplifiées grâce à l'utilisation d'un script qui réalise tout le travail pour vous:

cd ~/Src
git clone https://github.com/DexterInd/GrovePi
cd Src/GrovePi/Script
chmod a+x install.sh
sudo ./install.sh
sudo apt-get clean

Une fois l'installation terminée, la Raspberry Pi redémarre toute seule. Il est alors possible de détecter la plate-forme GrovePi à l'aide de la commande suivante:

sudo i2cdetect -y 1

Vous devriez voir 04 dans le tableau si la détection de la plate-forme s'est correctement passée.

Mise à jour du logiciel embarqué sur la carte GrovePi

Pour la mise à jour du logiciel embarqué sur le micro-contrôleur de la carte, il suffit de réaliser les opérations suivantes:

cd ~/Src/GrovePi/Firmware
sudo ./firmware_update.sh

Si l'opération se déroule sans erreur, votre logiciel est bien mis à jour.

Accès aux données des capteurs

Les capteurs que j'ai actuellement testés sont les suivants:

Chacun de ces 3 capteurs est accessible via I2C sur GrovePi. Malheureusement, à la date de rédaction de ces lignes, le code nécessaire pour faire fonctionner ces capteurs n'est pas disponible dans la bibliothèque GrovePi que nous avons installée précédemment. Il y a tout de même un exemple fonctionnel en Python qui permet de tester que vous accédez bien à l'accéléromètre par exemple, mais rien pour le gyroscope. Et concernant le code disponible pour Node.js, rien n'est disponible pour faire marcher ces capteurs. Bref, après une recherche un peu plus poussée sur le net, j'ai trouvé des paquetages ou du code Node.js permettant d'accéder à ces capteurs.

3-Axis Digital Accelerometer (+-16g)

Pour accéder à l'accéléromètre, il y a un paquetage disponible grâce à npm install. Donc la procédure est très simple.

cd /opt/openrov/cockpit/src
npm install node-grovepi adxl345

3-Axis Digital Gyro

Pour l'accès aux données du gyroscope, il existe un code permettant d'y avoir accès facilement. Malheureusement, celui-ci n'est disponible que sur git-hub. Il est donc nécessaire de le récupérer manuellement et de copier les fichiers dans le répertoire node-modules

cd ~
wget https://github.com/timbit123/ITG3200/archive/master.zip
unzip master.zip
mv ITG3200-master /opt/openrov/cockpit/node-modules/ITG3200
cd /opt/openrov/cockpit/node-modules/ITG3200
npm install

3-Axis Digital Compass

Pour accéder aux données de la boussole, le code existant en Node.js est beaucoup plus ancien et il est nécessaire d'y apporter plusieurs modifications. Pour faciliter l'installation, j'en ai refait un paquetage zip prêt à installer.

cd ~
wget http://stephane.lavirotte.com/perso/rov/hmc5883l.zip
unzip hmc5883l.zip
mv hmc5883l /opt/openrov/cockpit/node-modules/
cd /opt/openrov/cockpit/node-modules/hmc5883l
npm install

IMU 9DOF

Le chipset utilisé sur ce capteur est le MPU-9150. Ce capteur présente l'avantage de fournir toutes les fonctionnalités intégrées dans un même capteur. Cela permet de faire pas mal d'économie si on peut utiliser celui-ci. Mais en fait, toutes les bibliothèques testées et utilisées ne rendent que les informations séparées d'accélération, d'orientation et de boussole (paquetages Node.js trouvés, pas tous fonctionnels, mais tous insuffisants). Or tout l'intérêt d'une centrale inertielle est de pouvoir fournir les informations de manière intégrée sous la forme de 3 angles yaw, pitch et roll qui donnent l'orientation selon les 3 axes. Je me suis donc mis en quête d'une bibliothèque qui fournisse les bonnes informations.

J'ai trouvé une bibliothèque et des programmes C++ (RTIMULib2) permettant non seulement de récupérer les valeurs, mais aussi de réaliser la calibration du capteur (en faisant bouger le capteur selon les 3 axes et en permettant de sauvegarder les données minimales et maximales fournies par le capteur pour définir l'échelle des valeurs; c'est la même procédure que pour calibrer la boussole de votre smartphone).

Pour compiler RTIMULib, procéder de la manière suivante:"/

git clone https://github.com/RTIMULib/RTIMULib2.git
sudo apt-get install cmake libqt4-dev
cd RTIMULib2/Linux
mkdir build
cd build
cmake ..
make -j 4

Alors que je travaillais à l'intégration de cette bibliothèque avec Node.js (en utilisant Swig pour faire le wrapping des classes et méthodes C++ en Node.js), j'ai trouvé une personne qui était en train de faire la même chose avec la même bibliothèque. J'ai contribué à ce projet pour bénéficier des informations issues de la bibliothèques en Node.js. Il est donc maintenant possible d'avoir un paquetage pour adresser la centrale inertielle depuis Node.js en utilisant nodeimu.

npm install nodeimu
node test.js