Binome2015-8 : Différence entre versions
(→Utilisation des lignes du terrain) |
(→Utilisation des lignes du terrain) |
||
Ligne 67 : | Ligne 67 : | ||
* Fonction d'identification pour chaque capteur | * Fonction d'identification pour chaque capteur | ||
− | [[Fichier: Idcapteur.png]] | + | [[Fichier: Idcapteur.png|center]] |
Ligne 76 : | Ligne 76 : | ||
* une pour que le robot reste à l'intérieur du terrain | * une pour que le robot reste à l'intérieur du terrain | ||
− | [[Fichier: Resterterrain.png|600px|]] | + | [[Fichier: Resterterrain.png|600px|center]] |
* une seconde permettant au robot de suive une ligne et pour rentrer au garage (en vert=2) | * une seconde permettant au robot de suive une ligne et pour rentrer au garage (en vert=2) | ||
− | [[Fichier: Ligne.png|600px|]] | + | [[Fichier: Ligne.png|600px|center]] |
==<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #ACACFC; vertical-align: top; width: 98%;">Détection de la balle</div>== | ==<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #ACACFC; vertical-align: top; width: 98%;">Détection de la balle</div>== |
Version du 16 mai 2016 à 13:17
Sommaire
Introduction
Le projet de cette année consistait à créer un terrain de foot sur lequel deux robots compétiteurs s'affrontent, et un robot ramasseur qui sera chargé de récupérer le ballon dans un but à la fin d'une partie et de le repositionner au centre du terrain.
Notre binôme, composé de Théo Renard et Benjamin Delbos, a décidé de travailler sur un robot compétiteur. Nous allons vous faire le compte rendu de notre travail tout au long de ce bureau d'étude qui nous a permis de découvrir la section IMA.
Si ce compte-rendu n'a pas été tenu de manière régulière, il n'en est pas moins complet et exhaustif des réflexions que nous avons menées, des problèmes rencontrés et de l'avancement de notre projet.
Nous avons décidé d'organiser ce compte-rendu de la même façon que notre travail sur le projet, c'est à dire étape par étape, et non séance par séance. En effet comme il nous ait arrivé de rester bloqué pendant plusieurs séances sur un seul problème, puis d’avancer rapidement durant d’autres, nous nous sommes donc dit qu'il était plus intéressant de fonctionner ainsi.
Ainsi nous détaillerons pour chaque étape, correspondant à une fonction de notre robot, les difficultés auxquelles nous avons été opposées, les solutions que nous avons trouvées pour y répondre mais aussi les problèmes que nous avons rencontrés dans l'agencement de ces différents composants.
Découverte du projet
Nous avons fait le choix de travailler sur un robot compétiteur. Notre robot sera composé d'un châssis à 2 roues. Lors de la première séance nous avons commencé par monter la base du robot. Nous nous sommes ensuite penchés sur le cahier des charges à respecter pour l'aboutissement de notre projet et avons ainsi fixés nos objectifs.
Pour parvenir à la réussite de notre projet, il fallait que nous utilisions un nouveau matériel, l'Arduino, demandant la maitrise du langage C. Des lacunes dans le domaine informatiques nous ont alors ralentis puisque nous commencions les cours de Langage C en même temps que le Bureau d’étude (Janvier). Il était donc primordial pour la suite de notre travail de nous familiariser avec ce nouvel outil.
Nous l’avons alors découvert grâce aux cours disponibles sur Openclassroom. Ce cours, très complet, nous a permis d’apprendre rapidement les bases de l’Arduino. Nous pouvions maintenant nous lancer dans le vif du sujet !
Étapes principales
Déplacement du robot
Ce qui nous sembler le plus important pour commencer était que notre robot puisse se déplacer. La première étape a donc été de donner la mobilité à notre robot compétiteur.
Du fait de nos difficultés pour le codage et pour les branchements à ce moment du projet, cette étape a été plutôt longue. En effet, des questions se posaient, à ce moment nous hésitions notamment entre si nous devions utiliser le logiciel Ardublock ou plutôt Arduino IDE. Sachant que si nous commencions par utiliser Ardublock pour commencer, nous allions être vite limités et qu'il faudra bien finir par passer sur Arduino, nous avons finalement décidé de nous lancer directement sur le codage avec Arduino IDE.
C'est donc en nous inspirant de modèles trouvés sur internet que nous avons créé notre première fonction « move » sur Arduino IDE. Cette étape a été fondamentale pour la prise en main de cet outil informatique. Une fois notre contrôleur moteur branché, nous avions donc un robot capable d’avancer, reculer, tourner…
- Fonction move
- Fonction avancer / tourner
Partie Ultrason
Maintenant que notre robot se déplaçait, il fallait qu’il soit capable d’éviter des obstacles. Le deuxième composant que nous avons inclus a donc été le capteur ultrason.
Nous avons cherché un modèle de code pour ce composant sur internet, celui que nous avons trouvé permettait d’afficher les valeurs de distances des obstacles. En le testant, ces valeurs nous paraissaient correctes.
Nous avons alors créé une fonction permettant de détecter s’il y avait un obstacle. Cette fonction, combinée à la fonction de déplacement, permettait à notre robot joueur de dévier sa trajectoire s’il détectait un obstacle à 10 cm de son capteur.
- Code partie ultrason
Utilisation des lignes du terrain
A présent notre objectif était que le robot soit capable de rester à l’intérieur du terrain. Pour cela il nous fallait utiliser des capteurs de lignes. Notre choix s’est porté sur 3 capteurs de lignes.
Tout comme pour les composants précédents nous sommes inspirés d’un code trouvé sur internet. Ce code renvoyant des valeurs entre 0 et 1000 en fonction de quelle couleur se trouvait sous le capteur. En utilisant les lignes de l'ancien terrain, nous avons alors testé les valeurs données par nos capteurs de ligne. Nous avons notés les valeurs, afin de les utiliser dans le suivi de ligne.
Une premier problème se poser : il y avait des différences significatives dans les valeurs données par chaque capteur... Nous avons tenté de les cachés les uns des autres, mais aucun changement n’était observé. Pour résoudre ce problème nous avons modifié les distances les séparant du sol, ces distances s'avérant importantes. Une fois les capteurs de lignes situés au plus près du sol et surtout chacun à distances égales du sol, les écarts étaient beaucoup moins important. Mais comme il persistait encore de petites différences nous avons créé pour chacun des 3 capteurs une fonction permettant d’identifié la couleur présente. Le rouge cependant n'était pas détecté, les couleurs idéales pour les lignes étaient alors le noir, le vert et le bleu. Nous avons communiqué ces observations aux groupes travaillant sur l’élaboration du terrain de jeu.
- Fonction d'identification pour chaque capteur
Un autre problème se posait, nous avons décidé de mettre 3 capteurs de ligne situés à l'avant du robot, mais les lignes étant épaisses, il a fallu modifier leur écartement (le robot faisait demi-tour au lieu de suivre le virage). Finalement le groupe chargé du terrain a réduit la largeur des lignes, éliminant ce problème.
Nous avons finalement réalisé deux fonctions :
- une pour que le robot reste à l'intérieur du terrain
- une seconde permettant au robot de suive une ligne et pour rentrer au garage (en vert=2)
Détection de la balle
Toujours dans notre optique de travailler étapes par étapes, et toute les étapes de bases étant maintenant fonctionnelles, nous pouvions maintenant nous intéresser à la détection de la balle. Afin de pouvoir la détecter, nous avons branché, selon des schémas trouvés sur internet, un phototransistor, avec une résistance de 1 kOhm. Nous avons testé les valeurs renvoyés par le phototransistors en réalisant une fonction avec affichage. Ce test nous a montrés que les valeurs renvoyées étaient très faibles (même avec la balle collée au phototransistor) et ne permettait pas de réellement détecter la balle. Nous avons alors testé différentes valeurs de résistances, pour opter finalement pour des résistances de 56 kOhm. L'augmentation de la valeur des résistances nous a permis d'obtenir des valeurs nettement plus utilisables. Nous avons donc réalisés les mêmes branchements pour 2 autres phototransistors puis créé une fonction de comparaisons des trois valeurs renvoyés par les phototransistors milieu, droit et gauche, et qui en fonction de la valeur la plus grande, fais se déplacer le robot dans la direction du phototransistors associé à cette valeur. On a alors testé sur le terrain si le robot arrivait à suivre la balle, le résultat était plutôt bon même si le robot manque parfois de réactivité. Pour faciliter la recherche de la balle et avoir plus de chance de la détecter, nous décidons de placer 3 phototransistors à l'avant et 2 à l'arrière. A cette étape, deux questions se posaient : - le capteur ultrason verra-t-il la balle comme un obstacle à éviter ? Auquel cas il faudra le prendre en compte dans le code final et désactiver le capteur ultrason à ce moment. - comme la balle continue d'émettre une fois attrapée, le phototransistor du milieu la verra toujours et ne pourra pas détecter le but, faut-il alors rajouter un autre phototransistor dédié à la recherche du but ? Pour répondre à cette question il nous fallait concevoir la pince.
La pince
Nous avons commencé à penser à différentes alternatives possible pour la conception de notre pince et réalisé divers croquis. Nous avons alors décidé de nous inspirer des projets IMA des saisons précédentes. Il s'agit de confectionner un système de grue, avec une articulation sur laquelle est fixée un « L », qui bloquera la balle en position fermée et tapera la balle en s'ouvrant pour la lancer. Nous pensions alors à donner de la mobilité au L soit par le biais d'une courroie, soit d'engrenages. Mais finalement nous avons fait le choix beaucoup plus simple de placer le servomoteur directement au bout de la grue, sur l'axe de rotation de la pelle. A cette étape, nous décidons définitivement de placer 6 phototransistors. Le 6ème, qui sera utilisé lorsque la pince sera en position fermée avec la balle emprisonnée à l’intérieur, sera placé en avant sur la grue, afin de pouvoir capter le but même quand la pince est fermée. La fabrication de la pelle et des grues ont pris du temps, car il fallait encore découvrir de nouveaux outils, Freecad et Inkscape, qu'aucun de nous ne maîtrisions à la base.
Pour la réalisation de la partie grue nous avons procédé en 2D sur Inkscape, sur lequel nous avons dessiné la même pièce deux fois. Puis l’une nous avons retiré un petit rectangle correspondant à l’endroit où vient se positionner le servomoteur. Nous avons obtenu ces 2 pièces identiques à l’aide de la découpeuse laser en découpant du contreplaqué. Ces 2 pièces identiques qui viendront s’emboiter de part et d’autres de l’avant du robot en étant face à face.
La réalisation de la partie en L a été faite en 3D sur Freecad. Nous l’avons imprimé grâce à l’imprimante 3D. Nous obtenions ainsi cette pièce (en jaune). Cette pièce comportait beaucoup de vide, cela était volontaire : nous avions pour but de ne pas faire obstacle au capteur ultrason qui sera positionné sur la grue, et également de ne pas masquer notre phototransistor central, nous permettant de viser la balle pour l’attraper. L’assemblage de la pince n’a posé aucun problème, tout était bien dimensionné. Nous ne faisions ni obstacle au capteur ultrasons, et le phototransistor était toujours capable de détecter la balle. Cependant il y avait un petit problème au niveau du L : lorsque le robot se déplace avec la pince en position fermé et la balle à l’intérieur, la balle s’échappe de la pince sur les côtés. De plus lorsque la pince se ferme elle n’arrive pas systématiquement a emporter la balle à l’intérieur. Pour résoudre ces 2 problèmes nous avons imprimé en 3D 3 petites pièces supplémentaires (en rose). Les 2 tiges afin que la balle ne puisse pas sortir, et le rabat afin d’attraper la balle à coup sûr. Mais un autre problème se créé puisque maintenant la rabat faisait obstacle au capteur ultrason. Etant dans l’incapacité de le placer ailleurs pour que celui si soit utile, nous avons fait le choix de le désactiver. Maintenant que notre pièce était complète, il ne nous restait plus qu’à déterminer les positions du servomoteur correspondant à chaque étape. Nous avons opté pour : Ouverte : 70 -> (attrape la balle) -> Fermée : 0 -> (lance la balle) -> 200 (le max afin d’avoir plus de puissance) Et c’est à ce moment que nous avons connu notre gros problème avec la pince… Lorsque tout était correctement assemblé nous avons voulu coller la pince sur le partie mobile du servomoteur car la pince se déboitait par moment, mais quand la colle a séché, notre servomoteur accroché. En essayant de régler ce problème notre servomoteur s’est endommagé et c’est pour cela que nous devons l’aider sur notre vidéo, il n’est plus assez puissant.
Circuit imprimé
Maintenant que tous nos composants étaient branchés et fonctionnels, nous pouvions enfin nous intéresser à comment se débarrasser de ce gros fouilli du fils et de la platine d’essai. Grâce au logiciel Fritzing, nous avons modélisé le circuit imprimé. Nous avons fait le choix de réaliser 2 plaques imprimées, une placée à l'avant, comportant les 4 phototransistors de l’avant, le servomoteur de la pince, les 3 capteurs de lignes ainsi que le capteur ultrason. A l'arrière, la plaque se fixant sur l'Arduino comporte le contrôleur moteur, le Xbee et les 2 phototransistors arrière. Nous avons imprimé une première plaque mais il s'est avéré que de mauvais réglages dans le logiciel induisaient des court-circuits, nous avons alors repris la modélisation, afin de modifier ces réglages, supprimer des pins que nous avions placé à tort sur les pins de l'Arduino, et en ajoutant une mise à la masse. Une fois les circuits réalisés, nous avons fait les soudures nécessaires et rebranché tous nos composants.
Élaboration du code final
Maintenant que tous nos composants sont rebranchés, nous les re-testons. Pour une raison que nous ignorons notre fonction pour rester dans le terrain, et celle pour suivre la ligne et donc rentrer au garage ne fonctionnent plus… En reprenant le programme affichant la valeur renvoyée par chaque capteur de ligne, nous nous apercevons que les 3 valeurs évoluent de façon étrange. En effet les trois valeurs correspondent au noir alors que seul le capteur du milieu est sur du noir et les deux autres sont sur du blanc. Nous avons essayé de modifier cela mais sans y parvenir. Nous avons donc abandonné la partie suivie de lignes et modifié la fonction pour rester dans le terrain en modifiant les délais.
Nous avons décidé de décomposer le déroulement d’une partie en différentes étapes et de les faire se dérouler grâce a un indice « étape »:
1) la pince se positionne en position ouverte (70) et le robot se déplace en restant dans le terrain. Si la balle est détectée on passe à l’étape 2 Nous avons essayé de placer une condition dans l’étape 1 mais celle-ci prenait systématiquement le dessus sur notre étape même si notre robot ne détectait pas la balle.
2) La balle est détectée, on passe en détection de « précision » avec la fonction présenté dans la partie « Détection de la balle » de notre wiki. Une fois la balle attrapée on passe à l’étape 3
3) Le robot se déplace en restant dans le terrain avec la pince en position fermée (0) et la balle à l’intérieur. Le 6éme phototransistor s’active pour chercher le but. Lorsque le robot détecte le but on passe à l’étape 4
4) Le robot vise maintenant le but avec la fonction détection de « précision ». Lorsque le 6éme capteur le détecte, le robot lance la balle (pince passe à 200).
5) La pince revient en position ouverte (70). Le robot se déplace jusqu’à rencontrer une ligne puis la suit pour rentrer au garage (lorsqu’il détecte du vert sur la ligne il s’arrête). Malheureusement depuis que nous utilisons notre circuit imprimé, cette fonction ne fonctionne plus…
Tournage de la Vidéo
Comme nous vous l’expliquons dans notre vidéo, nous n’avons pas réussi à faire s’enchainer toutes les étapes correspondant à une partie. C’est pour cela que nous avons laissé le robot branché durant la vidéo, afin de faire s’enchainer les étapes « manuellement », et aussi afin d’apporter une alimentation supplémentaire. Notre robot fonctionne tout de même sans l’alimentation PC car les piles seules suffisaient, mais le robot était quand même plus « énergique » avec les deux alimentations combinées.
Perspectives d'amélioration
- La pince : Nous regrettons de ne pas avoir pris un servomoteur plus puissant. Cependant avec certaines précautions d'usage le petit servomoteur que nous avons utilisé auront pu faire l'affaire. Mais étant actuellement endommagé il faudrait donc le remplacer.
- Suivie de ligne : D'après nos conclusions, un problème dans la réalisation de notre circuit imprimé semble à l'origine du non-fonctionnement de notre fonction de suivie de ligne puisque celle ci fonctionner avec le retrait de la platine d’essais.
- Détection de la balle et du but : Notre fonction de détection IR fonctionnent très bien mais cependant celle ci fonctionnent uniquement lorsque la balle ou le but se trouvent relativement proche de notre robot. Peut-être que l'utilisation d'un autre composant que les phototransistors apporterait un meilleur résultat.
- Xbee : Nous avons fais le choix de négliger cette partie du projet. En effet voyant l'échéance de la fin du projet se rapprocher très rapidement, nous avons jugé plus important et judicieux de nous investir pleinement sur le fonctionnement notre robot joueur plutôt que de le faire communiquer avec le but. D'autant plus qu'en discutant avec les groupes ayant construit un but, ils nous ont dit qu'il allait être compliqué de les utiliser.
Conclusion
Ce bureau d'étude nous a permis d'apprendre différentes choses. Tout d'abord celui-ci nous a permis de réaliser un travail en équipe. Il s’agissait de notre première expérience avec les robots communicants et ce fut une expérience très intéressante. Nous avons pu découvrir de nouveau outil comme Arduino, Freecad, Frietzig,... et nous avons acquis certaine compétences en électronique.
Ce projet a pris beaucoup de temps, nous nous sommes fortement investis, surtout sur la fin. Toutefois il était plaisant de travailler sur ce robot car cela était un travail assez ludique et il nous apportait une certaine satisfaction de voir notre robot évoluer de semaine en semaine.
Nous sommes un peu déçus du résultat final de notre travail car nous ne sommes pas parvenus à faire fonctionner toutes les fonctions de notre robot ensemble et à les faire s'enchainer parfaitement lors de la vidéo. Alors que celle-ci fonctionnaient lorsque nous avons travaillé dessus indépendamment. Nous avions l'objectif d'obtenir un robot le plus fonctionnel possible. Cependant nous sommes content d'avoir pu travailler ensemble sur ce projet.