21 juillet 2016 Cas Utilisateur

La Suite Elastic au coeur d’un système de géolocalisation par trilatération sur un réseau LoRaWan

Par Sebastien AvrilStéphane BergerJean-Yves BottraudLoïc Fagno

Etudiants en Master 2 Professionnel Génie Informatique (M2PGI) dans l’unité de formation et de recherche IM²AG de l’Université Grenoble Alpes, nous avons mené un projet de géolocalisation par trilatération en utilisant la Suite Elastic, dans le cadre de l’enseignement de Services Machine à Machine (M2M).

Le but de ce projet était de calculer la position d’un émetteur LoRaWan sans système de géolocalisation mais uniquement à partir de la position de trois récepteurs et de la puissance du signal reçu par ces trois récepteurs. L’idée était d’obtenir la localisation de l’émetteur en temps (quasi) réel et de découvrir de nouveaux outils.

Toute les 5 secondes, l'émetteur produit une trame numérotée contenant son identifiant. Chaque récepteur recevant la trame va ensuite la transmettre au serveur en la complétant avec son identifiant, ses coordonées GPS et la puissance du RSSI à la réception de la trame. Sur le serveur, les trames sont traitées par les produits open source de la Suite Elastic : Elasticsearch, Kibana et Logstash.

Traitement des données de localisation avec Logstash

Logstash est utilisé pour parser et réunir les logs entrants provenant des récepteurs pour :

  • Envoyer les données dans un processus de calcul de position par triangularisation
  • Enregistrer la position calculée de l’émetteur dans Elasticsearch.

Dans la première étape, Logstash gère les logs dans un répertoire. Il traite les fichiers de log de manière à réunir chaque ligne en fonction de l’identifiant de l’émetteur, du numéro d’index de la trame et de l’identifiant du récepteur. Pour effectuer ce travail, nous utilisons la commande “grok” pour récupérer les données lues dans les fichiers de logs (parsing des lignes du fichier de log).

Le filtrage par aggrégation est ensuite utilisé pour réunir des données communes à un émetteur. Chaque aggrégat détient un identifiant unique, il reçoit et stocke les données des récepteurs (limité à trois dans notre projet), puis les envoie au programme de trilatération pour effectuer les calculs de positionnement. La position calculée est alors sauvegardée dans un autre fichier de log unique.

C’est alors que le deuxième rôle de Logstash commence. Toujours par un système de parsing de logs - ici les logs relatifs à la position calculée d’un émetteur - nous transformons l’information en une structure de données spécifique à Elasticsearch pour le positionnement de point GPS : structure GEO POINT. Pour effectuer cette transformation, une modification du fichier de configuration de Logstash a été nécessaire.

La mise en place de la configuration du système fût assez simple. Les exemples fournis ainsi que la documentation nous ont permis de prendre rapidement en main Logstash mais nous avons rencontré quelques difficultés pour résoudre nos erreurs (même en utilisant le mode debug et verbose).

Sauvegarde des positions calculées dans Elasticsearch

Pour la suite de ce projet, la configuration par défaut des outils Elasticsearch et Kibana nous ont permis de gagner un temps précieux grâce à leur interconnectivité. La commande de sortie “elastic" de Logstash nous a permis de créer un index contenant toutes nos données sans effort. La partie la plus compliquée, mais pas forcément nécéssaire, était de modifier le template d’intégration des données de Logstash vers Elasticsearch afin d’avoir un type unique de GEOPOINT. N’étant pas encore familiers avec la structure GEOIP, nous avons préféré rechercher comment créer et intégrer notre propre structure au projet. Là encore, l’accessibilité du template et ses modifications ont été rapide grâce à l’adaptabilité de ces outils.

Visualisation de la position de l’émetteur sur une carte dans Kibana

Dans cette dernière étape, nous récupérons les données dans Elasticsearch puis nous les envoyons vers Kibana afin d’afficher les points correspondant aux positions de l’émetteur sur une carte. Ici, simplement avec le nom de l’index, nous avons pu vérifier les valeurs avant de créer une visualisation de type “tile map” en sélectionnant les données à utiliser.

geolocalisation-kibana.png

Une fois tous nos points affichés sur une carte, nous avions enfin terminé la chaine d’exécution permettant de récupérer la position de l’émetteur.

Une remarque que l’on peut faire, est que Kibana semble être un outil très performant pour observer des statistiques et nécessite une adaptation que nous demandons; à savoir : l’affichage d’une série de points de localisation proches sur une carte. En effet, nous avons pu constater un manque de précision notable qui se rajoutait à la faible précision des points d’origine et faussait en partie nos résultats.