Robot autonome pour cartographie : Différence entre versions

De Wiki de Projets IMA
(Semaine 2-3)
(Semaine 2-3)
Ligne 70 : Ligne 70 :
  
 
* 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.
 
* 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.
[[Fichier:Schematic_gate_driver.png|center|600px]]
+
[[Fichier:Schematic_gate_driver.png|center|100px]]
  
 
'''Liste définitive de matérielle'''
 
'''Liste définitive de matérielle'''

Version du 9 mai 2016 à 15:41

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 et cela répond à de nombreuses applications relevant du domaine de la santé, afin de mesurer l'exposition à 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 d'un signal WiFi à l'intérieur d'un bâtiment. Notre robot effectuera des mesures RSSI à plusieurs coordonnées de l'espace 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.


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:
Semaine 9-10:
Semaine 10-11: Réalisation de la vidéo.

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 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.

É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 mesures de signal RSSI à chaque position du robot.
  • 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.
  • 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.

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.
Pont h in action.gif
  • 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.
Schematic gate driver.png

Liste définitive de matérielle

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.

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.
  • 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).

Routage PCB.png


  • Recherche d'élaboration d'un code C pour le relevé et le traitement des niveaux rssi.

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.
  • 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.

Semaine 10-11

Conclusion