Difference between revisions of "PROJET-1FO5 1819 SkiLocator"

From air
Jump to navigation Jump to search
(Created page with "=Ski Locator= ''Description ICI'' 300px =Équipe du projet= {| class="wikitable" |- ! scope="col" width="200px" | Membre ! scope="col" | Rôles |- |Quent...")
 
 
(39 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
=Ski Locator=
 
=Ski Locator=
   
  +
La recherche d’un ski perdu est une expérience déplaisante de par l’effort que nécessite la recherche ainsi que de par l’idée de devoir avoir à acheter une nouvelle paire de ski. La présence de poudreuse rend d’autant plus difficile cette recherche car il est parfois impossible de retrouver des traces du ski perdu.
''Description ICI''
 
  +
Le système que nous allons décrire ici a pour but de remédier à ce problème en utilisant les moyens modernes offerts par l’IoT. Nous avons décidé de nommer notre produit HuSki en références aux chiens de traineaux réputés pour leur ténacité et leur sens de l’odorat.
   
  +
HuSki se décline en trois composants:
[[File:.png|300px]]
 
  +
* La HuCard, une carte dans un boîtier fixé sur les skis. Cette carte traque les skis et envoie leur position GPS par communication LoRa.
  +
* La HuConnect, une carte dans une coque de téléphone servant de gateway entre la HuCard et l’application mobile. La HuConnect reçoit les données LoRa et les transmet via Bluetooth.
  +
* L’application HuSki, une application mobile android pour géolocaliser les HuCards connectées.
  +
  +
Dans la suite de ce rapport nous allons détailler le fonctionnement de chacun de ces trois composants, les difficultés rencontrées lors du développement et nous finirons avec les ouvertures que ce projet apporte. Cependant, avant de poursuivre, il semble tout de même nécessaire de présenter l’équipe.
  +
  +
  +
[[File:Iot-lora-alliance-logo.png|200px]]
   
 
=Équipe du projet=
 
=Équipe du projet=
Line 11: Line 20:
 
! scope="col" | Rôles
 
! scope="col" | Rôles
 
|-
 
|-
|Quentin Fombaron
+
|Quentin FOMBARON
 
|Chef de projet
 
|Chef de projet
 
|-
 
|-
|Joffrey Ferreira
+
|Joffrey FERREIRA
 
|SCRUM Master
 
|SCRUM Master
 
|-
 
|-
|Tim Lepage
+
|Tim LEPAGE
  +
|Développeur
|
 
 
|-
 
|-
|Titouan Larnicol
+
|Titouan LARNICOL
  +
|Développeur
|
 
 
|-
 
|-
|Thomas Ozenda
+
|Thomas OZENDA
  +
|Développeur
|
 
 
|}
 
|}
   
Line 32: Line 41:
   
 
===Mots clés===
 
===Mots clés===
*
+
* IOT
  +
* Ski
=Présentation=
 
  +
* GPS
  +
* LoRa
  +
* Localisation
  +
* Application mobile
   
  +
=Budget=
   
  +
{| class="wikitable"
=SCRUM=
 
 
Une liste plus actualisé des tâches est disponible sur Trello : ''Trello ICI''
 
==Sprint 1 - Du ... au ... ==
 
 
*
 
 
=Journal=
 
 
==Sprint1==
 
 
{|class="wikitable alternance"
 
|+
 
|-
 
|
 
!scope="col"| Date
 
!scope="col"| GEOURJON Anthony
 
!scope="col"| LEMAIRE Timothée
 
!scope="col"| ROUQUIER Clément
 
!scope="col"| TURRIN Vincent
 
 
|-
 
 
| colspan="6" style="text-align: center; background-color:purple;"| <span style="color:white">SPRINT 1</span>
 
|-
 
 
 
|-
 
|-
  +
! scope="col"| Élément
| rowspan="2" | <span style="color:green">Lundi 29/01/18</span>
 
  +
! scope="col"| Par heure
| rowspan="1" | <span style="color:blue">Tâches</span>
 
  +
! scope="col"| Total
|<!-- Anthony --> style="width: 280px;" |
 
*Récupération du matériel au fablab (Arduino 101)
 
*Tentative d'un flash d'un exemple sur la carte
 
|<!-- Timothée --> style="width: 280px;" |
 
|<!-- Clément --> style="width: 280px;" |
 
*Lecture et compréhension des divers documents produits durant le S9 par les 3 autres membres du projet, un gros travail de conception ayant déjà été effectué en amont de mon arrivée
 
|<!-- Vincent --> style="width: 280px;" |
 
 
|-
 
|-
  +
! scope="row"| Salaire
 
  +
| 120.35
  +
| 19 857.75
 
|-
 
|-
  +
! scope="row"| Batiment/Matériel
| rowspan="1" | <span style="color:blue">Remarques</span>
 
  +
| 5.45
|<!-- Anthony --> style="width: 280px;" style="color:purple" |
 
  +
| 900
*Impossible de faire marcher quelque chose sur la carte pourtant elle est détecté
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*Confrontation de l'idée que m'ont donné les documents de conception avec la vision des autres membres afin d'assurer une divergence de trajectoire aussi faible que possible
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
 
|-
 
|-
  +
! scope="row"| Frais exceptionnel
 
  +
|
 
  +
| 170
 
|-
 
| rowspan="2" | <span style="color:green">Mardi 30/01/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
*Tentative d'un flash d'un exemple sur la carte
 
|<!-- Timothée --> style="width: 280px;" |
 
|<!-- Clément --> style="width: 280px;" |
 
*La technologie de communication entre les cartes et le téléphone s'effectuera sur la base du [https://developer.android.com/guide/topics/connectivity/bluetooth-le.html Bluetooth BLE]. Ayant déjà travaillé sur cette technologie sur le projet [http://air.imag.fr/index.php/UltraTeam UltraTeam], je ferai cette partie.
 
|<!-- Vincent --> style="width: 280px;" |
 
 
|-
 
|-
  +
! scope="row"| Ordinateurs personnels
 
  +
| 6.96
  +
| 1 148.32
 
|-
 
|-
  +
! scope="row" colspan="2"| Total
| rowspan="1" | <span style="color:blue">Remarques</span>
 
  +
| 246€
|<!-- Anthony --> style="width: 280px;" style="color:purple" |
 
*Le bootloader de la carte est broken et ne fonctionne depuis Linux, Avec Windows Timothée y arrive facilement
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*Le BLE est une technologie qui m'avait donné beaucoup de tord durant le précédent projet et il m'intéresse de m'y remettre dessus. le nombre de ressources disponibles est assez peu limité et les ressources existantes ont généralement été conçues pour du HardWare spécial
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
 
|-
 
| rowspan="2" | <span style="color:green">Mercredi 31/01/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
*Cours de management de projets innovants - 4h
 
|<!-- Timothée --> style="width: 280px;" |
 
*Cours de management de projets innovants - 4h
 
|<!-- Clément --> style="width: 280px;" |
 
*Cours de management de projets innovants - 4h
 
*Analyse du code d'[https://github.com/ultratrail/mobapp2 UltraTeam] pour voir ce qui est récupérable du travail déjà effectué dans le cadre du projet antérieur
 
|<!-- Vincent --> style="width: 280px;" |
 
*Cours de management de projets innovants - 4h
 
*Etude problématique projet
 
*Formation tensorflow : tuto simple, structure du code et concepts de base
 
|-
 
 
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple" |
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*Je ne récupérerai que peu de code du précédent projet en raison du nombre important de bricolage. J'ai décidé de me rebaser quasi-exclusivement sur le [https://github.com/googlesamples/android-BluetoothLeGatt GoogleSample BleGATT]
 
|<!-- Vincent --> style="width: 280px;" style="color:purple"|
 
|-
 
 
|-
 
| rowspan="2" | <span style="color:green">Vendredi 02/02/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
|<!-- Timothée --> style="width: 280px;" |
 
*Tentative de flash sur l’Arduino récupéré par Anthony au fablab, finalement réussi sur Windows.
 
*Essai de l'exemple "HearthRate Monitor" avec connexion Bluetooth.
 
|<!-- Clément --> style="width: 280px;" |
 
*Création d'un [https://github.com/SmartMove-PolytechGrenoble/SmartMove dépot Github] se basant sur un Fork du Google Sample et qui aura ensuite pour but d'être intégré dans l'application finale créée par les autres.
 
|<!-- Vincent --> style="width: 280px;" |
 
*Continuation de la formation TF Visionnage vidéos, notamment conférence sur deep learning adapté à Tensorflow
 
|-
 
 
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
*Travail avec Clément pour faire fonctionner l'exemple en BLE sur son début d'appli. finalement fonctionnel en demandant l'utilisation du GPS sur android (Comme le requière la spécification BLE)
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*Le GoogleSample se base sur un design [https://developer.android.com/reference/android/support/v7/app/AppCompatActivity.html AppCompat], ce qui n'est pas pratique pour l'intégration. Je me souviens avoir eu le même problème sur [http://air.imag.fr/index.php/UltraTeam UltraTeam]. Je le gèrerai cependant de façon opposée -> Au lieu de passer toute mon application sur le même design, je vais transformer le code pour l'utiliser sans ce Framework.
 
|<!-- Vincent --> style="width: 280px;" style="color:purple"|
 
 
|-
 
 
 
|}
 
|}
   
  +
=SCRUM=
==Sprint 2==
 
{|class="wikitable alternance"
 
|+
 
|-
 
|
 
!scope="col"| Date
 
!scope="col"| GEOURJON Anthony
 
!scope="col"| LEMAIRE Timothée
 
!scope="col"| ROUQUIER Clément
 
!scope="col"| TURRIN Vincent
 
|-
 
   
  +
Une liste plus actualisée des tâches est disponible sur [https://trello.com/b/HOoSXhjP/kanban Trello]
   
  +
=Journal=
| colspan="6" style="text-align: center; background-color:purple;"| <span style="color:white">SPRINT 2</span>
 
  +
==Sprint 0 - Du 28/01 au 04/02 ==
|-
 
   
  +
''Lundi 28/01''
|-
 
  +
* Boitier imprimé en 3D pour une meilleure intégration au ski
| rowspan="2" | <span style="color:green">Lundi 05/02/18</span>
 
  +
* Problème de la batterie (rapport taille/poids et autonomie)
| rowspan="1" | <span style="color:blue">Tâches</span>
 
  +
* Application smartphone (Android/iOS)
|<!-- Anthony --> style="width: 280px;" |
 
  +
* Changement de nom : Ski-Locator
*Travail sur le AIR
 
  +
* Rendez-vous avec M. Tourancheau cet après-midi :
*Export des taches backlog sur Trello
 
|<!-- Timothée --> style="width: 280px;" |
 
*Début du code Arduino en partant de l'exemple "HeartRate Monitor"
 
|<!-- Clément --> style="width: 280px;" |
 
*L'APK fournie par un clone du [https://github.com/googlesamples/android-BluetoothLeGatt GoogleSample BleGATT] ne trouve pas toujours les périphériques BLE environnants. Début des investigations
 
|<!-- Vincent --> style="width: 280px;" |
 
|-
 
   
  +
* Établir liste du matériel necessaire
|-
 
  +
* Recherche sur la localisation auto (triangulation)
| rowspan="1" | <span style="color:blue">Remarques</span>
 
  +
* DVA : Radio très longues ondes
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
  +
* Suivi de trajectoire sur le ski, quand on le perd on a une prédiction de la position du ski
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
  +
* Stocker les données sur le ski et l'envoyer que si besoin
*Pas mal de difficultés lors du test, en raison de difficultés de debugging sur l'Arduino.
 
  +
* RSSI pour trouver le ski dans une zone donnée par LoRa Bluetooth
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*L'application fonctionne sans soucis sur les plus anciennes versions d'Android mais semble avoir des soucis à partir d'une certaine version du SDK toujours indéterminée.
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
*Étude des problématiques propres à notre projet : Stream de data, Dynamic Time
 
|-
 
   
   
  +
''Mardi 29/01''
|-
 
  +
* Réalisation de l'architecture et IHM
  +
* Kanban bien avancé, sprint de 1 semaine
  +
* User stories
   
| rowspan="2" | <span style="color:green">Mardi 06/02/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
*Étude avec Vincent d'une application utilisant de la détection de mouvement Tensor Flow sur Android. https://blog.lemberg.co.uk/motion-gesture-detection-using-tensorflow-android
 
|<!-- Timothée --> style="width: 280px;" |
 
*Avancement du code Arduino.
 
|<!-- Clément --> style="width: 280px;" |
 
*Résolution du bug. Il faut depuis le SDK 23 une autorisation de localisation pour faire fonctionner le Bluetooth. [https://stackoverflow.com/questions/32708374/bluetooth-le-scanfilters-dont-work-on-android-m Problème et solution détaillée]
 
|<!-- Vincent --> style="width: 280px;" |
 
*Etude d’un code de reconnaissance de mouvement tensorflow Android, + test, comprendre pour pouvoir modifier en conséquence
 
|-
 
   
  +
''Mercredi 30/01''
|-
 
  +
* IHM
| rowspan="1" | <span style="color:blue">Remarques</span>
 
  +
* Réalisation des maquettes de l'application
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
  +
* Début application Ionic
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
  +
* Récupération matériel
*Résolution des problèmes rencontrés la veille (Mauvais initialisation du module gérant les capteurs), puis travail sur l'envoie des données par blutooth.
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*le problème a également fait l'objet de plusieurs [https://github.com/googlesamples/android-BluetoothLeGatt/pulls Pull Requests] sur le dépo. Certaines ont été validées mais aucune mergées.
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
   
|-
 
| rowspan="2" | <span style="color:green">Mercredi 07/02/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
* Cours de management de projets innovants - 4h
 
|<!-- Timothée --> style="width: 280px;" |
 
*Cours de management de projets innovants - 4h
 
*Finalisation du code arduino pour le moment.
 
|<!-- Clément --> style="width: 280px;" |
 
*Cours de management de projets innovants - 4h
 
*Début du travail d'intégration du [https://github.com/googlesamples/android-BluetoothLeGatt GoogleSample BleGATT] en tant qu'activité secondaire
 
|<!-- Vincent --> style="width: 280px;" |
 
*Cours de management de projets innovants - 4h
 
*Étude approfondie des modèles : il faut sûrement utiliser un LSTM
 
   
  +
''Vendredi 01/02''
|-
 
  +
* Envoi de données sur TTN via la SODAQ ExpLoRer.
  +
* Prise en main de l'Heltec ESP32 avec scan des réseaux WiFi.
  +
* Tentative d'envoi de donnée LoRa via l'ESP32.
   
  +
==Sprint 1 - Du 04/02 au 11/02 ==
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
*Recherches sur les UUID (pour l'arduino).
 
*Envoie des valeurs depuis l'arduino sous forme binaire (nécessite de séparer les octets des ints)
 
*Mise sur Git du code arduino.
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*La forme choisie est celle d'un [https://stackoverflow.com/questions/1979369/android-activity-as-a-dialog Dialog Activity] pour avoir une interaction ergonomique et user friendly
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
   
  +
''Lundi 04/02''
  +
* Communication LoRa hello entre deux cartes ESP32 et premiers tests sur le Bluetooth et le chiffrement des données
  +
* Modification de la maquette pour s'adapter à la nouvelle méthode de localisation
  +
* On passe de ionic à Android Studio. Trop de dépendances et de problèmes de version avec Ionic pour utiliser certaines fonctionnalités. Ionic non adapté car difficultés à accéder à l'hardware du téléphone.
   
  +
''Mardi 05/02''
|-
 
  +
* Journée à essayer de faire fonctionner la carte GPS SIM28 avec la carte Heltec Wifi LoRa 32. Sans succès...
| rowspan="2" | <span style="color:green">Jeudi 08/02/18</span>
 
  +
UPDATE (du soir) : Après un test sur mon Arduino UNO, j'ai eu confirmation que la carte Grove GPS fonctionnait bel et bien. Après l'utilisation de HardwareSerial et non plus de SofwareSerial, nous réccupérons bien les coordonnées GPS de la carte 😊
| rowspan="1" | <span style="color:blue">Tâches</span>
 
  +
* APP: création des fragments, intégration de la boussole, ajout d'un ski par lecture QRCode et de la liste de ski.
|<!-- Anthony --> style="width: 280px;" |
 
*Diverses expérimentations avec le MotionGesture. Installation de Gesture Manager sur mon téléphone et record de quelques mouvemnts sur un seul capteur (ceux du téléphone).
 
|<!-- Timothée --> style="width: 280px;" |
 
|<!-- Clément --> style="width: 280px;" |
 
*Application fonctionnelle de façon satisfaisante. Cependant, elle ne gère qu'un serveur [https://www.bluetooth.com/specifications/gatt/generic-attributes-overview BLE GATT] là où un par capteur serait nécessaire. Début des modifications en ce sens.
 
|<!-- Vincent --> style="width: 280px;" |
 
|-
 
   
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*Beaucoup de travail est reste à effectuer afin de permettre la gestion de plusieurs serveurs en simultanée quand l'application de base ne le gère pas du tout. Une meilleure conception aurait réduit l'impact de ce problème
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
   
  +
''Mercredi 06/02''
|-
 
  +
* Réflexion sur la construction des trames entre carte/Gateway et entre Gateway/Application.
| rowspan="2" | <span style="color:green">Vendredi 09/02/18</span>
 
  +
* APP: Sauvegarde de la liste de skis, correctifs et améliorations.
| rowspan="1" | <span style="color:blue">Tâches</span>
 
  +
* Cryptage des communications LoRa avec une clef de 16 octets
|<!-- Anthony --> style="width: 280px;" |
 
   
*Etude de l'appli MotionGestureDemo https://github.com/ryanchyshyn/motion_gestures_detection/tree/master/MotionGesturesDemo
 
*L’intérêt de cette appli est qu'elle exécute un modèle Tensorflow. Le code nécessaire a cela est externalisé dans une librairie que nous pourrions éventuellement réutiliser
 
|<!-- Timothée --> style="width: 280px;" |
 
*Hackathlon
 
|<!-- Clément --> style="width: 280px;" |
 
*Travail de transition pour une gestion multi-serveurs. Modification des structures de données et des Callbacks.
 
|<!-- Vincent --> style="width: 280px;" |
 
*Abandon du code trouvé précédemment car le modèle ne nous correspond pas. Reprise d’un code utilisant un modèle LSTM en Tensorflow, qui reconnait l’activité d’une personne (assis, debout, en train de marcher, montant des marches…)
 
|-
 
   
  +
''Jeudi 07/02''
|-
 
  +
* APP: Boussole opérationnelle, pointe vers une position GPS donnée. Problème lorsque le cache de localisation est vide à fix
| rowspan="1" | <span style="color:blue">Remarques</span>
 
  +
* Récupération de l'état de la batterie 4V avec un diviseur de tension pour ne pas abimer la carte qui supporte jusque 3.3V sur ses entrées analogiques.
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
   
  +
''Vendredi 08/02''
|}
 
  +
* Regroupement des fonctionnalités sur l'envoi des données à la GW (ChipID + Long + Lat + Batterie). Résolution d'un bug faisant redémarrer la carte après chaque envoie de donnée.
  +
* Regroupement des données du coté Gateway
  +
* APP : QRCode reader fonctionnel
   
==Sprint 3==
+
==Sprint 2 - Du 11/02 au 18/02 ==
{|class="wikitable alternance"
 
|+
 
|-
 
|
 
!scope="col"| Date
 
!scope="col"| GEOURJON Anthony
 
!scope="col"| LEMAIRE Timothée
 
!scope="col"| ROUQUIER Clément
 
!scope="col"| TURRIN Vincent
 
|-
 
   
  +
''Lundi 11/02:''
  +
* APP: Sauvegarde des skis enregistrés sur le téléphone pour persister en cas d'application fermée.
  +
* APP: Utilisation du Qrcode -> redirection pour ajouter un ski.
  +
* Gestion des connexions BT sur la gateway et transition des données app<->carte faite
  +
* Tentative de chiffrement des données avant l'envoi à la GW, plus compliqué que prévu au vu de la complexité de transformer les données en char * !
  +
* Decision prise de lancer la partie DevOps du projet : renseignement sur les techniques, choix des technos
   
  +
''Mardi 12/02''
| colspan="6" style="text-align: center; background-color:purple;"| <span style="color:white">SPRINT 3</span>
 
  +
* Abandon pour le moment du chiffrement de données, nous avons peur de perdre un temps précieux, nous reviendrons dessus si le temps nous le permet.
|-
 
  +
* Script permettant l'envoi ET la réception de donnée en LoRa.
  +
* APP: début du protocole Bluetooth pour envoyer recevoir données
  +
* APP: redirection, ajustement drawer, QR code opé et ajout de carte via qr code fonctionnel
  +
* APP: Amélioration de la naviguation entre fragments.
  +
* DevOps: Mise en place de CircleCI, hook GitHub
   
  +
''Mercredi 13/02''
|-
 
  +
* APP: Fin du protocole bluetooth, on peut communiquer entre l'app et la GW, Création d'un parser pour recevoir les données et les traiter.
| rowspan="2" | <span style="color:green">Lundi 12/02/18</span>
 
  +
* La puce GPS a besoin de 5V, la batterie ne délivre que 3,7V. Je me suis donc procurer un booster pour toujours délivrer 5V.
| rowspan="1" | <span style="color:blue">Tâches</span>
 
  +
* DevOps: Sur CircleCI, production d'une APK
|<!-- Anthony --> style="width: 280px;" |
 
   
  +
''Jeudi 14/02''
*Recherche de modèle avec Vincent. Expérimentation avec un modèle LSTM : https://medium.com/@curiousily/human-activity-recognition-using-lstms-on-android-tensorflow-for-hackers-part-vi-492da5adef64
 
  +
* APP: Merge des différentes fonctionnalités de l'application. Correction de bug par rapport à la naviguation.
*Prise en main de ce code
 
  +
* ACK vérifiant l'activation des modes ACTIVE et NORMAL, à peaufiner.
  +
* DevOps: Difficulté pour les InstrumentedTests avec CircleCI, recherche d'une nouvelle solution : Décision de mettre en place un serveur Jenkins
   
  +
''Vendredi 15/02''
|<!-- Timothée --> style="width: 280px;" |
 
  +
* Conf call avec Bernard Tourancheau
* Etudes du protocole BLE pour l'intégration à l'application android
 
  +
* APP: Corrections de bugs et optimisations + envoi de tags à la GW pour info Lora
|<!-- Clément --> style="width: 280px;" |
 
  +
* APP: Tutoriel - Carte : Ack des changements de mode effectuer"
*Modification de la [https://developer.android.com/reference/android/app/ListActivity.html ListActivity] pour avoir une sélection [https://www.101apps.co.za/articles/making-a-list-coding-multiple-choice-list-dialogs.html Multi Choice]
 
  +
* DevOps: Production d'une APK signée sur Jenkins
|<!-- Vincent --> style="width: 280px;" |
 
* Déchiffrage de codes utilisant un modèle LSTM : cela semble être un bon modèle pour notre cas, à voir les résultats pour des moves assez court.
 
|-
 
   
  +
==Sprint 3 - Du 4/03 au 11/03 ==
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*Cela crée un océan de problèmes de logique en raison de la modification a la volée de la liste lors d'une découverte et du clic sur le bouton menu "Scan/Stop". Après beaucoup de travail sur le Sample je me permet de dire que son design est plus que discutable
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
   
  +
''Vacances (18/02 - 01/03)''
|-
 
  +
* Modélisation 3D du boitier des HuCards
| rowspan="2" | <span style="color:green">Mardi 13/02/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
*Fork du modèle LSTM : https://github.com/SmartMove-PolytechGrenoble/TensorFlow-on-Android-for-Human-Activity-Recognition-with-LSTMs
 
|<!-- Timothée --> style="width: 280px;" |
 
* Poursuite de l'étude BLE.
 
|<!-- Clément --> style="width: 280px;" |
 
*Suite de la veille
 
|<!-- Vincent --> style="width: 280px;" |
 
* Modifications du code pour correspondre à notre formattage de données + modification du prétraitement des données
 
|-
 
   
  +
''Lundi 04/03''
|-
 
  +
* Management le matin : budget du projet fait
| rowspan="1" | <span style="color:blue">Remarques</span>
 
  +
* Préparation du diaporama de soutenance de mis-parcours
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
  +
* Reception des cartes **Heltec** et des régulateurs de tension, ajout de ces derniers au protoype.
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
  +
* Mise en place UnitTests avec Jenkins + signature APK
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
   
  +
''Mardi 05/03''
  +
* Dernières préparations avant la soutenance de mi-parcours
  +
* Suite de la modélisation 3D du boitier
  +
* Fin de codage du chiffrage
  +
* Mise en place des InstrumentedTests via Firebase Lab
   
  +
''Mercredi 06/03''
|-
 
  +
* Découverte des possibilités de l'écran par curiosité car ce dernier sera désactivé dans le boitier, il ne sert uniquement à afficher des logs durant les tests.
| rowspan="2" | <span style="color:green">Mercredi 14/02/18</span>
 
  +
* Premiers tests en extérieur avec les cartes et l'applications.
| rowspan="1" | <span style="color:blue">Tâches</span>
 
  +
* Debug du chiffrage
|<!-- Anthony --> style="width: 280px;" |
 
  +
* Tentative mise en place SonarQube server -> passage sur SonarCloud pour plus de simplicité.
*Conception de la gestion des entraînements. Entraînements au sens "suite d'activités" que l'utilisateur peut faire et vouloir détecter
 
*Soutenance mi parcours
 
|<!-- Timothée --> style="width: 280px;" |
 
*Soutenance mi parcours
 
*Prévision de l'abandon de l'utilisation d'arduinos pour l'utilisation de sensorTags.
 
|<!-- Clément --> style="width: 280px;" |
 
*Préparation de la soutenance
 
*Soutenance mi parcours
 
|<!-- Vincent --> style="width: 280px;" |
 
*Soutenance mi parcours
 
* Résolution problèmes inconnus Tensorflow
 
|-
 
   
  +
''Jeudi 07/03''
|-
 
  +
* Fini le chiffrage des communications dans les deux sens
| rowspan="1" | <span style="color:blue">Remarques</span>
 
  +
* Amélioration du modèle 3D du boitier
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
  +
* Difficile de faire fonctionner SonarCloud correctement, passage sur Codacy
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
   
  +
''Vendredi 08/03''
|-
 
  +
* Debut de la feature de suppression de carte
| rowspan="2" | <span style="color:green">Jeudi 15/02/18</span>
 
  +
* Préparation pour impression
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
*Cours gestion
 
|<!-- Timothée --> style="width: 280px;" |
 
*Cours gestion
 
*Découverte sensorTag
 
|<!-- Clément --> style="width: 280px;" |
 
*Absence jusqu'aux vacances pour cause de déménagement
 
|<!-- Vincent --> style="width: 280px;" |
 
*Cours gestion
 
* Test d'entraîner le modèle avec des jeux de données : impossible à faire tourner hardware trop faible.
 
|-
 
   
  +
==Sprint 4 - Du 11/03 au 15/03 ==
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
   
  +
''Lundi 11/03''
|-
 
  +
* Impression de la première version du boitier
| rowspan="2" | <span style="color:green">Vendredi 16/02/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
* Essai tensor flow sur mon CPU
 
|<!-- Timothée --> style="width: 280px;" |
 
|<!-- Clément --> style="width: 280px;" |
 
|<!-- Vincent --> style="width: 280px;" |
 
* Faire tourner Tensorflow sur GPU : fonctionne mieux.
 
|-
 
   
  +
''Mardi 12/03''
|-
 
  +
* Fin des implémentations d'optimisation principale pour les cartes
| rowspan="1" | <span style="color:blue">Remarques</span>
 
  +
* Prototypage du circuit imprimé comprenant la carte Heltec, le déviseur et régulateur de tension, le GPS et la batterie. L'ajout d'un interupteur pour allumer/éteindre la carte a été ajouté.
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
  +
* Résolution de bug sur Jenkins qui empechait la production de l'APK
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
  +
* changement de design
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
   
  +
''Mercredi 13/03''
|}
 
  +
* Correction de quelques erreurs sur la première version du boitier puis impression de la seconde version.
  +
* Essai d'utilisation de GitHub Release pour mettre à disposition l'APK signée
  +
* finition design final
   
  +
''Jeudi 14/03''
==Sprint 4 (Vacances) ==
 
  +
* Avancement sur le rapport
{|class="wikitable alternance"
 
  +
* Assemblage final :
|+
 
  +
* ![](https://i.imgur.com/o610FY3.jpg)
|-
 
|
 
!scope="col"| Date
 
!scope="col"| GEOURJON Anthony
 
!scope="col"| LEMAIRE Timothée
 
!scope="col"| ROUQUIER Clément
 
!scope="col"| TURRIN Vincent
 
|-
 
   
  +
''Vendredi 15/03''
| colspan="6" style="text-align: center; background-color:purple;"| <span style="color:white">SPRINT 4</span>
 
  +
* Préparation soutenance
|-
 
  +
* Commencement du diaporama
| colspan="6" style="text-align: center; background-color:purple;"| <span style="color:white">/!\Vacances/!\</span>
 
|-
 
   
  +
== Sprint final ==
|-
 
  +
* Rédaction rapport
| rowspan="2" | <span style="color:green">Semaine du 19 au 25 février</span>
 
  +
* Préparation soutenance
| rowspan="1" | <span style="color:blue">Tâches</span>
 
  +
* Documentation et commentaire de code
|<!-- Anthony --> style="width: 280px;" |
 
* [...]
 
|<!-- Timothée --> style="width: 280px;" |
 
* [...]
 
|<!-- Clément --> style="width: 280px;" |
 
* [...]
 
|<!-- Vincent --> style="width: 280px;" |
 
* Quelques tests sur SensorTag
 
|-
 
   
  +
=Génie Logiciel=
|-
 
  +
==Diagramme de Contexte==
| rowspan="1" | <span style="color:blue">Remarques</span>
 
  +
[[File:SL2019-DC.png]]
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
  +
==Arbre des tâches==
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
  +
Retrouver un ski perdu
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
  +
[[File:SL2019-AT.png]]
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
   
   
  +
Ajouter un ski à l'application
|-
 
  +
[[File:SL2019-AT2.png]]
   
  +
==Vue Logique de haut niveau==
|}
 
  +
[[File:SL2019-VLH.png]]
  +
==Vue Logique de bas niveau==
  +
[[File:SL2019-VLB.png]]
  +
==Vue Sequentielle==
  +
[[File:SL2019-VS.png]]
   
==Sprint 5==
 
{|class="wikitable alternance"
 
|+
 
|-
 
|
 
!scope="col"| Date
 
!scope="col"| GEOURJON Anthony
 
!scope="col"| LEMAIRE Timothée
 
!scope="col"| ROUQUIER Clément
 
!scope="col"| TURRIN Vincent
 
|-
 
   
  +
[[File:SL2019-VS2-1.png]]
   
  +
==Vue physique==
| colspan="6" style="text-align: center; background-color:purple;"| <span style="color:white">SPRINT 5</span>
 
  +
[[File:SL2019-VP.png]]
|-
 
  +
==IHM abstraite==
  +
[[File:SL2019-IMHA.png]]
  +
==IHM concrète==
   
  +
[[File:2019_SkiLocator_maquette_ajouter.png]]
|-
 
| rowspan="2" | <span style="color:green">Lundi 26/02/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
*Cours de gestion
 
|<!-- Timothée --> style="width: 280px;" |
 
*Cours de gestion
 
*Analyse de l'application Android sensorTag officiel (openSource)
 
|<!-- Clément --> style="width: 280px;" |
 
*Cours de gestion
 
*Changement de trajectoire du projet, nous utiliserons désormais des [http://www.ti.com/ww/en/wireless_connectivity/sensortag/ SensorTAG]. Début d'analyse des ressources disponibles afin de voir s'il n'est pas possible d'utiliser un code facile à intégrer
 
|<!-- Vincent --> style="width: 280px;" |
 
*Cours de gestion
 
* Début modification du code Android d'évalutation : comptabilisation, du nombre de mouvement, chronométrage.
 
|-
 
   
  +
[[File:2019_SkiLocator_maquette_cartes.png]]
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*Solution propriétaire à TI analysée : [http://www.ti.com/tool/ble-stack?DCMP=wbu-blestack&HQS=blestack BLE Stack]
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
   
  +
[[File:2019_SkiLocator_maquette_menu.png]]
|-
 
| rowspan="2" | <span style="color:green">Mardi 27/02/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
*Travail sur la gestion des entraînements (création d'entrainement et sauvegarde)
 
|<!-- Timothée --> style="width: 280px;" |
 
|<!-- Clément --> style="width: 280px;" |
 
*La solution fonctionne parfaitement mais ne gère pas le Multi Server GATT. Code trop complexe pour modifications et intégration. Abandon de la solution
 
|<!-- Vincent --> style="width: 280px;" |
 
* Début modification code enregistrement data. Objectif : labéliser, choisir librement les limites.
 
|-
 
   
  +
[[File:2019_SkiLocator_maquette_ski_loin.png]]
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
   
  +
[[File:2019_SkiLocator_maquette_ski_proche.png]]
|-
 
| rowspan="2" | <span style="color:green">Mercredi 28/02/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
*Travail sur la gestion des entraînements (création d'entrainement et sauvegarde)
 
|<!-- Timothée --> style="width: 280px;" |
 
*Recherche de stage
 
|<!-- Clément --> style="width: 280px;" |
 
*Recherche de solution alternative pour la connexion au [http://www.ti.com/ww/en/wireless_connectivity/sensortag/ SensorTAG] avec gestion de multi serveur GATT
 
|<!-- Vincent --> style="width: 280px;" |
 
* Ajout du support du gyroscope
 
|-
 
   
  +
[[File:2019_SkiLocator_maquette_warning.png]]
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*Beaucoup de ressources disponibles sur le net fonctionnement en fait avec un Gateway Hardware propriétaire, elles sont donc toutes inutilisables dans notre cas
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
   
  +
==User Stories==
|-
 
| rowspan="2" | <span style="color:green">Jeudi 01/03/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
*Travail sur la gestion des entraînements (Visualisation)
 
|<!-- Timothée --> style="width: 280px;" |
 
|<!-- Clément --> style="width: 280px;" |
 
*Découverte du service [https://github.com/devicehive/android-ble Android BLE] de [https://devicehive.com/ DeviceHive] qui se sert d'un téléphone Android comme Gateway entre plusieurs périphériques BLE et un serveur, répondant à toutes nos contraintes. Exploration et mise en place de cette solution
 
|<!-- Vincent --> style="width: 280px;" |
 
* Entraînement avec nos propres données : il faut beaucoup de données, avec peu de données la précision est vraiment mauvaise.
 
|-
 
   
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*Solution un peu complexe d'utilisation et qui ne pourra pas être inclue dans une version en production. Cependant très pratique pour acquérir des jeux de données lors du développement
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
 
|-
 
| rowspan="2" | <span style="color:green">Vendredi 02/03/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
*Travail sur la gestion des entraînements (Visualisation)
 
* Réunion 2
 
|<!-- Timothée --> style="width: 280px;" |
 
* Réunion 2
 
|<!-- Clément --> style="width: 280px;" |
 
* Solution de [https://devicehive.com/ DeviceHive] fonctionnelle, et découverte d'une nouvelle problématique : La fréquence de notifications des données est de 300 ms, bien trop lent. Pourtant, les [http://www.ti.com/lit/sl/szzy004a/szzy004a.pdf spécifications] de la carte indiquent une fréquence minimale de 100 ms (il est d'ailleurs [https://e2e.ti.com/support/wireless_connectivity/bluetooth_low_energy/f/538/t/385413 apparemment] de flasher l'appareil pour augmenter la fréquence)
 
* Réunion 2
 
|<!-- Vincent --> style="width: 280px;" |
 
* Réunion 2
 
* Récolte de plus de données.
 
|-
 
 
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*Le problème de fréquence est donc soit lié à DeviceHive soit au téléphone Android. Dans l'immédiat, abandon de la solution DeviceHive pour avoir une version fonctionnelle aussi vite que possible
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
 
|}
 
 
==Sprint 6 ==
 
 
{|class="wikitable alternance"
 
{|class="wikitable alternance"
 
|+
 
|+
 
|-
 
|-
 
|
 
|
!scope="col"| Date
+
!scope="col"| User Story
!scope="col"| GEOURJON Anthony
 
!scope="col"| LEMAIRE Timothée
 
!scope="col"| ROUQUIER Clément
 
!scope="col"| TURRIN Vincent
 
|-
 
   
 
| colspan="6" style="text-align: center; background-color:purple;"| <span style="color:white">SPRINT 6</span>
 
|-
 
|-
 
| rowspan="2" | <span style="color:green">Lundi 05/03/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
* Expérimentations avec des jeux de données difféerents
 
*MaJ Air
 
|<!-- Timothée --> style="width: 280px;" |
 
Analyse code BLE Android (celui de Clément)
 
|<!-- Clément --> style="width: 280px;" |
 
*L'[https://github.com/SmartMove-PolytechGrenoble/motion_gestures_detection/tree/dev_mesh application] développée par Vincent est suffisamment aboutie pour accepter une intégration des services Bluetooth. Début de cette intégration
 
|<!-- Vincent --> style="width: 280px;" |
 
* Modif learning pour utiliser les nouvelles infos capteurs : gyroscope + accél, Modifications formattage des données (Python)
 
 
|-
 
|-
  +
|<!-- Indentification --> | US_001
 
  +
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir avoir une zone de recherche de mes skis
 
|-
 
|-
  +
|<!-- Indentification --> | US_002
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
+
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir localiser précisément mes skis
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*Cela demandera tout de même beaucoup de travail étant donné les problèmes de clone et d'intégration inhérents à Android.
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
 
|-
 
|-
  +
|<!-- Indentification --> | US_003
 
  +
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir identifier mes skis (ski droite/ ski gauche)
 
|-
 
| rowspan="2" | <span style="color:green">Mardi 06/03/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
* Refactoring de la gestion des entraînements pour prendre dynamiquement en compte le nombre de mouvements
 
|<!-- Timothée --> style="width: 280px;" |
 
*Réunion avec Clément.
 
|<!-- Clément --> style="width: 280px;" |
 
*Réunion avec Timothée afin de se mettre d'accord pour permettre une parallélisation du travail.
 
|<!-- Vincent --> style="width: 280px;" |
 
* Le vecteur angulaire n'est pas l'information qu'il nous faut mais plutôt la gravité : changement du code, et reprise de la récupération des données.
 
 
|-
 
|-
  +
|<!-- Indentification --> | US_004
 
  +
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir associer des skis à mon application mobile via QR Code
 
|-
 
|-
  +
|<!-- Indentification --> | US_005
| rowspan="1" | <span style="color:blue">Remarques</span>
 
  +
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir visualiser le niveau de batterie des capteurs sur les skis
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
*Je travaillerai sur la partie connexion Bluetooth et lui sur la partie GATT (découverte des services et caractéristiques, inscription et lecture des notifications)
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
 
|-
 
|-
  +
|<!-- Indentification --> | US_006
 
  +
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir connaître à tout moment la position des skis
 
|-
 
| rowspan="2" | <span style="color:green">Mercredi 07/03/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
|<!-- Timothée --> style="width: 280px;" |
 
*Recherche sur les caractéristiques bluetooth du sensorTag et leur utilisations
 
|<!-- Clément --> style="width: 280px;" |
 
* Intégration de la connexion a l'appli de récupération des données
 
|<!-- Vincent --> style="width: 280px;" |
 
* En fait différentes variable pour l'apprentissage n'avaient pas été touchées, il est possible d'avoir de bons résultats avec peu de données.
 
* Reprise des tests : très bonne précision avec seulement 40 secondes d'entraînement : les mouvements marcher et sauter sont distingués avec une très bonne précision en ligne droite.
 
 
|-
 
|-
  +
|<!-- Indentification --> | US_007
 
  +
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir enregistrer plusieurs paires de skis
 
|-
 
|-
  +
|<!-- Indentification --> | US_008
| rowspan="1" | <span style="color:blue">Remarques</span>
 
  +
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir visualiser le niveau de batterie sur la gateway
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
 
|-
 
|-
  +
|<!-- Indentification --> | US_009
 
  +
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir avoir une distance approximative à mes skis
 
|-
 
| rowspan="2" | <span style="color:green">Jeudi 08/03/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
* Excusé (TOEIC)
 
|<!-- Timothée --> style="width: 280px;" |
 
* Papier et téléphone pour le stage.
 
|<!-- Clément --> style="width: 280px;" |
 
* Suite. Connexion réussie.
 
|<!-- Vincent --> style="width: 280px;" |
 
* Rectification après tests : il faut bien l'accélération angulaire, je n'ai pas le capteur sur mon téléphone, je reste sur des infos accéléromètre et c'est précis.
 
* Multiples essais en faisant varier les variables pour l'apprentissage tensorflow.
 
* Essais et modification du code pour pouvoir faire descendre le nombre de valeur en input assez bas : reconnaître les mouvements de toute durée.
 
 
|-
 
|-
  +
|<!-- Indentification --> | US_010
 
  +
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir avoir de l'aide pour me connecter à la GW (indication, ...)
 
|-
 
|-
  +
|<!-- Indentification --> | US_011
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
+
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir déclarer mes skis perdu
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
 
|-
 
|-
  +
|<!-- Indentification --> | US_012
 
  +
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir déclarer un ski que j'ai trouvé
 
|-
 
|-
  +
|<!-- Indentification --> | US_013
| rowspan="2" | <span style="color:green">Vendredi 09/03/18</span>
 
  +
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pourvoir changer de téléphone et ne pas apareiller de nouveaux mes skis
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
|<!-- Timothée --> style="width: 280px;" |
 
* Développement d'une API pour le contrôle du sensorTag une fois connecté.
 
|<!-- Clément --> style="width: 280px;" |
 
* Suite. Clean du code et de la connexion.
 
|<!-- Vincent --> style="width: 280px;" |
 
* Tests avec gyroscope (j'ai utilisé le téléphone de Timothée car j'ai pas de gyroscope). Les résultats sont moins bons qu'avec seulement l'accéléromètre. Il faut plus de training. Je cherche comment donner moins d'importance au gyroscope.
 
 
|-
 
|-
  +
|<!-- Indentification --> | US_014
 
  +
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir appeler à l'aide avec mon smartphone sans raison
 
|-
 
|-
  +
|<!-- Indentification --> | US_015
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
+
|<!-- User Story--> style="width: 100%;" | En tant que skieur, je souhaite pouvoir nommer mes skis appareillés
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
 
|}
 
 
==Sprint 7 (en cours)==
 
{|class="wikitable alternance"
 
|+
 
|-
 
|
 
!scope="col"| Date
 
!scope="col"| GEOURJON Anthony
 
!scope="col"| LEMAIRE Timothée
 
!scope="col"| ROUQUIER Clément
 
!scope="col"| TURRIN Vincent
 
|-
 
 
 
| colspan="6" style="text-align: center; background-color:purple;"| <span style="color:white">SPRINT 7</span>
 
|-
 
 
|-
 
| rowspan="2" | <span style="color:green">Lundi 12/03/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
* Intégration de la gestion des entrainements
 
|<!-- Timothée --> style="width: 280px;" |
 
* Suite développement de l'API pour le sensorTag, avancées grâce à une doc pertinente.
 
* Obtention de valeur de l'accéléromètre et du gyroscope du sensorTag.
 
|<!-- Clément --> style="width: 280px;" |
 
* Rien
 
* Rien
 
* Rien
 
|<!-- Vincent --> style="width: 280px;" |
 
* Test d'un très grand nombre de settings : retenu analyse d'une fenêtre de 2 secondes, glissante de 500ms en 500ms.
 
* Code Python (learning) et code Android (utilisant le modèle) rendus totalement scalable avec quelques tableaux en dur à remplir selon nos besoins (capteurs en entrée, moves en sortie, moves à compter...) --> l'entraînement / l'UI est généré en conséquence .
 
|-
 
 
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
* Intégration de la gestion des entrainements
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
* Il faut que je modifie le code pour éviter certains doublons, et éviter des événements incompatibles à la suite. Un autre point : ajouter un deuxième seuil de validation (autre que la probabilité) : assurer une proba > 0.98 pendant deux avancées de la fenêtre par exemple, je pense que cela va donner des résultats robustes. Un gros problème de notre projet est qu'on est en Open set : nos classes ne représentent pas tous les mouvements possibles (c'est un domaine de recherche très répandu actuellement). On a alors du bruit. On va essayer d'utiliser la méthode simple : enregistrer du bruit, et des moves qui n'ont aucun sens.
 
|-
 
 
|-
 
 
| rowspan="2" | <span style="color:green">Mardi 13/03/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
* Cours de gestion de projet
 
|<!-- Timothée --> style="width: 280px;" |
 
* Cours de gestion de projet
 
* support de Clément pour l'implémentation l'API sur la base de l'appli.
 
|<!-- Clément --> style="width: 280px;" |
 
* Cours de gestion de projet
 
* Mise en relation de la connexion avec a partie de Timothée, résolution de problèmes
 
|<!-- Vincent --> style="width: 280px;" |
 
* De nombreux tweaks par rapport à la problématique : être temps réel/précision/pas de faux positif.
 
* Réengistrement pour la 70000 fois de données mais ce coup-ci au niveau de la jambe avec et sans gyroscope (j'ai mal aux jambes).
 
* Ajout de plus d'option pour ajuster la validation d'un move : un move peut être plus ou moins dur à valider.
 
* Cours de gestion de projet
 
|-
 
 
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
* Problème de fréquence d’échantillonnage, la caractéristique BLE prévu a cette effet ne semble pas avoir d'effet.
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
* L'ajout du gyroscope (on passe alors à 6 variables) fait exploser la complexité du modèle il prend un temps très long à être entraîné (normal...)
 
* Retour à accéléromètre seul.
 
 
|-
 
 
 
|-
 
| rowspan="2" | <span style="color:green">Mercredi 14/03/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
* Fin d'intégration de la gestion des entrainements
 
* Enregistrement de jeu de données
 
* Diapo
 
|<!-- Timothée --> style="width: 280px;" |
 
|<!-- Clément --> style="width: 280px;" |
 
* Tentative d'implémentation du SensorTag sur l'autre application (???) de gestion des entrainements
 
|<!-- Vincent --> style="width: 280px;" |
 
* Merge avec le code d'entraînement d'Antho.
 
* Réengistrement avec Anthony de plein de données (tout au niveau de la ceinture), avec 10Mo de données on devrait être assez précis.
 
* Tweak du modèle encore et encore.
 
|-
 
 
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
* Échec
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
|-
 
 
 
|-
 
| rowspan="2" | <span style="color:green">Jeudi 15/03/18</span>
 
| rowspan="1" | <span style="color:blue">Tâches</span>
 
|<!-- Anthony --> style="width: 280px;" |
 
* Soutenance
 
|<!-- Timothée --> style="width: 280px;" |
 
* Soutenance
 
|<!-- Clément --> style="width: 280px;" |
 
* Matin : Soutenance
 
* Apres-Midi : Partir le plus loin possible et ne jamais revenir
 
|<!-- Vincent --> style="width: 280px;" |
 
* Soutenance
 
|-
 
 
|-
 
| rowspan="1" | <span style="color:blue">Remarques</span>
 
|<!-- Anthony --> style="width: 280px;" style="color:purple"|
 
|<!-- Timothée --> style="width: 280px;" style="color:purple" |
 
|<!-- Clément --> style="width: 280px;" style="color:purple" |
 
|<!-- Vincent --> style="width: 280px;" style="color:purple" |
 
 
 
 
|-
 
 
 
|}
 
|}

Latest revision as of 11:36, 21 March 2019

Ski Locator

La recherche d’un ski perdu est une expérience déplaisante de par l’effort que nécessite la recherche ainsi que de par l’idée de devoir avoir à acheter une nouvelle paire de ski. La présence de poudreuse rend d’autant plus difficile cette recherche car il est parfois impossible de retrouver des traces du ski perdu. Le système que nous allons décrire ici a pour but de remédier à ce problème en utilisant les moyens modernes offerts par l’IoT. Nous avons décidé de nommer notre produit HuSki en références aux chiens de traineaux réputés pour leur ténacité et leur sens de l’odorat.

HuSki se décline en trois composants:

  • La HuCard, une carte dans un boîtier fixé sur les skis. Cette carte traque les skis et envoie leur position GPS par communication LoRa.
  • La HuConnect, une carte dans une coque de téléphone servant de gateway entre la HuCard et l’application mobile. La HuConnect reçoit les données LoRa et les transmet via Bluetooth.
  • L’application HuSki, une application mobile android pour géolocaliser les HuCards connectées.

Dans la suite de ce rapport nous allons détailler le fonctionnement de chacun de ces trois composants, les difficultés rencontrées lors du développement et nous finirons avec les ouvertures que ce projet apporte. Cependant, avant de poursuivre, il semble tout de même nécessaire de présenter l’équipe.


Iot-lora-alliance-logo.png

Équipe du projet

Membre Rôles
Quentin FOMBARON Chef de projet
Joffrey FERREIRA SCRUM Master
Tim LEPAGE Développeur
Titouan LARNICOL Développeur
Thomas OZENDA Développeur
  • Supervisé par : Bernard Tourancheau

Abstract

Mots clés

  • IOT
  • Ski
  • GPS
  • LoRa
  • Localisation
  • Application mobile

Budget

Élément Par heure Total
Salaire 120.35 19 857.75
Batiment/Matériel 5.45 900
Frais exceptionnel 170
Ordinateurs personnels 6.96 1 148.32
Total 246€

SCRUM

Une liste plus actualisée des tâches est disponible sur Trello

Journal

Sprint 0 - Du 28/01 au 04/02

Lundi 28/01

  • Boitier imprimé en 3D pour une meilleure intégration au ski
  • Problème de la batterie (rapport taille/poids et autonomie)
  • Application smartphone (Android/iOS)
  • Changement de nom : Ski-Locator
  • Rendez-vous avec M. Tourancheau cet après-midi :
  • Établir liste du matériel necessaire
  • Recherche sur la localisation auto (triangulation)
  • DVA : Radio très longues ondes
  • Suivi de trajectoire sur le ski, quand on le perd on a une prédiction de la position du ski
  • Stocker les données sur le ski et l'envoyer que si besoin
  • RSSI pour trouver le ski dans une zone donnée par LoRa Bluetooth


Mardi 29/01

  • Réalisation de l'architecture et IHM
  • Kanban bien avancé, sprint de 1 semaine
  • User stories


Mercredi 30/01

  • IHM
  • Réalisation des maquettes de l'application
  • Début application Ionic
  • Récupération matériel


Vendredi 01/02

  • Envoi de données sur TTN via la SODAQ ExpLoRer.
  • Prise en main de l'Heltec ESP32 avec scan des réseaux WiFi.
  • Tentative d'envoi de donnée LoRa via l'ESP32.

Sprint 1 - Du 04/02 au 11/02

Lundi 04/02

  • Communication LoRa hello entre deux cartes ESP32 et premiers tests sur le Bluetooth et le chiffrement des données
  • Modification de la maquette pour s'adapter à la nouvelle méthode de localisation
  • On passe de ionic à Android Studio. Trop de dépendances et de problèmes de version avec Ionic pour utiliser certaines fonctionnalités. Ionic non adapté car difficultés à accéder à l'hardware du téléphone.

Mardi 05/02

  • Journée à essayer de faire fonctionner la carte GPS SIM28 avec la carte Heltec Wifi LoRa 32. Sans succès...

UPDATE (du soir) : Après un test sur mon Arduino UNO, j'ai eu confirmation que la carte Grove GPS fonctionnait bel et bien. Après l'utilisation de HardwareSerial et non plus de SofwareSerial, nous réccupérons bien les coordonnées GPS de la carte 😊

  • APP: création des fragments, intégration de la boussole, ajout d'un ski par lecture QRCode et de la liste de ski.


Mercredi 06/02

  • Réflexion sur la construction des trames entre carte/Gateway et entre Gateway/Application.
  • APP: Sauvegarde de la liste de skis, correctifs et améliorations.
  • Cryptage des communications LoRa avec une clef de 16 octets


Jeudi 07/02

  • APP: Boussole opérationnelle, pointe vers une position GPS donnée. Problème lorsque le cache de localisation est vide à fix
  • Récupération de l'état de la batterie 4V avec un diviseur de tension pour ne pas abimer la carte qui supporte jusque 3.3V sur ses entrées analogiques.

Vendredi 08/02

  • Regroupement des fonctionnalités sur l'envoi des données à la GW (ChipID + Long + Lat + Batterie). Résolution d'un bug faisant redémarrer la carte après chaque envoie de donnée.
  • Regroupement des données du coté Gateway
  • APP : QRCode reader fonctionnel

Sprint 2 - Du 11/02 au 18/02

Lundi 11/02:

  • APP: Sauvegarde des skis enregistrés sur le téléphone pour persister en cas d'application fermée.
  • APP: Utilisation du Qrcode -> redirection pour ajouter un ski.
  • Gestion des connexions BT sur la gateway et transition des données app<->carte faite
  • Tentative de chiffrement des données avant l'envoi à la GW, plus compliqué que prévu au vu de la complexité de transformer les données en char * !
  • Decision prise de lancer la partie DevOps du projet : renseignement sur les techniques, choix des technos

Mardi 12/02

  • Abandon pour le moment du chiffrement de données, nous avons peur de perdre un temps précieux, nous reviendrons dessus si le temps nous le permet.
  • Script permettant l'envoi ET la réception de donnée en LoRa.
  • APP: début du protocole Bluetooth pour envoyer recevoir données
  • APP: redirection, ajustement drawer, QR code opé et ajout de carte via qr code fonctionnel
  • APP: Amélioration de la naviguation entre fragments.
  • DevOps: Mise en place de CircleCI, hook GitHub

Mercredi 13/02

  • APP: Fin du protocole bluetooth, on peut communiquer entre l'app et la GW, Création d'un parser pour recevoir les données et les traiter.
  • La puce GPS a besoin de 5V, la batterie ne délivre que 3,7V. Je me suis donc procurer un booster pour toujours délivrer 5V.
  • DevOps: Sur CircleCI, production d'une APK

Jeudi 14/02

  • APP: Merge des différentes fonctionnalités de l'application. Correction de bug par rapport à la naviguation.
  • ACK vérifiant l'activation des modes ACTIVE et NORMAL, à peaufiner.
  • DevOps: Difficulté pour les InstrumentedTests avec CircleCI, recherche d'une nouvelle solution : Décision de mettre en place un serveur Jenkins

Vendredi 15/02

  • Conf call avec Bernard Tourancheau
  • APP: Corrections de bugs et optimisations + envoi de tags à la GW pour info Lora
  • APP: Tutoriel - Carte : Ack des changements de mode effectuer"
  • DevOps: Production d'une APK signée sur Jenkins

Sprint 3 - Du 4/03 au 11/03

Vacances (18/02 - 01/03)

  • Modélisation 3D du boitier des HuCards

Lundi 04/03

  • Management le matin : budget du projet fait
  • Préparation du diaporama de soutenance de mis-parcours
  • Reception des cartes **Heltec** et des régulateurs de tension, ajout de ces derniers au protoype.
  • Mise en place UnitTests avec Jenkins + signature APK

Mardi 05/03

  • Dernières préparations avant la soutenance de mi-parcours
  • Suite de la modélisation 3D du boitier
  • Fin de codage du chiffrage
  • Mise en place des InstrumentedTests via Firebase Lab

Mercredi 06/03

  • Découverte des possibilités de l'écran par curiosité car ce dernier sera désactivé dans le boitier, il ne sert uniquement à afficher des logs durant les tests.
  • Premiers tests en extérieur avec les cartes et l'applications.
  • Debug du chiffrage
  • Tentative mise en place SonarQube server -> passage sur SonarCloud pour plus de simplicité.

Jeudi 07/03

  • Fini le chiffrage des communications dans les deux sens
  • Amélioration du modèle 3D du boitier
  • Difficile de faire fonctionner SonarCloud correctement, passage sur Codacy

Vendredi 08/03

  • Debut de la feature de suppression de carte
  • Préparation pour impression

Sprint 4 - Du 11/03 au 15/03

Lundi 11/03

  • Impression de la première version du boitier

Mardi 12/03

  • Fin des implémentations d'optimisation principale pour les cartes
  • Prototypage du circuit imprimé comprenant la carte Heltec, le déviseur et régulateur de tension, le GPS et la batterie. L'ajout d'un interupteur pour allumer/éteindre la carte a été ajouté.
  • Résolution de bug sur Jenkins qui empechait la production de l'APK
  • changement de design

Mercredi 13/03

  • Correction de quelques erreurs sur la première version du boitier puis impression de la seconde version.
  • Essai d'utilisation de GitHub Release pour mettre à disposition l'APK signée
  • finition design final

Jeudi 14/03

Vendredi 15/03

  • Préparation soutenance
  • Commencement du diaporama

Sprint final

  • Rédaction rapport
  • Préparation soutenance
  • Documentation et commentaire de code

Génie Logiciel

Diagramme de Contexte

SL2019-DC.png

Arbre des tâches

Retrouver un ski perdu SL2019-AT.png


Ajouter un ski à l'application SL2019-AT2.png

Vue Logique de haut niveau

SL2019-VLH.png

Vue Logique de bas niveau

SL2019-VLB.png

Vue Sequentielle

SL2019-VS.png


SL2019-VS2-1.png

Vue physique

SL2019-VP.png

IHM abstraite

SL2019-IMHA.png

IHM concrète

2019 SkiLocator maquette ajouter.png

2019 SkiLocator maquette cartes.png

2019 SkiLocator maquette menu.png

2019 SkiLocator maquette ski loin.png

2019 SkiLocator maquette ski proche.png

2019 SkiLocator maquette warning.png

User Stories

User Story
US_001 En tant que skieur, je souhaite pouvoir avoir une zone de recherche de mes skis
US_002 En tant que skieur, je souhaite pouvoir localiser précisément mes skis
US_003 En tant que skieur, je souhaite pouvoir identifier mes skis (ski droite/ ski gauche)
US_004 En tant que skieur, je souhaite pouvoir associer des skis à mon application mobile via QR Code
US_005 En tant que skieur, je souhaite pouvoir visualiser le niveau de batterie des capteurs sur les skis
US_006 En tant que skieur, je souhaite pouvoir connaître à tout moment la position des skis
US_007 En tant que skieur, je souhaite pouvoir enregistrer plusieurs paires de skis
US_008 En tant que skieur, je souhaite pouvoir visualiser le niveau de batterie sur la gateway
US_009 En tant que skieur, je souhaite pouvoir avoir une distance approximative à mes skis
US_010 En tant que skieur, je souhaite pouvoir avoir de l'aide pour me connecter à la GW (indication, ...)
US_011 En tant que skieur, je souhaite pouvoir déclarer mes skis perdu
US_012 En tant que skieur, je souhaite pouvoir déclarer un ski que j'ai trouvé
US_013 En tant que skieur, je souhaite pourvoir changer de téléphone et ne pas apareiller de nouveaux mes skis
US_014 En tant que skieur, je souhaite pouvoir appeler à l'aide avec mon smartphone sans raison
US_015 En tant que skieur, je souhaite pouvoir nommer mes skis appareillés