Robot autonome pour cartographie : Différence entre versions

De Wiki d'activités IMA
(Semaine 5-6)
 
(71 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 +
<include nopre noesc src="/home/pedago/pimasc/include/video-RobotCartographieur-iframe.html" />
 +
__TOC__
 +
<br style="clear: both;"/>
 
=Cahier des charges=
 
=Cahier des charges=
 
==Présentation générale ==
 
==Présentation générale ==
 
===Contexte===
 
===Contexte===
  
De nos jours, la localisation indoor est devenu un enjeu important. Se localiser précisément à l'intérieur d'un bâtiment n'est pas une tâche facile et répond à de nombreuses applications relevant du domaine de la santé, afin de mesurer l'exposition à certaines ondes par exemple, ou encore du militaire.    
+
De nos jours, la localisation indoor est devenu un enjeu important. En effet, se localiser précisément à l'intérieur d'un bâtiment constitue une tâche très complexe (le GPS est utilisable mais peu adapté) et c'est pourquoi ce robot peut tenter de répondre à cette problématique via une cartographie électromagnétique. Il peut aussi répondre à de nombreuses applications relevant du domaine de la santé, afin de mesurer l'exposition d'un patient à certaines ondes par exemple, ou encore du militaire. Ce protocole de localisation possède aussi d'autres applications mineures.
  
 
===Objectifs===  
 
===Objectifs===  
  
Notre projet a pour but de développer un robot pouvant établir une cartographie électromagnétique d'un signal Wifi à l'intérieur d'un bâtiment. Cela permettra par la suite à un utilisateur de pouvoir se localiser en comparant le signal qu'il reçoit avec celui établit dans la base de données de la cartographie.  
+
Notre projet a pour but de développer un robot autonome (en termes d'énergie et de déplacements) pouvant établir une cartographie électromagnétique (niveaux de qualité du signal WiFi) d'un bâtiment. Notre robot effectuera des mesures RSSI à différentes positions afin d'établir cette carte. Cela permettra alors à un utilisateur de pouvoir se localiser en comparant le signal qu'il reçoit avec celui existant dans la base de données.
  
 
===Description du projet===
 
===Description du projet===
  
La cartographie Wifi d'un bâtiment n'est pas fixe puisqu'elle dépend des modifications apportées en terme d'ajout, de retrait ou de déplacement de bornes wifi mais également du mobilier ou de tous les systèmes pouvant interférer avec le signal, il faut ainsi pouvoir concevoir un robot parfaitement autonome, que ce soit énergétiquement mais également du point de vue de son déplacement et de la récupération des données.  
+
Le niveau du signal WiFi dans un bâtiment n'est pas fixe puisqu'il dépend de modifications apportées en terme d'ajout, de retrait ou de déplacement de bornes WiFi mais également du mobilier présent ou de tous les systèmes pouvant interférer avec le signal. Il faut ainsi pouvoir concevoir un robot parfaitement autonome, que ce soit énergétiquement mais également du point de vue de son déplacement et de la récupération des données.  
  
Ainsi, le robot devra être capable de se déplacer librement dans son environnement tout en détectant et contournant les obstacles qui se présenteront à lui.  
+
Le robot devra alors être capable de se déplacer librement dans son environnement tout en détectant et contournant les obstacles qui se présenteront à lui. A chacune de ses positions, le robot effectuera un relevé d'intensité du signal WiFi reçu (RSSI) qu'il stockera dans sa carte mémoire. Ces données permettront ensuite d'établir une carte du bâtiment.
A chacune de ses positions, le robot devra faire des relevés d'intensité du signal Wifi reçu (RSSI), ce qui permettra ensuite d'établir une carte 3D.  
 
  
La position du robot devant être connue à chaque instant, un calibrage régulier grâce à une lecture de tags se devra donc d'être implantée.  
+
La position du robot doit être connue à chaque instant, un calibrage régulier grâce à une lecture de tags se devra donc d'être implantée. Nous utiliserons une caméra et des motifs de couleurs pour repositionner le robot. Nous effectuerons aussi un asservissement des moteurs afin que le robot ne dérive pas trop pendant ses déplacements.
  
 
La partie mécanique du robot ne relève pas de notre projet. Celle ci est en cours d'étude par des élèves de CM5. Nous devons alors entrer en contact avec eux afin de faire correspondre leurs objectifs avec les nôtres.
 
La partie mécanique du robot ne relève pas de notre projet. Celle ci est en cours d'étude par des élèves de CM5. Nous devons alors entrer en contact avec eux afin de faire correspondre leurs objectifs avec les nôtres.
  
 +
[[Fichier:BAC.png|center|400px]]
 
===Matériels utilisés===
 
===Matériels utilisés===
(à définir plus précisément par le futur)<br>
 
  
 
Pour notre projet, nous utiliserons le matériel suivant :<br>
 
Pour notre projet, nous utiliserons le matériel suivant :<br>
Ligne 28 : Ligne 30 :
 
* Un servomoteur pour faire pivoter le sonar.<br>
 
* Un servomoteur pour faire pivoter le sonar.<br>
 
* Une carte Arduino pour le contrôle des moteurs et capteurs.<br>
 
* Une carte Arduino pour le contrôle des moteurs et capteurs.<br>
* Une Raspberry et des clés wifi pour récupérer les mesures RSSI, gérer ces données, et faire la reconnaissance des tags visuels.<br>
+
* Une Raspberry et des clés WiFi pour récupérer les mesures RSSI, gérer ces données, et faire la reconnaissance des tags visuels.<br>
 
* Une liaison série (entre la raspberry et l'arduino) pour la communication (gestion des ordres et des données).<br>
 
* Une liaison série (entre la raspberry et l'arduino) pour la communication (gestion des ordres et des données).<br>
 
* Une batterie pour gérer l'alimentation des différents composants et aussi des moteurs.<br>
 
* Une batterie pour gérer l'alimentation des différents composants et aussi des moteurs.<br>
* Des puces drivers de moteurs pour les piloter.<br>
+
* Des puces de contrôle des moteurs (montées sur des PCB) pour les piloter.<br>
 
   
 
   
 
+
[[Fichier:FAST.png|center|500px]]
 +
<br>
 
[[Fichier:Arduino_raspberry.png‎|center]]
 
[[Fichier:Arduino_raspberry.png‎|center]]
  
Ligne 39 : Ligne 42 :
  
 
Semaine 1-2: Recherches bibliographiques et élaboration du cahier des charges.<br>
 
Semaine 1-2: Recherches bibliographiques et élaboration du cahier des charges.<br>
Semaine 2-3:<br>
+
Semaine 2-3: Choix réfléchi des composants - Etablissement d'une liste de matériel finale.<br>
Semaine 3-4:<br>
+
Semaine 3-4: Programmation Arduino - Prise en main Altium - Prise en main de la Raspberry.<br>
Semaine 4-5:<br>
+
Semaine 4-5: Programmation Arduino - Création des bibliothèques sous Altium - Mise en réseau de la Raspberry.<br>
Semaine 5-6:<br>
+
Semaine 5-6: Programmation sous Raspberry (bibliothèque OpenCV) du module Caméra - Création des PCB.<br>
Semaine 6-7:<br>
+
Semaine 6-7: Programmation pour la détection d'obstacles - Elaboration des PCB (Routage) - Recherches et programmation sur la lecture de tags.<br>
Semaine 7-8:<br>
+
Semaine 7-8: Programmation pour les mesures RSSI - Impression des PCB - Constitution du rapport.<br>
Semaine 8-9:<br>
+
Semaine 8-9: Realisation d'un scenario - Gestion des obstacles temporaires.<br>
Semaine 9-10:<br>
+
Semaine 9-10: Finalisation des programmes - Soudure des PCB - Tests.<br>
Semaine 10-11: Réalisation de la vidéo.<br>
+
Semaine 10-11: Réalisation de la vidéo - Préparation de la soutenance - Finalisation du projet.<br>
  
 
=Avancement du projet=
 
=Avancement du projet=
Ligne 54 : Ligne 57 :
  
  
* Rencontre avec les élèves de CM5 travaillant sur la partie mécanique du robot et Alexandre Boé. Nous avons pris connaissance de l'architecture mécanique du robot, ainsi que des différents moteurs permettant sa mise en mouvement. Le projet des élèves de CM5 repose sur un robot pouvant monter des escaliers. Ainsi, le robot est pourvu de chenilles d'une taille permettant au robot d'être stable sur 3 marches d'escalier et également d'un bras mobile lui permettant de se hisser sur la première marche.
+
* Rencontre avec les élèves de CM5 travaillant sur la partie mécanique du robot et Alexandre Boé.  
 +
Nous avons pris connaissance de l'architecture mécanique du robot, ainsi que des différents moteurs permettant sa mise en mouvement. Le projet des élèves de CM5 repose sur un robot pouvant monter des escaliers. Ainsi, le robot est pourvu de chenilles d'une taille "conséquente" permettant au robot d'avoir une stabilité sur 3 marches d'escalier et également d'un bras mobile lui permettant de se hisser sur la première marche.
 +
 
 +
 
 +
 
 +
Établissement de la liste précise du matériel.
  
'''Établissement de la liste précise de matériels'''
+
*Utilisation de 3 clés WiFi que l'on disposera le long d'un bras vertical, ce qui permettra de relever 3 niveaux de mesures de signal RSSI à chaque position du robot.<br>
  
* Utilisation de 3 clés wifi que l'on disposera le long d'un bras vertical, ce qui permettra de relever 3 mesures de signal RSSI à chaque position du robot.<br>
+
*Calibrage régulier de la position du robot grâce à la caméra de la Raspberry. Le principe reposera sur la détection d'une image ou d'une forme par la caméra et le repositionnement du robot.<br>
  
* Calibrage régulière de la position du robot grâce à la caméra de la raspberry. Le principe reposera sur la détection d'une image ou forme par la caméra et l'asservissement ensuite du robot concernant sa position et la direction à prendre.<br>
+
*Choix du capteur : plusieurs solutions sont envisageables, les capteurs infrarouges, lasers ou ultrasons. Les capteurs infrarouges sont difficiles à mettre en œuvre et sont sensibles à la lumière. Les capteurs lasers sont très précis mais relativement cher. Nous choisissons donc d'utiliser un capteur ultrasons puisque ceux-ci sont d'un prix très abordables, facile à utiliser et la lumière ambiante et l'opacité de la surface n'influent pas sur les résultats. Le capteur ultrason sera disposé sur un servomoteur pour la détection d'obstacle. Ainsi, la détection pourra se faire suivant toutes les directions par rapport au robot. On pilotera le servomoteur grâce à l'Arduino.<br>
  
* '''Choix du capteur :''' Plusieurs solutions sont envisageables, les capteurs infrarouges, lasers ou ultrasons.Les capteurs infrarouges sont difficiles à mettre en œuvre et sont sensibles à la lumière. Les capteurs lasers sont très précis mais relativement cher. Nous choisissons donc d'utiliser un capteur ultrasons puisque ceux-ci sont d'un prix très abordables, facile à utiliser et la lumière ambiante et l'opacité de la surface n'influent pas sur les résultats. Le capteur ultrason sera disposé sur un servomoteur pour la détection d'obstacle. Ainsi, la détection pourra se faire suivant toutes les directions par rapport au robot. Pilotage du servomoteur grâce à l'Arduino.<br>
+
[[Fichier:Sonar.png|center|400px]]
  
 
==Semaine 2-3==
 
==Semaine 2-3==
Ligne 68 : Ligne 76 :
 
* Choix d'une fourche optique pour l'asservissement du robot. On disposera une roue libre associée à une roue crantée sur le robot. Les impulsions fournies par la fourche optique permettront de connaître et d'asservir les différents moteurs via l'Arduino.<br>
 
* Choix d'une fourche optique pour l'asservissement du robot. On disposera une roue libre associée à une roue crantée sur le robot. Les impulsions fournies par la fourche optique permettront de connaître et d'asservir les différents moteurs via l'Arduino.<br>
  
* Choix des pilotes de moteurs en fonction du dimensionnement des différents moteurs. Il nous faudra par la suite réaliser des PCB en suivant la schématique de la figure suivante. Commande des différentes résistances et condensateurs.
+
* Étude des pilotes de moteurs.<br>
 +
Un simple pont en H peut nous permettre de contrôler les moteurs comme nous le souhaitons.<br>
 +
[[Fichier:Pont_h_in_action.gif|center|200px]]
 +
 
 +
* Choix des pilotes de moteurs en fonction du dimensionnement des différents moteurs (contrainte en courant). Il nous faudra par la suite réaliser des PCB en suivant la schématique de la figure suivante. Commande des différentes résistances et condensateurs.
 
[[Fichier:Schematic_gate_driver.png|center|600px]]
 
[[Fichier:Schematic_gate_driver.png|center|600px]]
  
'''Liste définitive de matérielle'''
+
* Élaboration et commande des matériel recquis
 +
'''Liste définitive de matériels'''
  
 
{| class="wikitable"
 
{| class="wikitable"
Ligne 95 : Ligne 108 :
 
  |  
 
  |  
 
  |-
 
  |-
  | Clé Wifi
+
  | Clé WiFi
 
  | 3
 
  | 3
 
  | 3
 
  | 3
Ligne 171 : Ligne 184 :
 
** Détection présence grâce au sonar.
 
** Détection présence grâce au sonar.
 
** Mise en marche des moteurs en fonction des pilotes de moteurs.
 
** Mise en marche des moteurs en fonction des pilotes de moteurs.
** Asservissement des moteurs en fonction des fourches optiques.
 
  
 +
 +
 +
* Prise en main d'Altium.
 +
** Réalisation d'un petit tutoriel de Mr Boé.
 +
** Création des premières schématics pour les libraires.
 +
** Réflexion sur les empruntes des composants.
 +
 +
 +
* Prise en main de la Raspberry.
 +
** Réalisation du montage de transmission vers l'ordinateur.
 +
** Recherches sur le fonctionnement de la bibliothèque OpenCV.
 +
** Essais de quelques scripts.
  
 
==Semaine 4-5==
 
==Semaine 4-5==
  
* Création de la bibliothéque Altium pour nos différents composants
+
* Etablissement des bibliothéques Altium pour nos différents composants.
  
 
* Modèle de câblage de la carte arduino :<br><br>
 
* Modèle de câblage de la carte arduino :<br><br>
 
[[Fichier:Schema_arduino.png‎|center|400px]]  
 
[[Fichier:Schema_arduino.png‎|center|400px]]  
  
* Mise en réseau de la Raspberry
+
* Travail sur la Raspberry.
 +
** Mise en réseau de la Raspberry (via USB).
 +
** Téléchargement de la bibliothèque OpenCV pour le traitement d'image (avec l'aide de Mr REDON).
 +
** La bibliothèque fonctionne principalement sur du code en Python - nous avons donc effectué une petite remise à niveau sur ce langage de programmation.
 +
** Nous avons essayé d'accéder au flux vidéo de la Pi caméra avec un résultat peu satisfaisant.
 +
 
 
==Semaine 5-6==
 
==Semaine 5-6==
 +
 
* Début de création des PCB sous Altium Designer pour les pilotes de moteurs.
 
* Début de création des PCB sous Altium Designer pour les pilotes de moteurs.
* Reçu du matériel et prises en main de ceux-ci via l'Arduino sur breadboard.
+
* Nous avons reçu notre matériel. Nous avons débuté les essais sur breadbord avec ceux-ci, via l'Arduino notamment.
* Utilisation de la bibliothèque OpenCV pour le traitement d'image sur la raspeberry et du module de la caméra Picamera.
+
* Nous avons ensuite continué de travailler avec la bibliothèque OpenCV pour le traitement d'image sur la Raspeberry et la Pi Caméra. Nous avons rencontré pas mal de difficultés, cette bibliothèque semble plus compliquée que prévu à maîtriser.
  
 
==Semaine 6-7==
 
==Semaine 6-7==
* Suite de création des PCB.
+
* Contact avec les élèves de CM5. Leur robot est désormais disponible au Fablab, les élèves ayant terminés leur PFE et n'étant plus à Polytech.
* Programmation de la carte Arduino en suivi un algorithme précis concernant la détection d'obstacle.
+
** Le robot ne possède pas de bras au final.
 +
** Il est alimenté par un générateur de tension pour le moment.
 +
** 2 MCC entraînent des chenilles, permettant son déplacement.
 +
[[Fichier:Robot_P21.jpg|center|500px]]
 +
 
 +
 
 +
* Suite de création des PCB : les schématics sont terminées, nous avons commencé le routage.  
 +
 
 +
* Programmation de la carte Arduino : utilisation d'un algorithme précis concernant la détection d'obstacle.
 
** Remarque 1: Lors du relevé de distance du capteur ultrason, quelques mesures parasites peuvent intervenir. Pour éviter de faire arrêter le robot par erreur de mesure, nous choisissons d'opérer sur des valeurs moyennes de mesures faites toutes les 10 ms.
 
** Remarque 1: Lors du relevé de distance du capteur ultrason, quelques mesures parasites peuvent intervenir. Pour éviter de faire arrêter le robot par erreur de mesure, nous choisissons d'opérer sur des valeurs moyennes de mesures faites toutes les 10 ms.
 
<pre>int distance_moyenne()
 
<pre>int distance_moyenne()
Ligne 220 : Ligne 258 :
  
 
** Remarque 2 : Difficulté du servomoteur à se positionner très précisément suivant un ordre donné. Ainsi celui-ci tangue autour de la position souhaitée à cause d'un mauvais asservissement vraisemblablement. De ce fait, le programme se bloque à une certaine ligne du code. Recherches et tentatives de contournement du problème.
 
** Remarque 2 : Difficulté du servomoteur à se positionner très précisément suivant un ordre donné. Ainsi celui-ci tangue autour de la position souhaitée à cause d'un mauvais asservissement vraisemblablement. De ce fait, le programme se bloque à une certaine ligne du code. Recherches et tentatives de contournement du problème.
 +
<br>
 +
[[Fichier:AlgoADPM.png|center|700px]]
  
 
==Semaine 7-8==
 
==Semaine 7-8==
 +
 +
* Téléchargement de Wireless Tools sur la Raspberry. La commande iwconfig permet d'obtenir les informations sur le réseau wWiFi auquel est connectée la raspberry.
 +
 +
<pre>root@raspberrypi:/home/pi/rssi# iwconfig                               
 +
wlan0    IEEE 802.11bgn  ESSID:"PolytechLille"                       
 +
          Mode:Managed  Frequency:2.412 GHz  Access Point: 00:19:07:C5:
 +
          Bit Rate=12 Mb/s  Tx-Power=20 dBm                           
 +
          Retry short limit:7  RTS thr:off  Fragment thr:off         
 +
          Encryption key:off                                           
 +
          Power Management:off                                         
 +
          Link Quality=55/70  Signal level=-55 dBm                     
 +
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0     
 +
          Tx excessive retries:0  Invalid misc:3  Missed beacon:0     
 +
                                                                       
 +
lo        no wireless extensions.                                     
 +
                                                                       
 +
eth0      no wireless extensions.                                     
 +
</pre>
 +
 +
* Écriture d'un premier script permettant d’enregistrer le niveau du signal
 +
** Remarque : Le niveau du signal n'étant pas constant, nous choisissons de nous tourner vers un programme permettant de faire une moyenne de 10 valeurs de rssi en décibel.
 +
 
==Semaine 8-9==
 
==Semaine 8-9==
 +
 +
* Suite à un bilan avec Monsieur Boé, nous décidons de nous orienter dans un premier temps vers la réalisation d'un scénario pour le robot.
 +
 +
* Gestion des obstacles temporaires dans le code Arduino avec l'utilisation d'un délai lors d'une détection d'obstacle .
 +
 +
* Résolution des problèmes concernant l'élaboration des PCB, ceux-ci étant liés à de mauvaises empruntes des composants.
 +
Schematic utilisé à la création des PCB.
 +
[[Fichier:Schematic_PCB.png|center|600px]]
 +
 +
Routage de la PCB (envoyé à Mr.Flamen pour l'impression).
 +
[[Fichier:RoutageADPM.png|center|600px]]
 +
 +
* Travaux de programmation sur les codes sources de Wireless Tools afin d'élaborer un code C pour le relevé et le traitement des mesures du niveau de qualité WiFi.
 +
 
==Semaine 9-10==
 
==Semaine 9-10==
 +
* Aux vues des difficultés pour le traitement des données rssi relevées par le script shell établit, et après un bref échange avec Monsieur Redon, nous décidons de nous tourner vers les codes sources de wireless tools. La fonction iwlist permet de relever les données de tous les signaux wifi, et ce via les trois clés wifi branchées à la raspberry. Aucune connexion internet n'est requise.<br/>
 +
 +
* Réalisation théorique d'un asservissement en vitesse des 2 moteurs. Utilisation d'un correcteur PID et programmation sur la carte Arduino.
 +
**Utilisation d'un échantillonnage pour lancer l'asservissement et éviter une surchage d'utilisation du microprocesseur de l'Arduino. <br>
 +
 +
[[Fichier:fourche.jpg|center|400px]]
 +
 +
* Problème rencontré : Après les difficultés rencontrées à l'utilisation d'OpenCv sur la rapsberry, nous nous tournons vers Artoolkit comme plusieurs binômes. Après étude, déchiffrage et manipulation de code fournis par les librairies de ce software, nous nous rendons compte que la compatibilité avec une raspberry n'est pas validée. Retour donc à la case départ vers OpenCv.<br>
 +
 +
* Mise en liaison de l'Arduino avec la Raspberry via le protocole I2C
 +
 
==Semaine 10-11==
 
==Semaine 10-11==
  
=Conclusion=
+
* Repositionnement du robot par lecture de tags :
 +
Utilisation d'OpenCV afin de segmenter une image pour isoler une couleur pré-choisie.
 +
 
 +
* Soudure de la PCB - Début des tests pour mettre en marche le robot.
 +
 
 +
* Préparation de la soutenance.
 +
 
 +
* Réalisation de la vidéo.
 +
 
 +
=Rapport final de projet=
 +
 
 +
[[Fichier:PROJET_IMA4_DESCAMD_MICHEL.pdf]]

Version actuelle datée du 14 juin 2016 à 08:25


Vidéo HD


Cahier des charges

Présentation générale

Contexte

De nos jours, la localisation indoor est devenu un enjeu important. En effet, se localiser précisément à l'intérieur d'un bâtiment constitue une tâche très complexe (le GPS est utilisable mais peu adapté) et c'est pourquoi ce robot peut tenter de répondre à cette problématique via une cartographie électromagnétique. Il peut aussi répondre à de nombreuses applications relevant du domaine de la santé, afin de mesurer l'exposition d'un patient à certaines ondes par exemple, ou encore du militaire. Ce protocole de localisation possède aussi d'autres applications mineures.

Objectifs

Notre projet a pour but de développer un robot autonome (en termes d'énergie et de déplacements) pouvant établir une cartographie électromagnétique (niveaux de qualité du signal WiFi) d'un bâtiment. Notre robot effectuera des mesures RSSI à différentes positions afin d'établir cette carte. Cela permettra alors à un utilisateur de pouvoir se localiser en comparant le signal qu'il reçoit avec celui existant dans la base de données.

Description du projet

Le niveau du signal WiFi dans un bâtiment n'est pas fixe puisqu'il dépend de modifications apportées en terme d'ajout, de retrait ou de déplacement de bornes WiFi mais également du mobilier présent ou de tous les systèmes pouvant interférer avec le signal. Il faut ainsi pouvoir concevoir un robot parfaitement autonome, que ce soit énergétiquement mais également du point de vue de son déplacement et de la récupération des données.

Le robot devra alors être capable de se déplacer librement dans son environnement tout en détectant et contournant les obstacles qui se présenteront à lui. A chacune de ses positions, le robot effectuera un relevé d'intensité du signal WiFi reçu (RSSI) qu'il stockera dans sa carte mémoire. Ces données permettront ensuite d'établir une carte du bâtiment.

La position du robot doit être connue à chaque instant, un calibrage régulier grâce à une lecture de tags se devra donc d'être implantée. Nous utiliserons une caméra et des motifs de couleurs pour repositionner le robot. Nous effectuerons aussi un asservissement des moteurs afin que le robot ne dérive pas trop pendant ses déplacements.

La partie mécanique du robot ne relève pas de notre projet. Celle ci est en cours d'étude par des élèves de CM5. Nous devons alors entrer en contact avec eux afin de faire correspondre leurs objectifs avec les nôtres.

BAC.png

Matériels utilisés

Pour notre projet, nous utiliserons le matériel suivant :

  • Une platine mécanique dotée de capteurs.
  • Un capteur pour la détection des obstacles.
  • Un servomoteur pour faire pivoter le sonar.
  • Une carte Arduino pour le contrôle des moteurs et capteurs.
  • Une Raspberry et des clés WiFi pour récupérer les mesures RSSI, gérer ces données, et faire la reconnaissance des tags visuels.
  • Une liaison série (entre la raspberry et l'arduino) pour la communication (gestion des ordres et des données).
  • Une batterie pour gérer l'alimentation des différents composants et aussi des moteurs.
  • Des puces de contrôle des moteurs (montées sur des PCB) pour les piloter.
FAST.png


Arduino raspberry.png

Planning prévisionnel

Semaine 1-2: Recherches bibliographiques et élaboration du cahier des charges.
Semaine 2-3: Choix réfléchi des composants - Etablissement d'une liste de matériel finale.
Semaine 3-4: Programmation Arduino - Prise en main Altium - Prise en main de la Raspberry.
Semaine 4-5: Programmation Arduino - Création des bibliothèques sous Altium - Mise en réseau de la Raspberry.
Semaine 5-6: Programmation sous Raspberry (bibliothèque OpenCV) du module Caméra - Création des PCB.
Semaine 6-7: Programmation pour la détection d'obstacles - Elaboration des PCB (Routage) - Recherches et programmation sur la lecture de tags.
Semaine 7-8: Programmation pour les mesures RSSI - Impression des PCB - Constitution du rapport.
Semaine 8-9: Realisation d'un scenario - Gestion des obstacles temporaires.
Semaine 9-10: Finalisation des programmes - Soudure des PCB - Tests.
Semaine 10-11: Réalisation de la vidéo - Préparation de la soutenance - Finalisation du projet.

Avancement du projet

Semaine 1-2

  • Rencontre avec les élèves de CM5 travaillant sur la partie mécanique du robot et Alexandre Boé.

Nous avons pris connaissance de l'architecture mécanique du robot, ainsi que des différents moteurs permettant sa mise en mouvement. Le projet des élèves de CM5 repose sur un robot pouvant monter des escaliers. Ainsi, le robot est pourvu de chenilles d'une taille "conséquente" permettant au robot d'avoir une stabilité sur 3 marches d'escalier et également d'un bras mobile lui permettant de se hisser sur la première marche.


Établissement de la liste précise du matériel.

  • Utilisation de 3 clés WiFi que l'on disposera le long d'un bras vertical, ce qui permettra de relever 3 niveaux de mesures de signal RSSI à chaque position du robot.
  • Calibrage régulier de la position du robot grâce à la caméra de la Raspberry. Le principe reposera sur la détection d'une image ou d'une forme par la caméra et le repositionnement du robot.
  • Choix du capteur : plusieurs solutions sont envisageables, les capteurs infrarouges, lasers ou ultrasons. Les capteurs infrarouges sont difficiles à mettre en œuvre et sont sensibles à la lumière. Les capteurs lasers sont très précis mais relativement cher. Nous choisissons donc d'utiliser un capteur ultrasons puisque ceux-ci sont d'un prix très abordables, facile à utiliser et la lumière ambiante et l'opacité de la surface n'influent pas sur les résultats. Le capteur ultrason sera disposé sur un servomoteur pour la détection d'obstacle. Ainsi, la détection pourra se faire suivant toutes les directions par rapport au robot. On pilotera le servomoteur grâce à l'Arduino.
Sonar.png

Semaine 2-3

  • Choix d'une fourche optique pour l'asservissement du robot. On disposera une roue libre associée à une roue crantée sur le robot. Les impulsions fournies par la fourche optique permettront de connaître et d'asservir les différents moteurs via l'Arduino.
  • Étude des pilotes de moteurs.

Un simple pont en H peut nous permettre de contrôler les moteurs comme nous le souhaitons.

Pont h in action.gif
  • Choix des pilotes de moteurs en fonction du dimensionnement des différents moteurs (contrainte en courant). Il nous faudra par la suite réaliser des PCB en suivant la schématique de la figure suivante. Commande des différentes résistances et condensateurs.
Schematic gate driver.png
  • Élaboration et commande des matériel recquis

Liste définitive de matériels

Matériel Quantité requise Quantité disponible A commander Commentaires
Arduino UNO 1 1 0
Raspberry Pi 2 1 1 0
Carte SD 1 1 0
Clé WiFi 3 3 0
Capteur Ultrason 1 0 1 GoTronic : [1]
Servomoteur 1 0 1 GoTronic : [2]
Pilote de moteur 5 0 5 Mouser : [3]
Résistance 270 Ohm 10 0 10 Mouser : [4]
Condensateur 100 uF 5 0 5 Magasin Polytech
Condensateur 100 nF 5 0 5 Magasin Polytech
Condensateur 33 nF 5 0 5 Magasin Polytech
Condensateur 1 uF 5 0 5 Magasin Polytech
Câble USB 2m 2 0 2 GoTronic : [5]
Fourche optique 2 0 2 GoTronic : [6]

Semaine 3-4

Architecture matérielle finale

Architecture materielle.png


  • Programmation de la carte Arduino sur l'IDE Arduino dans un premier temps sans tenir compte d'une détection de tag visuels par la Raspberry.
    • Pilotage du servomoteur.
    • Détection présence grâce au sonar.
    • Mise en marche des moteurs en fonction des pilotes de moteurs.


  • Prise en main d'Altium.
    • Réalisation d'un petit tutoriel de Mr Boé.
    • Création des premières schématics pour les libraires.
    • Réflexion sur les empruntes des composants.


  • Prise en main de la Raspberry.
    • Réalisation du montage de transmission vers l'ordinateur.
    • Recherches sur le fonctionnement de la bibliothèque OpenCV.
    • Essais de quelques scripts.

Semaine 4-5

  • Etablissement des bibliothéques Altium pour nos différents composants.
  • Modèle de câblage de la carte arduino :

Schema arduino.png
  • Travail sur la Raspberry.
    • Mise en réseau de la Raspberry (via USB).
    • Téléchargement de la bibliothèque OpenCV pour le traitement d'image (avec l'aide de Mr REDON).
    • La bibliothèque fonctionne principalement sur du code en Python - nous avons donc effectué une petite remise à niveau sur ce langage de programmation.
    • Nous avons essayé d'accéder au flux vidéo de la Pi caméra avec un résultat peu satisfaisant.

Semaine 5-6

  • Début de création des PCB sous Altium Designer pour les pilotes de moteurs.
  • Nous avons reçu notre matériel. Nous avons débuté les essais sur breadbord avec ceux-ci, via l'Arduino notamment.
  • Nous avons ensuite continué de travailler avec la bibliothèque OpenCV pour le traitement d'image sur la Raspeberry et la Pi Caméra. Nous avons rencontré pas mal de difficultés, cette bibliothèque semble plus compliquée que prévu à maîtriser.

Semaine 6-7

  • Contact avec les élèves de CM5. Leur robot est désormais disponible au Fablab, les élèves ayant terminés leur PFE et n'étant plus à Polytech.
    • Le robot ne possède pas de bras au final.
    • Il est alimenté par un générateur de tension pour le moment.
    • 2 MCC entraînent des chenilles, permettant son déplacement.
Robot P21.jpg


  • Suite de création des PCB : les schématics sont terminées, nous avons commencé le routage.
  • Programmation de la carte Arduino : utilisation d'un algorithme précis concernant la détection d'obstacle.
    • Remarque 1: Lors du relevé de distance du capteur ultrason, quelques mesures parasites peuvent intervenir. Pour éviter de faire arrêter le robot par erreur de mesure, nous choisissons d'opérer sur des valeurs moyennes de mesures faites toutes les 10 ms.
int distance_moyenne()
{
  int i;
  int val_i;
  int somme = 0;
  for (i = 0; i < 10; i += 1) {
    val_i = getDistance();
    delay(10);
    somme = somme + val_i;
  }
  val_moy = somme / 10;
  Serial.print("valeur moyenne: val_moy");
  return val_moy;
}

int getDistance()
{
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  lecture_echo = pulseIn(echo, HIGH);
  val = lecture_echo / 58;
  Serial.print("Distance : ");
  Serial.println(val);
  return val;
}
    • Remarque 2 : Difficulté du servomoteur à se positionner très précisément suivant un ordre donné. Ainsi celui-ci tangue autour de la position souhaitée à cause d'un mauvais asservissement vraisemblablement. De ce fait, le programme se bloque à une certaine ligne du code. Recherches et tentatives de contournement du problème.


AlgoADPM.png

Semaine 7-8

  • Téléchargement de Wireless Tools sur la Raspberry. La commande iwconfig permet d'obtenir les informations sur le réseau wWiFi auquel est connectée la raspberry.
root@raspberrypi:/home/pi/rssi# iwconfig                                
wlan0     IEEE 802.11bgn  ESSID:"PolytechLille"                         
          Mode:Managed  Frequency:2.412 GHz  Access Point: 00:19:07:C5: 
          Bit Rate=12 Mb/s   Tx-Power=20 dBm                            
          Retry short limit:7   RTS thr:off   Fragment thr:off          
          Encryption key:off                                            
          Power Management:off                                          
          Link Quality=55/70  Signal level=-55 dBm                      
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0      
          Tx excessive retries:0  Invalid misc:3   Missed beacon:0      
                                                                        
lo        no wireless extensions.                                       
                                                                        
eth0      no wireless extensions.                                       
  • Écriture d'un premier script permettant d’enregistrer le niveau du signal
    • Remarque : Le niveau du signal n'étant pas constant, nous choisissons de nous tourner vers un programme permettant de faire une moyenne de 10 valeurs de rssi en décibel.

Semaine 8-9

  • Suite à un bilan avec Monsieur Boé, nous décidons de nous orienter dans un premier temps vers la réalisation d'un scénario pour le robot.
  • Gestion des obstacles temporaires dans le code Arduino avec l'utilisation d'un délai lors d'une détection d'obstacle .
  • Résolution des problèmes concernant l'élaboration des PCB, ceux-ci étant liés à de mauvaises empruntes des composants.

Schematic utilisé à la création des PCB.

Schematic PCB.png

Routage de la PCB (envoyé à Mr.Flamen pour l'impression).

RoutageADPM.png
  • Travaux de programmation sur les codes sources de Wireless Tools afin d'élaborer un code C pour le relevé et le traitement des mesures du niveau de qualité WiFi.

Semaine 9-10

  • Aux vues des difficultés pour le traitement des données rssi relevées par le script shell établit, et après un bref échange avec Monsieur Redon, nous décidons de nous tourner vers les codes sources de wireless tools. La fonction iwlist permet de relever les données de tous les signaux wifi, et ce via les trois clés wifi branchées à la raspberry. Aucune connexion internet n'est requise.
  • Réalisation théorique d'un asservissement en vitesse des 2 moteurs. Utilisation d'un correcteur PID et programmation sur la carte Arduino.
    • Utilisation d'un échantillonnage pour lancer l'asservissement et éviter une surchage d'utilisation du microprocesseur de l'Arduino.
Fourche.jpg
  • Problème rencontré : Après les difficultés rencontrées à l'utilisation d'OpenCv sur la rapsberry, nous nous tournons vers Artoolkit comme plusieurs binômes. Après étude, déchiffrage et manipulation de code fournis par les librairies de ce software, nous nous rendons compte que la compatibilité avec une raspberry n'est pas validée. Retour donc à la case départ vers OpenCv.
  • Mise en liaison de l'Arduino avec la Raspberry via le protocole I2C

Semaine 10-11

  • Repositionnement du robot par lecture de tags :

Utilisation d'OpenCV afin de segmenter une image pour isoler une couleur pré-choisie.

  • Soudure de la PCB - Début des tests pour mettre en marche le robot.
  • Préparation de la soutenance.
  • Réalisation de la vidéo.

Rapport final de projet

Fichier:PROJET IMA4 DESCAMD MICHEL.pdf