Analyse de données Kinect et Xsens
Cette page explique comment extraire la courbe de position d'un segment du corps à partir d'un enregistrement fait par la Kinect et par le Xsens et comment comparer le bruit des courbes de mouvement.
Obtenir les fichiers de données
Il faut réaliser l'enregistrement avec la kinect et le Xsens de manière simultanée pour que les courbes de mouvements correspondent.
Kinect
Pour enregistrer et obtenir le fichier de données des nouvements avec la kinect suivre le point 2.2.1 de la page: http://wiki-robot.enstb.org/doku.php?id=poppy-kine-2015-s5
Xsens
Pour enregistrer avec le Xsens en utilisant MVN Studio suivre les explications de la page suivante http://wiki-robot.enstb.org/doku.php?id=sensors:x-sens
Pour extraire le fichier de données de mouvement suivre les explications des vidéos suivantes: https://tutorial.xsens.com/video/exporting-mvnx (Pour paramétrer les données à exporter) https://tutorial.xsens.com/video/exporting-data (Pour exporter le fichier)
Structure des fichiers
Kinect
Les fichiers textes contenant les mesures prises par la kinect sont des fichier JSON structuré de la manière suivante
Xsens
Les fichiers mvnx contenant les données extraites du Xsens sont des fichiers XML structurés de la manière suivante :
-La première partie du fichier définit la position initiale des segments du corps.
-La seconde partie du fichier contient les données de position en tant que telles, organisées par type de données et par instant.
Extraction des données
Le but est d'obtenir une matrice par axe de la forme: Cette forme de matrice permettra de représenter la courbe de mouvement d'un segment du corps en fonction du temps et de réaliser des calculs pour évaluer le bruit. Les fichiers de données issus de la Kinect et du Xsens étant différent il faut réaliser deux scripts python d'extraction différent.
Kinect
Pour lire un fichier de données kinect on applique le code suivant:
Xsens
Pour le Xsens il faut d'abord modifier le fichier. Il faut tout d'abord l'enregistrer en tant que fichier XML, par exemple en l'ouvrant sous NotePad++, puis enregistrer sous. Ensuite, il faut retirer la première partie qui définie les position initiales des segments, pour ne garder que ce qui est entre les balises <frames>.
Puis on applique le code suivant pour lire les données:
Affichage des courbes de mouvements
On cherche à afficher en simultané les courbes de mouvements de la kinect et du Xsens pour pouvoir les comparer. Le code suivant permet d'afficher les courbes de mouvement pour un fichier dont le nom est passé en parmaètres dans la ligne de commande ainsi que le segment et l'axe voulu.
On exécute ce script dans la console:
Remarque: Il faut que les fichiers Kinect et Xsens aient le même nom (suivis de leur extension respective) et se trouve dans le même dossier que le script Afficher.py
Le fichier chris1_0 est un enregistrement d'un exercice où la personne lève le bras droit, puis le bras gauche, puis les deux.
On obtient le graphique suivant:
On remarque sur ce graphique que la courbe de mouvement issue des données de la kinect est plus bruitée que celle issue du Xsens. La prochaine étape sera de quantifier ce bruit.
Calcul du bruit
Pour évaluer le bruit nous allons réaliser deux calculs.
Le premier consiste à calculer le nombres de pics de bruit. Pour cela il faut tout d'abord fixer une valeur seuil. Si l'écart de valeur entre deux instant dépasse ce seuil alors on compte un pic. Plus le nombre de pic est élevé, plus le signal est bruité.
Le deuxième calcul consiste à faire le moyenne des valeurs de 5 points consécutifs et de comparer cette valeur à celle du point central (c'est à dire le troisième). Dans le cas idéal, les valeurs sont identique. En pratique, plus les valeurs sont éloignées, plus le signal est bruité. On calcul aussi l'écart-type de l'écart entre le point central et la moyenne des 5 points.
Pour réaliser ces calculs sur un ensemble de fichier on applique les scripts python suivants.
Kinect
Xsens
Le code pour le Xsens est similaire à celui de la kinect. Il faut juste appeler LirePositionXsens () au lieu de LirePositionKinect()