PM2M-2016-GeolocOutdoor/Suivi

From air
Revision as of 21:57, 12 April 2016 by BERGER.STEPHANE (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Géolocalisation Outdoor sans GPS par Trilatertion RSSI

Etudiants M2PGI PM2M: AVRIL Sébastien, BOTTRAUD Jean-Yves, FAGNO Loïc, BERGER Stéphane


Dépôt Git : github

Documents : Rapport - Transparents - Flyer - Video


Objectif

Réaliser un service temps-réel de géolocalisation outdoor sans GPS (ie tres basse consommation d'energie) en long range (LoRa). Le service sera mis en oeuvre au moyen de Spark Streaming.


Contexte

Algorithmes existants :


Bases de code:

Objectif du projet

Matériel utilisé

Technologies utilisées

Plan de développement

  • Etude de faisabilité
  • Mise en place des outils
  • Développement de la fonction de trilatération
  • Tests


Mise en place de l'infrastructure

Programmation du modem Nucleo LoRa

Compiler et flasher le programme suivant via Mbed


Pour flasher les STM32 Nucleo, il est préferable d'utiliser l'utilitaire sous Windows STSW-LINK004 de ST et OpenOCD sous Linux/MacOS en utilisant avec le bon fichier de configuration : par exemple, scripts/board/st_nucleo_l1.cfg pour les Nucleo L1XX.

Pour plus d'info sur le STM32, https://leanpub.com/mastering-stm32

Définition des formats de messages envoyés

LoRaMote --> Modem LoRa Nucleo

Modem LoRa Nucleo -- (SERIAL PORT) --> Host

  • RX;modem;size;rssi;snr;freq;bw;sf;cr;buffer

Host --> Spark

  • timestamp_host;host_id;devaddr;modem;size;rssi;snr;freq;bw;sf;cr;latitude_host;longitude_host;altitude_host
  • timestamp_host;host_id;devaddr;modem;size;rssi;snr;freq;bw;sf;cr;latitude_host;longitude_host;altitude_host;number_satellites_host
  • timestamp_host;host_id;devaddr;modem;size;rssi;snr;freq;bw;sf;cr;latitude_host;longitude_host;altitude_host;latitude_mote;longitude_mote;altitude_mote;number_satellites_mote


latitude_mote;longitude_mote;altitude_mote;number_satellites_mote servent à calculer la précision de la trilatération calculée par les algorithmes de LBS par RSSI.

Ecriture de générateurs de messages

Afin de tester les algorithmes

Enregistrement des messages

En vue de les rejouer sur les algorithmes

Ajout d'un timestamp_cluster à chaque message.

Envoi des messages avec Logstach

Calcul de trilatération avec Spark en Scala

Modifcation du code de la LoRaMote

Affichage dans Kibana

  • Affichage des positions sur une carte
  • Graphe d'évolution de la précision de l'estimation par RSSI

Expérimentations et Résultats

Lecture de la valeurs RSSI

Afin de vérifier nos résultats il fallait connaître le rapport entre distance et RSSI. D'après la documentation du module nous avons :

RSSI (dBm) = -157 + Rssi pour une émission LF ou RSSI (dBm) = -164 + Rssi pour une émission HF.'

d'après les informations documents trouvées sur le web nous avons :

RSSI = -(10*n)* log10(d) + A

A = valeur RSSSI à 1 mètre (mesurée ) et n = 2 valeur constant de propagation des ondes dans l'air.

on en tire alors la formule pour la distance en fonction du RSSI.

d = 10exp((RSSI-A)/(10*n))

D'après la lecture sur le port série nous avons -28 Dbm à 1 mètre.

Trilatération

Les calculs de trilatération se base sur le schéma suivant :

Trilateration schema.png

Le calcul se faisant sur les trois coordonnées GPS, il faut effectuer un changement de repère dans un premier temps puis calculer la coordonnée du point dans le nouveau repère. Ensuite effectuer l'opération inverse pour trouver les coordonnées GPS. Les coordonnées GPS étant en °, il faut avant tout calcul les transformer en coordonnées (x,y,z ). Nous nous sommes basés sur le calcul des coordonnées sphériques.

ElasticLogstashKubana

Logstash : Création d'un fichier de conf pour récupérer les données dans de fichiers de log et les filtrer. Dans un premier temps on filtre les données reçues par les récepteurs LoRa, puis on les envoie sur dans un bash pour le calcul. Le bash met a jour un fichier de log que Logstash filtre aussi mais transmet les données à Elastic search. Pour cela, il a fallut modifier le fichier template de Logstah.

Tests

On a décidé d'utiliser trois de nos habitations car :

- elles  sont en en étage.
- elles sont à des distances raisonnables (2 km max)
- Il y a un accès à internet pour envoyer les données sur le serveur.


Résultats

Demo Points Theorique.pngKubana.png

Problèmes rencontrés

  • RSSI : Impossible de valider la valeur RSSI par rapport à la distance (mesures réelles comparées avec la formule de calcul)
  • Trilatération : le calcul nécessite une transformation des coordonnées GPS en sphérique (x,y,z) puis un changement de repère : notre algorithme donne des résultats insatisfaisants
  • Logstah : Après la réception de 3 trames d'un émetteur provenant de 3 recepeteurs, on envoie les données du parse dans un output de type EXEC qui appelle notre trilatération. Blocage de logstash de manière aléatoire sur EXEC, même si le EXEC est un simple écho .
  • Elasticsearch : utilise un type geopoint. Il faut intégrer un template à Logstash pour définir cette structure
  • Kubana : le nom des index utilisés est défini dans le template de Logstah (Logstash-*). Si on donne un nom d'index différent, il ne sera pas pris en compte par Kubana. Mettre un * dans le template de Logstash.


Photos et Vidéo

SmallTestReception1.jpg