Robot autonome pour cartographie : Différence entre versions
(105 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. | + | 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 | + | 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=== | ||
− | + | 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. | |
− | A chacune de ses positions, le robot | + | |
+ | 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=== | ||
− | |||
Pour notre projet, nous utiliserons le matériel suivant :<br> | Pour notre projet, nous utiliserons le matériel suivant :<br> | ||
− | * | + | * Une platine mécanique dotée de capteurs. <br> |
− | * Un capteur | + | * Un capteur pour la détection des obstacles.<br> |
* 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 | + | * 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 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]] | ||
+ | |||
+ | ==Planning prévisionnel== | ||
+ | |||
+ | Semaine 1-2: Recherches bibliographiques et élaboration du cahier des charges.<br> | ||
+ | Semaine 2-3: Choix réfléchi des composants - Etablissement d'une liste de matériel finale.<br> | ||
+ | Semaine 3-4: Programmation Arduino - Prise en main Altium - Prise en main de la Raspberry.<br> | ||
+ | Semaine 4-5: Programmation Arduino - Création des bibliothèques sous Altium - Mise en réseau de la Raspberry.<br> | ||
+ | Semaine 5-6: Programmation sous Raspberry (bibliothèque OpenCV) du module Caméra - Création des PCB.<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: Programmation pour les mesures RSSI - Impression des PCB - Constitution du rapport.<br> | ||
+ | Semaine 8-9: Realisation d'un scenario - Gestion des obstacles temporaires.<br> | ||
+ | Semaine 9-10: Finalisation des programmes - Soudure des PCB - Tests.<br> | ||
+ | Semaine 10-11: Réalisation de la vidéo - Préparation de la soutenance - Finalisation du projet.<br> | ||
+ | |||
+ | =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.<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> | ||
+ | |||
+ | *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> | ||
+ | |||
+ | [[Fichier:Sonar.png|center|400px]] | ||
+ | |||
+ | ==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.<br> | ||
+ | |||
+ | * É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]] | ||
+ | |||
+ | * Élaboration et commande des matériel recquis | ||
+ | '''Liste définitive de matériels''' | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! 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 : [http://www.gotronic.fr/art-module-de-detection-us-hc-sr04-20912.htm] | ||
+ | |- | ||
+ | | Servomoteur | ||
+ | | 1 | ||
+ | | 0 | ||
+ | | 1 | ||
+ | | GoTronic : [http://www.gotronic.fr/art-servomoteur-s05nf-21481.htm] | ||
+ | |- | ||
+ | | Pilote de moteur | ||
+ | | 5 | ||
+ | | 0 | ||
+ | | 5 | ||
+ | | Mouser : [http://www.mouser.fr/ProductDetail/Freescale-Semiconductor/MC34931EK/?qs=sGAEpiMZZMvQcoNRkxSQkiOBqyFfjGe5mG1PBZLkPLE%3d] | ||
+ | |- | ||
+ | | Résistance 270 Ohm | ||
+ | | 10 | ||
+ | | 0 | ||
+ | | 10 | ||
+ | | Mouser : [http://www.mouser.fr/ProductDetail/TE-Connectivity-Holsworthy/3521270RFT/?qs=sGAEpiMZZMu61qfTUdNhG15ROd0nQ7Wlf0zCDKWeZ5snBOgjDqh8dA%3d%3d] | ||
+ | |- | ||
+ | | 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 : [http://www.gotronic.fr/art-cordon-2m-cw091b-15249.htm] | ||
+ | |- | ||
+ | | Fourche optique | ||
+ | | 2 | ||
+ | | 0 | ||
+ | | 2 | ||
+ | | GoTronic : [http://www.gotronic.fr/art-interrupteur-optique-gp1a57hrj00f-21001.htm] | ||
+ | |} | ||
+ | |||
+ | ==Semaine 3-4== | ||
+ | |||
+ | '''Architecture matérielle finale'''<br> | ||
+ | [[Fichier:Architecture_materielle.png|center]] | ||
+ | <br> | ||
+ | * 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 :<br><br> | ||
+ | [[Fichier:Schema_arduino.png|center|400px]] | ||
+ | |||
+ | * 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. | ||
+ | [[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. | ||
+ | <pre>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; | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | ** 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== | ||
+ | |||
+ | * 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== | ||
+ | |||
+ | * 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== | ||
+ | * 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== | ||
+ | |||
+ | * 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
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.
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.
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.
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.
- 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.
- É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
- 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 :
- 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.
- 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.
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.
Routage de la PCB (envoyé à Mr.Flamen pour l'impression).
- 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.
- Utilisation d'un échantillonnage pour lancer l'asservissement et éviter une surchage d'utilisation du microprocesseur de l'Arduino.
- 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.