Dans le cadre d’un projet de recherche, j’ai testé un senseur de chez X-Sens: X-Sens Dot :
Ce capteur doit permettre de remonter des informations accélération pour l’expérience. Devant la documentation en ligne sur ce dispositif et avec l’accord du support très réactif de l’entreprise X-sens, je pense qu’un tutoriel plus complet sur ce dispositif peut être utile au plus grand nombre.
Des informations actuellement que je dispose, je n’ai pas trouvé de solution pour connecter mon Windows 10 sur le X-Sens, le développement se fait via mon smartphone android (un samsung S10+) et avec Android Studio.
Je ne peux que vous conseiller de télécharger l’application officielle (xsensdot-apk-v2020.0.apk en Avril 2020) de X-Sens pour les X-Sens Dot et le SDK X-Sens Dot dans la rubrique Software/Wearable Sensor: https://www.xsens.com/software-downloads
Le SDK contient une documentation PDF et .chm et un fichier XsensDotSdk.aar qui a servi de base à ce tutoriel.
1/ Démarrage d’Android Studio
En premier lieu créons dans Android Studio un nouveau projet se basant sur une Activity vide:
Configuration du projet avec un nom, un nom de package, un dossier de stockage et surtout une version de SDK minimale à API 22 selon les recommandations de la documentation:
En premier ajoutons les droits spécifiques et nécessaire sur cette application, il est à noter que je déploie sur un smartphone réel et non vers l’émulateur. Je trouve que c’est plus rapide et plus efficace de développer sur un smartphone réel en suivant ces recommandations sur developer.android.com.
Ajoutons donc ces permissions, qu’il faudra activer aussi sur le smartphone individuellement pour Storage et Position (voir plus bas dans le tutoriel):
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2/ Importation de XsensDotSdk.aar
L’importation d’un module aar se fait en plusieurs étapes que j’ai découvert avec ce projet.
En premier lieu, il faut indiquer l’importation de ce module via le Menu File > New > New Module … puis choisir « Import .JAR/.AAR Package » , faire Next:
Indiquer le chemin vers le module XsensDotSdk.aar (pour le nom du subproject le laisser par défaut):
Ce n’est pas parce que le module est importé en tant que subproject que notre projet a une dépendance envers lui.
Donc, Menu File > Project Structure … > puis Dependencies > app (notre projet par défaut) puis le petit bouton + (Add Depency) puis choisir « Module Depency » :
Indiquons que l’on veut une dépendance vers XsensDotSDK, Ok pour valider cette fenêtre et ensuite de nouveau OK pour valider la fenêtre précédente:
Une phase de build se déclenche plus ou moins longue selon la performance de son ordinateur…
3/ Utilisation des classes du XsensDotSdk.aar
Nous allons travailler dans ce tutoriel sur la MainActivity, ce n’est pas l’idéal mais pour un développement de test nous pouvons réaliser un premier essai.
Ajoutons l’implémentation des classes XsensDotDeviceCv et XSensDotScannerCb:
Nous avons une erreur d’importation que l’on règle en laissant la souris sur les 2 classes problématiques, IntelliJ nous propose d’importer les packages manquants:
Nous pouvons maintenant aussi fabriquer les implémentations manquantes pour les méthodes nécessaires aux classes XsensDotDeviceCv et XSensDotScannerCb en survolant avec notre curseur ces dernières:
L’ajout de toutes les méthodes se fait rapidement:
4/ Développement des fonctions de connexion au X-sens DOT
Nous allons donc coder dans la méthode onCreate encore une fois par simplicité puis nous détecterons que le smartphone a bien trouvé le X-Sens Dot en mettant un point d’arrêt dans la méthode onXsensDotScanner:
public void onXsensDotScanned(BluetoothDevice bluetoothDevice) {
Donc on code une propriété mxScanner
private XsensDotScanner mXsScanner;
Puis dans la méthode onCreate :
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String version = XsensDotSdk.getSdkVersion(); XsensDotSdk.setDebugEnabled(true); XsensDotSdk.setReconnectEnabled(true); mXsScanner = new XsensDotScanner(this.getApplicationContext(), this); mXsScanner.setScanMode(ScanSettings.SCAN_MODE_BALANCED); mXsScanner.startScan(); }
Enfin un bout de code pour récupérer les informations sur le device:
@Override public void onXsensDotScanned(BluetoothDevice bluetoothDevice) { String name = bluetoothDevice.getName(); String address = bluetoothDevice.getAddress(); }
Choisissez ensuite votre smartphone (il faut que le débuggage soit possible sur ce smartphone d’ailleurs cf developer.android.com) puis le bouton « débug app » :
Voici les indications de débugage avec les adresses (factice sur cet écran) de réponse:
Ajoutons maintenant la récupération des données par le capteur en ajoutant une nouvelle propriété et en modification la méthode onXsensDotScanned:
Nouvelle propriété: xsDevice pour gérer la connexion à notre Xsens Dot
private XsensDotDevice xsDevice = null;
Nouvelle version de onXsensDotScanned
@Override public void onXsensDotScanned(BluetoothDevice bluetoothDevice) { String name = bluetoothDevice.getName(); String address = bluetoothDevice.getAddress(); xsDevice = new XsensDotDevice(this.getApplicationContext(), bluetoothDevice,MainActivity.this); xsDevice.connect(); xsDevice.startMeasuring(); }
Notre X-Sens Dot devrait capture les données dans la méthode onXsensDotDataChanged et l’envoyer dans le loger LogCat d’Android:
@Override public void onXsensDotDataChanged(String address, XsensDotData xsensDotData) { Log.i( "XsensDot", "onXsensDotDataChanged " + address + " " + xsensDotData ); }
Nous lançons le débugage avec un point d’arrêt sur l’évènement onXsensDotDataChanged et un regard sur le LogCat dans IntelliJ:
Aucune donnée n’arrive sur la méthode onXsensDotDataChanged….
5/ Ajout des droits dans le smartphone
Les données n’arrivent pas car il faut ajouter les droits sur l’application directement sur ce dernier. j’avais eu déjà le problème avec les IMU embarquées dans le smartphone.
Il faut donc aller sur l’application, faire un appuie long, puis choisir « Infos sur l’appli. » puis dans l’écran « informations sur l’application » choisir le menu « Autorisations » puis accepter les 2 autorisations « Localisation » et « Stockage » pour enfin pour relancer l’application avec les droits complets:
Et donc récupération des données sur un point d’arrêt du débug quand les données arrivent:
6/ Liaison Xsens DOT – Smartphone Android – Code JAVA
Pour la récupération des données de l’accélération angulaire sur X du capteur Xsens DOT, j’ai utilisé une liaison bluetooth additionnel de type Port COM à 115200 bauds avec un programme en Java sur mon PC:
Vous pouvez constater sur la vidéo ci-dessous que le résultat est quand même assez impressionnant, la rotation de ma main déclenche bien le déplacement du point rouge sur le smartphone et l’envoie au PC de l’information Gauche/Droite/Centre pour faire réaliser le même déplacement au point vert.
Il y a un délais bien sur entre la modification d’orientation et le déplacement du point. L’algorithme doit être améliorer pour diminuer ce délais.
7/ Nouvelle version des SDK de Xsens
Suite à la conférence d’Avril 2020 de Xsens, j’ai la possibilité de récupérer les données directement depuis le PC. Donc la nouvelle version doit être directement développée sur l’ordinateur pour récupérer les données via le protocole Bluetooth BLE.
Pour simplifier le développement sur Windows, j’ai développé le code en C#. En effet, mes anciens développement avec le bluetooth m’ont montré que ce langage est le plus proche du système d’exploitation sur windows; aucune surprise le langage C# appartient à Microsoft. Du coup, je pense que les ouvertures/fermetures des canaux de communication bluetooth BLE seront simplifiées par ce langage de programmation.
Mon conseil est d’en premier lieu de travailler à partir du document « Xsens DOT BLE Services Specifications » proposé en téléchargement par Xsens sur son site internet. Ce document indique bien une évolution dans l’accès à certaines données envoyés par la nouvelle version (1.3) des Xsens. Personnellement, je vais continuer à utiliser la version 1.0.0 car moins de données = plus simple à interpréter.
Nota: attention au format big-endiant/little-endian des données, j’ai passé un peu de temps en lisant les octets dans le mauvais ordre.
Ce n’est pas encore standardisé, heureusement la documentation indique « All the big-endian members will be changed to little-endian in the next firmware release ».
Le développement a du être mis en stand-by pour cause de projet en parallèle, mais les premiers résultats sont encourageant. Le standard Bluetooth BLE est bien accepté par le xSens DOT comme montre la vidéo suivante qui affiche les accélérations du composant sur un seul axe.
Démonstration de la liaison bleutooth BLE du Xsens avec un développement C# sur un PC Windows 10 Pro version 18362 (Indiquer ma version n’est pas anodin pour le développement bluetooth BLE).