Hanoi

PROJET HANOI

 

Résultat de recherche d'images pour "photo robot tx60"

CRIQUI JULES – SCHABAT SIMON

2018-2019

 

 


SOMMAIRE

 

I. Introduction
     Présentation du sujet

     Matériel utilisé
c   Présentation du groupe
  Distribution du temps

 

II. Objectifs
     Résultats attendus

 

III. Partie sur Raspberry pi
     Détection d’angles
     Détection d’une couleur
     Application d’un filtre de couleur
     Interface graphique

 

IV. Partie communication
     Mise en place client-serveur
     Création socket

 

V. Partie sur l’environnement Stäubli
     Réception de l’information
c   Traitement de l’information

 

VI. Amélioration
     Ajout d’un ultrason

 

VII. Problèmes rencontrés
     Partie Stäubli
  Partie Raspberry pi

 

VIII. Résultats

 

IX. Conclusion et remerciements

 

 


 

I.Introduction

 

1. Présentation du sujet

 

Dans le cadre de la 2ème année du DUT Génie Électrique et Informatique Industrielle, nous avons dû réaliser un projet mettant en pratiques nos connaissances. Plusieurs projets nous on été présentés et ce projet nous a particulièrement intéressé. Accompagnés de nos tuteurs, M. BAZEILLE Stéphane et M. REBERT Martin, nous avons eu 100 heures pour atteindre les objectifs attendus. Notre projet consiste à automatiser un système à l’aide d’un nano-ordinateur.

Les tours de Hanoï (originellement, la tour d’Hanoï) sont un jeu de réflexion consistant à déplacer des disques de diamètres différents d’une tour de « départ » à une tour d’« arrivée » en passant par une tour « intermédiaire », et ceci en un minimum de coups. Le joueur ne peut pas déplacer plus d’un disque à la fois et ne peut placer un disque que sur un autre disque plus grand que lui ou sur un emplacement vide.

Voici un exemple de la résolution des tours de Hanoï avec 4 disques :

 

Le but de notre projet n’est pas simplement de résoudre les tours de Hanoï mais d’automatiser la résolution à l’aide d’un robot.

 

L’utilisateur place la tour sur une des colonne résolution Hanoï, ensuite la caméra prend une photo, traite l’image pour connaître son emplacement et le nombre de pièces. Si la tour est située sur la première colonne ( colonne gauche ) la résolution sera directement effectuée. Si la tour est placée sur la colonne du milieu, alors la tour sera déplacée pièce par pièce sur les colonnes déplacement pile. Si la tour est située sur la dernière colonne ( colonne de droite ), la résolution ne sera pas effectuée car la tour se situe déjà sur la colonne finale.

 

2. Matériel utilisé

 

Pour réaliser notre projet nous avons eu à disposition un robot de la marque Stäubli, un nano-ordinateur de la marque Raspberry pi, un ultrason et une caméra.

Le robot Stäubli est un robot utilisé dans le monde de l’industrie permettant d’automatiser des tâches offrant davantage de productivité et de performances qu’une personne. Dans notre projet, nous avons utilisé un robot TX60 6 axes pour déplacer les pièces :

Résultat de recherche d'images pour "photo robot tx60"

c                                                                                                         Robot Stäubli TX60

 

La caméra nous a permis de prendre des photos qui seront traitées à l’aide du Raspberry pi.

Logitech C270   Résultat de recherche d'images pour "raspberry pi"

c                          Caméra Logitech C270                                                       Raspberry Pi

 

L’ultrason nous permet de détecter la présence de la tour.

 

c                  Capteur ultrason HC-SR04

 

3. Présentation du groupe

 

Le groupe est composé de 2 personnes, CRIQUI Jules et SCHABAT Simon. Chaque personne s’est occupée de l’écriture du code en python ( langage de programmation ). CRIQUI Jules s’est occupé d’exécuter le programme et d’enregistrer les positions initiales sur le robot, il s’agit de déplacer le robot manuellement (commande libre) à un endroit précis pour que le robot sache où est placée la tour. SCHABAT Simon s’est occupé de la simulation logicielle du robot, cette partie consiste à écrire et tester le programme.

 

4. Distribution du temps

 

Notre projet a duré 100 heures. Voici la répartition du temps des différentes parties du projet :

Les deux parties les plus longues ont été l’écriture des programmes python et Stäubli.

 


II. Objectifs

 

1. Résultats attendus

 

L’objectif initial de ce projet était de connaître la position de la tour peut importe son emplacement, composé de trois personnes. La charge de travail a été diminuée car nous étions seulement deux personnes. L’objectif final a été modifié, nous ne pouvons mettre la tour à 3 endroits possibles. Ceci facilite grandement le projet car traiter une image avec autant de précision demande du travail supplémentaire et donc une autre personne.

Le nouvel objectif est alors de trouver sur quelle colonne est placée la tour et de déterminer le nombre de pièces pour ensuite résoudre Hanoï et/ou déplacer la tour.

 

 


III. Partie sur Raspberry

 

1. Détection d’angles

 

La première méthode que nous avons utilisé est une détection d’angles. Pour cela, nous allons prendre une photo globale de l’environnement des tours puis nous allons effectuer un zoom dans l’image pour isoler la tour.

Nous avons ensuite exécuté un algorithme pour détecter les angles.

Nous remarquons que l’algorithme détecte des angles (correspondant aux points sur l’image), les points ne sont pas très visibles à l’écran, nous avons alors changé la couleur des points.

Cela ne correspond pas aux résultats attendus, cette méthode n’est donc pas fiable. Nous allons alors utilisés une autre méthode.

 

2. Détection d’une couleur

 

La tour étant métallique, elle reflète énormément ce qui nous empêche de traiter l’image correctement. Nous avons alors décidé de scotché la tour pour supprimer les reflets et d’uniformiser la couleur de la tour.

 

Nous avons ensuite créée un algorithme pour ne garder que la couleur bleu de la tour.

 

c                             Résultat

On constate donc que la tour n’est pas isolée de l’environnement. Pour tester si notre programme fonctionne, nous avons pris du bleu pur et appliqué le programme.

Nous remarquons que notre programme fonctionne car il a gardé le carré bleu. On peut en déduire que le bleu de la tour n’est pas un bleu pur mais composé de plusieurs couleurs. Sachant qu’un pixel est composé de Rouge, de Vert et de Bleu (RGB), nous allons utiliser un logiciel (GIMP) pour connaitre la composition des pixels de la tour.

 

3. Application d’un filtre de couleur

 

Sachant qu’une image est un tableau composée de pixels, nous avons comparé chaque pixels de l’image avec le filtre que nous avons défini à l’aide du logiciel GIMP. Nous avons sélectionné le pixel la plus clair et le plus sombre pour déterminer les bornes du filtre. Nous appliquons donc ce filtre à l’image prise avec la caméra, les pixels compris dans le filtre sont gardés puis remplacés en blanc et les pixels exclus sont remplacés par du noir.

Voici le résultat du filtre :

Nous pouvons voir que des parties de la tour ne rentrent pas dans le filtre. On a donc utilisé un algorithme permettant de combler les trous.

 

A partir du résultat final, nous avons déterminé la position de la tour grâce à des intervalles. Nous avons comparé un pixel de la tour aux 3 intervalles prédéfinis. Les intervalles ont été définis de la manière suivante, nous avons pris la longueur de l’image et nous l’avons divisé par 3. Ainsi nous avons des intervalles de même taille.

 

Pour déterminer le nombre de pièces, nous avons travaillé avec la hauteur de la pile. Pour connaitre cette hauteur, nous avons pris le pixel blanc le plus haut dans l’image et le pixel le plus bas. Nous avons ensuite soustrait leurs coordonnées en Y pour connaitre la hauteur de la tour. Connaissant la hauteur d’une pièce à l’aide du logiciel GIMP, nous avons ensuite divisé la hauteur totale avec la hauteur d’une pièce. Nous avons arrondie le résultat à la valeur la plus proche.

Pour résumer notre méthode, nous avons pris une photo, fait un zoom dans cette photo. Ensuite nous y avons appliqué le filtre de couleur et transformé la photo en noir et blanc. Enfin nous avons comblé les imperfections et évalué la hauteur de la tour puis sa position. Cette méthode a un inconvénient, elle ne fonctionne seulement lorsque l’environnement est sombre. Dans un environnement lumineux, il est difficile de déterminer les intervalles du filtre de couleur ne contenant que la tour.

Pour pallier au problème lumineux, nous avons modifié les paramètres de la caméra pour que la tour ressorte de l’environnement.

 

4. Interface graphique

 

Pour simplifier l’utilisation du programme, nous avons mis en place une interface graphique qui nous permet de lancer le programme lors de la présence d’une tour. Cette interface nous informe aussi sur le nombre de pièces détectés et la position de la tour. La détection de la tour s’effectue grâce à un capteur ultrason (cf Partie VI).

     

c                          Attente                                                                    Tour détectée                                                    Programme lancé

 

 


IV Partie communication

 

1. Mise en place Client-Serveur

 

L’objectif est de mettre en place une communication entre le robot et le raspberry pi. Pour que deux systèmes communiquent, il faut que l’un soit serveur, et que l’autre soit client. Le serveur attend les requêtes du client. Le client envoie des requêtes de connexion, une fois acceptées, le client peut envoyer des données. Dans notre cas, le serveur est le robot et le client est le raspberry pi.

Premièrement pour que deux systèmes communiquent, ils doivent être sur le même sous-réseau (réseau local). Les sous réseaux sont différenciés par leurs adresses IP.

Un serveur peut héberger plusieurs services, grâce aux ports nous pouvons donc atteindre le bon service. Nous avons donc configuré les adresses et les ports des deux systèmes.

Pour que deux systèmes communiquent, ils doivent être capable de lire des données, c’est pour cela que nous avons créé un socket. Un socket est un trou qui laisse passer les données.

Grâce à ce socket, nous pouvons envoyer une chaîne de caractère comme par exemple « 5_3\r ». Le 5 correspond au nombre de pièces, le 3 correspond à la colonne et le \r correspond au caractère de fin de chaîne, il détermine la fin de la réception pour le serveur.

 


V.Partie sur l’environnement Stäubli

 

1. Réception de l’information

 

Pour recevoir et stocker une chaîne de caractère, nous avons créé une variable de type « SIO » (entrées-sorties sur liaison série et socket TCP/IP). De plus, pour traiter la chaîne de caractères, nous avons créé un algorithme qui permet de séparer le nombre de pièces et le numéro de la colonne dans 2 variables différentes, comme montré ci-dessous.

 

2. Traitement de l’information

 

Une fois les deux informations stockées, le programme se lance. La tour peut être placée à 3 endroits différents : Colonne 1 , Colonne 2, Colonne 3. En fonction de la position de la tour, la résolution sera différente. Voici les 3 cas possibles :

1er cas :

Dans ce cas, la tour est placée sur la première colonne. Le programme va donc effectuer directement la résolution de Hanoï.

 

2ème cas :

 

Dans ce cas, la tour est placée sur la deuxième colonne. Le programme va alors déplacer la tour sur les colonnes déplacement pile (schéma ci-dessous).

 

Le programme va ensuite replacer les pièces sur la première colonne (schéma ci-dessous). La résolution va ensuite commencer.

 

 

3ème cas :

Dans ce dernier cas, la tour est placée dans la 3ème colonne. Le programme ne va donc rien exécuter car la tour se situe déjà dans la colonne finale.

 

 


VI. Amélioration

 

1. Ajout d’un ultrason

 

Dans le but d’améliorer le projet, nous avons ajouté un capteur ultrason qui détecte la présence de la tour. Tant que la tour n’est pas détectée, l’utilisateur ne peut pas lancer le programme via l’interface graphique. Cela sécurise le lancement du programme.

Voici la disposition réel du projet :

 

 

 


VII. Problèmes rencontrés

 

1. Partie Stäubli

 

Nous avons lancé le programme sur des cartons pour des raisons de sécurité. Nous avons eu à maintes reprises des problèmes de hauteur, le robot s’enfonçait dans le carton :

Nous avons aussi eu des problèmes pour que les deux systèmes communiquent.

 

2. Partie Raspberry Pi

 

L’écriture du programme en python était particulièrement difficile car c’était la première fois que nous utilisions ce langage. Nous manquions de connaissance sur cet environnement et lorsque nous avions des erreurs d’exécution du programme, nous ne trouvions pas l’erreur.

 

 


VIII. Résultats

 

Voici quelques tests du programme en variant le nombre de pièce et la position de la colonne :


IX. Conclusion et remerciements

 

Nous voulons tout d’abord remercier Mr BAZEILLE Stéphane et Mr REBERT Martin de nous avoir guidés et aidés tout au long du projet.

Pour conclure, ce projet a été très enrichissant pour nous car il nous a permis de découvrir dans les détails le secteur de la robotique et du traitement d’image. Ce projet en groupe nous a appris à nous partager les tâches et mettre en commun les parties de chacun, pour concrétiser à un projet abouti.