Robot autonome pour cartographie

De Wiki de Projets IMA
Révision datée du 25 avril 2016 à 12:21 par Adescamd (discussion | contributions) (Contexte)

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

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.

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

(à définir plus précisément par le futur)

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 drivers de moteurs pour les piloter.


Arduino raspberry.png

Planning prévisionnel

Semaine 1-2: Recherches bibliographiques et élaboration du cahier des charges.
Semaine 2-3: Établissement d'une liste de matériel précise.
Semaine 3-4: Début de la programmation de l'Arduino.
Semaine 4-5: Création des bibliothèques sous Altium et mise en réseau de la Raspberry.
Semaine 5-6: Début de la programmation sous Raspberry (bibliothèque OpenCV) du module Caméra et création des PCB.
Semaine 6-7: Programmation pour la détection d'obstacles, élaboration des PCB, travail sur la lecture de tags via OpenCV.
Semaine 7-8: Programmation pour les mesures RSSI.
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.
  • 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.
    • Asservissement des moteurs en fonction des fourches optiques.


Semaine 4-5

  • Création de la bibliothéque Altium pour nos différents composants
  • Modèle de câblage de la carte arduino :

Schema arduino.png
  • Mise en réseau de la Raspberry

Semaine 5-6

  • 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.
  • Utilisation de la bibliothèque OpenCV pour le traitement d'image sur la raspeberry et du module de la caméra Picamera.

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.
  • Programmation de la carte Arduino en suivi 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 wifi auquel est connecté 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 d'élaborer 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


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

Semaine 9-10

Semaine 10-11

Conclusion