RobotDefense2013-1 : Différence entre versions
(→Défendre le but) |
|||
(39 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
+ | <include nopre noesc src="/home/pedago/ppeip/include/video-RobotDéfense1-2013-iframe.html" /> | ||
+ | __TOC__ | ||
+ | <br style="clear: both;"> | ||
+ | = Introduction = | ||
+ | Dans le cadre du bureau d'étude d'IMA, nous avons choisi de réaliser et de programmer un robot de défense. Un cahier des charges nous a été imposé et nous nous somme efforcer de répondre aux attentes. Pour cela on a commencé par la réalisation mécanique du robot, et on y a apporté des modifications tout au long du projet. Ensuite on a testé les différents capteurs en les plaçant sur le robot. Enfin nous avons commencé la programmation du robot avec des tâches simples : suivre un émetteur IR et éviter des obstacles. Enfin, nous avons concrétiser le terrain pour améliorer notre programme de défense. | ||
+ | |||
= Réalisation mécanique du Robot = | = Réalisation mécanique du Robot = | ||
Nous avons commencé par construire le "châssis" du robot avec les roues, puis nous avons décidé d'utiliser des chenilles plutôt que des pneus (pour que le robot avance droit). | Nous avons commencé par construire le "châssis" du robot avec les roues, puis nous avons décidé d'utiliser des chenilles plutôt que des pneus (pour que le robot avance droit). | ||
− | Ensuite nous avons construit le support du nxt. Un support situé à l'arrière, incliné pour être plus facilement lisible et utilisable. De plus, il est accessible car étant à l'arrière et séparé du reste, on peut ainsi le retirer relativement aisément. | + | Ensuite nous avons construit le support du nxt. Un support situé à l'arrière, incliné pour être plus facilement lisible et utilisable. De plus, il est accessible car étant à l'arrière et séparé du reste, on peut ainsi le retirer relativement aisément. (photo 1) |
− | Puis, nous avons ajouté les capteurs ultrasons, couleurs et RFID vers l'avant du robot, entre les roues. Les capteurs couleurs & RFID sont pointés vers le sol. | + | Puis, nous avons ajouté les capteurs ultrasons, couleurs et RFID vers l'avant du robot, entre les roues. Les capteurs couleurs & RFID sont pointés vers le sol. (photo 2 et 3) |
− | Pour symboliser un moyen de taper la balle, nous avons ajouté le 3ème moteur avec une batte à l'avant | + | Pour symboliser un moyen de taper la balle, nous avons ajouté le 3ème moteur avec une batte à l'avant à droite du robot. (photo 3) |
− | Enfin, nous avons ajouté le capteur infrarouge en hauteur, sur la partie gauche du robot. | + | Enfin, nous avons ajouté le capteur infrarouge en hauteur, sur la partie gauche du robot. (photo 3) |
<gallery> | <gallery> | ||
− | file:photo2.JPG| | + | file:photo2.JPG|photo 1 |
− | file:photo3.JPG| | + | file:photo3.JPG|photo 2 |
− | file:photo4.JPG| | + | file:photo4.JPG|photo 3 |
+ | file:Photo 1.JPG|photo 4 | ||
+ | file:Photo 4.JPG|photo 5 | ||
+ | file:Photo 5.JPG|photo 6 | ||
</gallery> | </gallery> | ||
− | Pour finir, nous avons ajouté un dernier capteur : le compas. Il est nécessaire d'éloigner le compas des autres capteurs, moteurs, et du NXT car le compas mesure la force du champ magnétique terrestre. Ne pas l'éloigner de ces capteurs peu gêner le dans ses mesures. Pour | + | Pour finir, nous avons ajouté un dernier capteur: le compas (photo 4). Il est nécessaire d'éloigner le compas des autres capteurs, moteurs, et du NXT car le compas mesure la force du champ magnétique terrestre. Ne pas l'éloigner de ces capteurs peu gêner le dans ses mesures. Pour cela, nous avons rajouté deux tiges (pour plus de stabilité) écartant de 10cm le compas de toute source d'interférences. |
+ | |||
+ | Enfin nous avons installer le capteur infrarouge sur l'axe pivotant de la batte pour qu'une fois en position de défense le capteur soit orienté vers la balle. Ce qui nous permet de savoir où est la balle à tout moment lors de la défense. | ||
+ | Sur la photo 5 le bras est replié, le robot est en mode replacement (il recherche son but) le capteur infrarouge est orienté vers l'avant du robot. | ||
+ | sur la photo 6 le bras est déplié, le robot est en mode défense (il est dans la zone de défense perpendiculaire au terrain) le capteur infrarouge est orienté perpendiculairement au robot pour déterminer avec précision de quel coté arrive la balle. | ||
+ | |||
+ | = Réalisation du terrain= | ||
+ | [[Fichier:Real_terrain.png|250px|right|thumb|Schéma du terrain]] | ||
+ | Dans le but d'améliorer notre robot et de le mettre dans les conditions, nous avons matérialisé le terrain. <br/> | ||
+ | De dimension de 3m de longueur sur 1,5m de largeur, la ligne de sortie de terrain est matérialisée en avec du scotch bleu. Nous avions pensé au début à du noir, mais le sol étant déjà gris le robot ne faisait pas, ou pas assez bien, la différence entre le celui-ci et la ligne. <br/> | ||
+ | Ensuite, nous avons matérialisé la ligne de milieu de terrain en rose. Cette ligne pourra servir aux robots d'attaque pour se replacer.<br/> | ||
+ | Pour finir, nous avons aussi créé des zones de défenses en vert. Ces zones sont matérialisées pour les robots de défense. Elles délimites l'espace où les robots de défenses peuvent se placer sans gêner ou obstruer les buts. Elles sont situées à 30cm des but et à 90cm du milieu de terrain. Nous avons préféré l'idée de zone en couleur, plutôt que de la délimiter par deux bandes de scotch car cela facilite la programmation. | ||
+ | |||
+ | [[Fichier:photo.JPG|500px|thumb|center|terrain avec boussole]] | ||
= Tests moteurs - Capteurs = | = Tests moteurs - Capteurs = | ||
− | ==Test avancer== | + | == Test avancer== |
On a vérifié que le robot avançait en ligne droite, savait tourner et faire un demi tour sur place. C'est lors de ces test que nous avons décidé d'utiliser des chenilles plutôt que des pneus. | On a vérifié que le robot avançait en ligne droite, savait tourner et faire un demi tour sur place. C'est lors de ces test que nous avons décidé d'utiliser des chenilles plutôt que des pneus. | ||
− | ==Tests ultrasons== | + | == Tests ultrasons== |
− | Nous avons surélevé le NXT par rapport au capteur ultrason, car lorsque celui est rabattu vers l'avant, il gênait le capteur. | + | Nous avons surélevé le NXT par rapport au capteur ultrason, car lorsque celui est rabattu vers l'avant, il gênait le capteur. |
Ensuite, on a demander à visualiser la distance avec ce capteur. Nous avons remarqué que la distance maximum programmable est de 2,55m. De plus, l'affichage qui se fait centimètres, nous a révélé que sa précision était adéquate (au centimètre). | Ensuite, on a demander à visualiser la distance avec ce capteur. Nous avons remarqué que la distance maximum programmable est de 2,55m. De plus, l'affichage qui se fait centimètres, nous a révélé que sa précision était adéquate (au centimètre). | ||
+ | == Test couleur== | ||
+ | Nous avons du abaisser le capteur couleur(h=~2mm), car étant trop haut, il ne détectait pas les différentes couleurs. une fois abaissé, nous avons pu demander au robot différentes actions comme faire demi tour dans le cas d'une ligne de limite de terrain. Ainsi, le robot ne dépasse pas entièrement la ligne. | ||
− | + | == Test infra rouge== | |
− | |||
− | |||
− | |||
− | ==Test infra rouge== | ||
On a d'abord du télécharger le module IRSeeker sur www.hitechnics.com pour l'intégrer au software lego Mindstorm Nxt. | On a d'abord du télécharger le module IRSeeker sur www.hitechnics.com pour l'intégrer au software lego Mindstorm Nxt. | ||
Ce qui nous a permis de tester les différents paramètres de la détection infrarouge. | Ce qui nous a permis de tester les différents paramètres de la détection infrarouge. | ||
Ligne 49 : | Ligne 69 : | ||
Le module permet aussi de choisir si l'on souhaite détecter une émission infrarouge continue (DC) ou alternative, avec une fréquence (AC). | Le module permet aussi de choisir si l'on souhaite détecter une émission infrarouge continue (DC) ou alternative, avec une fréquence (AC). | ||
+ | Ensuite on a téléchargé un autre module InfraRouge sur www.hitechnics.com. Ce module nous permet de séléctioner si on souhaite repérer plutôt une fréquence alternative ou continue. | ||
− | ==Test lecteur RFID== | + | == Test lecteur RFID== |
On a d'abord du télécharger le module RFID Read sur le site generationrobot. | On a d'abord du télécharger le module RFID Read sur le site generationrobot. | ||
− | Ensuite, comme pour le capteur couleur, nous avons du rapprocher le capteur du sol (h=~2mm), autrement, le robot ne détectais pas assez bien la carte RFID. | + | Ensuite, comme pour le capteur couleur, nous avons du rapprocher le capteur du sol (h=~2mm), autrement, le robot ne détectais pas assez bien la carte RFID. |
On a su faire repérer au robot la présence, ou non, d'une carte RFID sur son passage, et d'agir en conséquence (changer de direction, s'arrêter...) | On a su faire repérer au robot la présence, ou non, d'une carte RFID sur son passage, et d'agir en conséquence (changer de direction, s'arrêter...) | ||
Finalement, nous avons décidé de laisser de côté le RFID, car il n'aurait pas été possible de paver l'intégralité du terrain. Il aurait donc fallut en mettre à certains endroits. Mais dans ce cas, la balle aurait été gênée par les cartes. | Finalement, nous avons décidé de laisser de côté le RFID, car il n'aurait pas été possible de paver l'intégralité du terrain. Il aurait donc fallut en mettre à certains endroits. Mais dans ce cas, la balle aurait été gênée par les cartes. | ||
− | ==Test Boussole== | + | == Test Boussole== |
nous avons téléchargé le module Compass Sensor sur le site hitechnics. | nous avons téléchargé le module Compass Sensor sur le site hitechnics. | ||
− | Nous avons repéré les directions principales par rapport au terrain | + | Nous avons repéré les directions principales par rapport au terrain. |
+ | [[Fichier:Real_terrain_compas.png|thumb|500px|center|terrain]] | ||
= Programmation du Robot= | = Programmation du Robot= | ||
Pour programmer le robot, nous utilisons le logiciel Lego Mindstorm. | Pour programmer le robot, nous utilisons le logiciel Lego Mindstorm. | ||
− | Le robot doit être capable de se positionner dans sa zone de défense | + | Le robot doit être capable de se positionner dans sa zone de défense et de repérer la balle pour protéger le but. |
− | ==Repérer un émetteur InfraRouge== | + | == Repérer un émetteur InfraRouge== |
Nous avons commencé par faire repérer un émetteur IR (la balle ici, mais on pourra utiliser les buts plus tard) et faire avancer le robot vers l'émetteur. | Nous avons commencé par faire repérer un émetteur IR (la balle ici, mais on pourra utiliser les buts plus tard) et faire avancer le robot vers l'émetteur. | ||
Le robot commence par repérer l'émetteur, voir si il se trouve a sa gauche ou a sa droite (en utilisant la fonction DegDirection du capteur IR). Une fois l'émetteur repéré, le robot se tourne de manière à se mettre en face de l'émetteur. Ensuite il avance. Tout au long de son avancé vers l'émetteur, le robot continue de tester s'il se trouve toujours bien en face de l'émetteur. Si non, il corrige sa trajectoire avant de continuer à avancer. | Le robot commence par repérer l'émetteur, voir si il se trouve a sa gauche ou a sa droite (en utilisant la fonction DegDirection du capteur IR). Une fois l'émetteur repéré, le robot se tourne de manière à se mettre en face de l'émetteur. Ensuite il avance. Tout au long de son avancé vers l'émetteur, le robot continue de tester s'il se trouve toujours bien en face de l'émetteur. Si non, il corrige sa trajectoire avant de continuer à avancer. | ||
Ligne 76 : | Ligne 98 : | ||
On remarquera que cette boucle s'arrête avec une deuxième condition, si un obstacle se trouve à moins de 30cm (ultrasons). Ce qui permet l'arrêt du robot pour commencer la procédure d'esquive d'un obstacle. | On remarquera que cette boucle s'arrête avec une deuxième condition, si un obstacle se trouve à moins de 30cm (ultrasons). Ce qui permet l'arrêt du robot pour commencer la procédure d'esquive d'un obstacle. | ||
− | ==Éviter un obstacle== | + | == Éviter un obstacle== |
[[Fichier:evit_obj.png|400px|thumb|right|éviter un obstacle par le coté le plus approprié]] | [[Fichier:evit_obj.png|400px|thumb|right|éviter un obstacle par le coté le plus approprié]] | ||
Ensuite, nous avons inclus dans ce programme la capacité d'éviter un obstacle sur sa trajectoire via le capteur ultrasons. De la même manière que le robot test sa distance avec l'émetteur IR, ici il test, au long de son avancée, s'il y a un obstacle à une distance symbolisée par une constante. Si le capteur trouve un obstacle a une distance inférieure à la constante, le robot s'arrête. | Ensuite, nous avons inclus dans ce programme la capacité d'éviter un obstacle sur sa trajectoire via le capteur ultrasons. De la même manière que le robot test sa distance avec l'émetteur IR, ici il test, au long de son avancée, s'il y a un obstacle à une distance symbolisée par une constante. Si le capteur trouve un obstacle a une distance inférieure à la constante, le robot s'arrête. | ||
Ligne 83 : | Ligne 105 : | ||
Le robot se tourne d'abord a gauche d'un angle de 30° mesure la distance de l'objet le plus proche, se tourne a droite de 60° mesure la distance de l'objet le plus proche, compare les deux valeurs et se tourne vers la direction ou l'objet est le moins proche. le robot avance ensuite sur 20cm puis le programme reprend (test d'obstacle, recherche de la source infrarouge etc...). | Le robot se tourne d'abord a gauche d'un angle de 30° mesure la distance de l'objet le plus proche, se tourne a droite de 60° mesure la distance de l'objet le plus proche, compare les deux valeurs et se tourne vers la direction ou l'objet est le moins proche. le robot avance ensuite sur 20cm puis le programme reprend (test d'obstacle, recherche de la source infrarouge etc...). | ||
− | ==Illustration des programmes== | + | == Illustration des programmes== |
Pour tester les programmes 'repérer un émetteur IR' et 'éviter un obstacle' nous avons filmé notre robot. | Pour tester les programmes 'repérer un émetteur IR' et 'éviter un obstacle' nous avons filmé notre robot. | ||
http://www.youtube.com/watch?v=QOSnsy9F6aY&hd=1 | http://www.youtube.com/watch?v=QOSnsy9F6aY&hd=1 | ||
Ligne 89 : | Ligne 111 : | ||
Dans cette vidéo, on voit le robot progresser vers la balle (émetteur IR) sur son chemin il rencontre un robot (obstacle) qu'il évite, et enfin, une fois qu'il est proche de la balle, il se retourne. (ici la balle symbolise un but. Après avoir trouvé son but, le robot le défend) | Dans cette vidéo, on voit le robot progresser vers la balle (émetteur IR) sur son chemin il rencontre un robot (obstacle) qu'il évite, et enfin, une fois qu'il est proche de la balle, il se retourne. (ici la balle symbolise un but. Après avoir trouvé son but, le robot le défend) | ||
− | ==Défendre le but== | + | == Défendre le but== |
Le robot se positionne dans la zone verte, et se place ensuite de manière perpendiculaire à l'arrivée de la balle. Pour arrêter la balle, le robot corrige sa position de manière à rester à 90° de la balle. Ainsi, le robot empêche la balle de passer. Pour augmenter ses chances de stopper la balle, la batte est déployée. | Le robot se positionne dans la zone verte, et se place ensuite de manière perpendiculaire à l'arrivée de la balle. Pour arrêter la balle, le robot corrige sa position de manière à rester à 90° de la balle. Ainsi, le robot empêche la balle de passer. Pour augmenter ses chances de stopper la balle, la batte est déployée. | ||
+ | |||
+ | Pour rester à 90° de la balle, le capteur infrarouge trouve la direction. Selon celle qui est renvoyée, le robot détermine s'il doit avancer ou reculer. Dès qu'il se retrouve perpendiculaire à la balle, il s'arrête de nouveau. | ||
+ | En changeant de place le capteur InfraRouge, on a supprimé le principal défaut de ce programme. | ||
+ | En effet, dès que la balle passait un peut trop derrière le capteur, celui ci ne renvoyait plus des données très cohérentes. Ainsi, au lieu de reculer, le robot avançait, et le programme perdait de son sens. | ||
+ | Avec le changement de place du capteur IR, la balle ne passe plus derrière, et le robot s'arrête lorsqu'il voit la balle 'en face'. | ||
+ | Lorsque le capteur renvois des valeurs entre 2 et 5, la balle va passer devant le robot, il avance. | ||
+ | Lorsque le capteur renvois des valeurs entre 5 et 8, la balle va passer derrière le robot, il recule. | ||
+ | Si les valeurs renvoyées sont 1, 9 ou 0 (lorsque le capteur ne détecte pas la balle),, c'est que la balle est passée outre le robot. | ||
Nous avons décidé de ne pas inclure la procédure pour éviter les obstacles dans la partie de défense du robot. Ainsi il sera plus efficace dans sa fonction en ne cherchant pas à éviter les autres robots, mais en les empêchant de passer. | Nous avons décidé de ne pas inclure la procédure pour éviter les obstacles dans la partie de défense du robot. Ainsi il sera plus efficace dans sa fonction en ne cherchant pas à éviter les autres robots, mais en les empêchant de passer. | ||
− | Pour pouvoir rester dans la zone de défense, nous | + | Pour pouvoir rester dans la zone de défense, nous faisons avancer le robot dans le sens inverse lorsqu'il passe sur une ligne. Ainsi, dès que le capteur couleur détecte une autre couleur que le vert, le robot repart dans l'autre sens pour rester dans sa zone. |
− | ==Rester dans le Terrain== | + | == Rester dans le Terrain== |
+ | [[Fichier:stay_in_field.png|250px|thumb|right|Stay In Field]] | ||
Nous avons créé un bloc, une fonction 'stay in the field' qui bloque le robot lorsqu'il tente de passer au dessus d'une ligne bleue et le fait reculer. Ce bloc, nous pourrons l'inclure facilement dans le programme final, pour être sur que le robot reste bien dans le terrain lors d'un match. | Nous avons créé un bloc, une fonction 'stay in the field' qui bloque le robot lorsqu'il tente de passer au dessus d'une ligne bleue et le fait reculer. Ce bloc, nous pourrons l'inclure facilement dans le programme final, pour être sur que le robot reste bien dans le terrain lors d'un match. | ||
Le problème se pose alors de rester dans la zone verte en défendant. Pour cela nous utilisons le capteur couleur pour détecter dès que l'on quitte la zone verte. Alors, grâce au système de variable qui enregistre la direction précédente du robot, on lui fait changer sa direction. Ainsi, s'il avançait lorsqu'il est sorti de la zone, on le fait reculer. Et inversement. | Le problème se pose alors de rester dans la zone verte en défendant. Pour cela nous utilisons le capteur couleur pour détecter dès que l'on quitte la zone verte. Alors, grâce au système de variable qui enregistre la direction précédente du robot, on lui fait changer sa direction. Ainsi, s'il avançait lorsqu'il est sorti de la zone, on le fait reculer. Et inversement. | ||
− | == | + | == Reconnaître son but== |
+ | Bien que l'on ai pu vraiment travailler avec les robots pour finaliser cette partie du projet, nous avions trouvés des méthodes pour repérer son but. | ||
+ | |||
+ | Le défis est de savoir repérer un but particulier parmi les deux et de ne pas les confondre avec la balle. | ||
+ | La première solution était de donner une certaine fréquence, très faible, aux robots plutôt que de les laisser en continu. Ainsi, le robot s'approche du but, calcule la fréquence,et si c'est celle que l'on veut, le robot commence à défendre. Pour calculer une fréquence, on fait compter sur 5secondes le nombre de fois que l'émetteur IR s'éteint, puis on divise ce nombre par 5 et on obtient la fréquence. | ||
+ | |||
+ | Finalement, avec l'ajout du compas, et comme il y a eu des problèmes avec les LEDs des buts, on rentre directement la direction du but (par exemple 110) et on fait suivre cette direction au robot jusqu'à ce qu'il trouve sa zone de défense. Alors commence la fonction de défense. | ||
− | = | + | == Programme final== |
− | [[Fichier: | + | [[Fichier:Match.png|500px|thumb|right|Programme final]] |
− | + | Le robot commence par se placer sur le terrain. Pour cela, il se dirige vers le but grâce à la boussole. Une fois qu'il arrive sur la bande de défense, il passe en mode défense décrit plus haut. | |
− | + | Dans son programme de défense, il y a le bloc fonction 'heading 275' qui corrige constamment la trajectoire pour que le robot reste parallèle aux bords de sa zone de défense. | |
− | + | [[Fichier:Heading.png|500px|thumb|center|Bloc Heading 275]] | |
− | |||
− | + | = Conclusion = | |
+ | Ce Bureau d'Étude était l'occasion pour nous de travailler en groupe, mais en autonomie avec un cahier des charges à respecter. On a fait face à des problèmes, liés à la précision du matériel. Notamment le problème des LEDs sur les buts, qui au delà de 20cm ne sont plus détectables. On a su surmonter les problèmes imposés par la zone de défense et au replacement grâce au capteur boussole. |
Version actuelle datée du 21 mai 2014 à 12:27
Sommaire
Introduction
Dans le cadre du bureau d'étude d'IMA, nous avons choisi de réaliser et de programmer un robot de défense. Un cahier des charges nous a été imposé et nous nous somme efforcer de répondre aux attentes. Pour cela on a commencé par la réalisation mécanique du robot, et on y a apporté des modifications tout au long du projet. Ensuite on a testé les différents capteurs en les plaçant sur le robot. Enfin nous avons commencé la programmation du robot avec des tâches simples : suivre un émetteur IR et éviter des obstacles. Enfin, nous avons concrétiser le terrain pour améliorer notre programme de défense.
Réalisation mécanique du Robot
Nous avons commencé par construire le "châssis" du robot avec les roues, puis nous avons décidé d'utiliser des chenilles plutôt que des pneus (pour que le robot avance droit).
Ensuite nous avons construit le support du nxt. Un support situé à l'arrière, incliné pour être plus facilement lisible et utilisable. De plus, il est accessible car étant à l'arrière et séparé du reste, on peut ainsi le retirer relativement aisément. (photo 1)
Puis, nous avons ajouté les capteurs ultrasons, couleurs et RFID vers l'avant du robot, entre les roues. Les capteurs couleurs & RFID sont pointés vers le sol. (photo 2 et 3)
Pour symboliser un moyen de taper la balle, nous avons ajouté le 3ème moteur avec une batte à l'avant à droite du robot. (photo 3)
Enfin, nous avons ajouté le capteur infrarouge en hauteur, sur la partie gauche du robot. (photo 3)
Pour finir, nous avons ajouté un dernier capteur: le compas (photo 4). Il est nécessaire d'éloigner le compas des autres capteurs, moteurs, et du NXT car le compas mesure la force du champ magnétique terrestre. Ne pas l'éloigner de ces capteurs peu gêner le dans ses mesures. Pour cela, nous avons rajouté deux tiges (pour plus de stabilité) écartant de 10cm le compas de toute source d'interférences.
Enfin nous avons installer le capteur infrarouge sur l'axe pivotant de la batte pour qu'une fois en position de défense le capteur soit orienté vers la balle. Ce qui nous permet de savoir où est la balle à tout moment lors de la défense. Sur la photo 5 le bras est replié, le robot est en mode replacement (il recherche son but) le capteur infrarouge est orienté vers l'avant du robot. sur la photo 6 le bras est déplié, le robot est en mode défense (il est dans la zone de défense perpendiculaire au terrain) le capteur infrarouge est orienté perpendiculairement au robot pour déterminer avec précision de quel coté arrive la balle.
Réalisation du terrain
Dans le but d'améliorer notre robot et de le mettre dans les conditions, nous avons matérialisé le terrain.
De dimension de 3m de longueur sur 1,5m de largeur, la ligne de sortie de terrain est matérialisée en avec du scotch bleu. Nous avions pensé au début à du noir, mais le sol étant déjà gris le robot ne faisait pas, ou pas assez bien, la différence entre le celui-ci et la ligne.
Ensuite, nous avons matérialisé la ligne de milieu de terrain en rose. Cette ligne pourra servir aux robots d'attaque pour se replacer.
Pour finir, nous avons aussi créé des zones de défenses en vert. Ces zones sont matérialisées pour les robots de défense. Elles délimites l'espace où les robots de défenses peuvent se placer sans gêner ou obstruer les buts. Elles sont situées à 30cm des but et à 90cm du milieu de terrain. Nous avons préféré l'idée de zone en couleur, plutôt que de la délimiter par deux bandes de scotch car cela facilite la programmation.
Tests moteurs - Capteurs
Test avancer
On a vérifié que le robot avançait en ligne droite, savait tourner et faire un demi tour sur place. C'est lors de ces test que nous avons décidé d'utiliser des chenilles plutôt que des pneus.
Tests ultrasons
Nous avons surélevé le NXT par rapport au capteur ultrason, car lorsque celui est rabattu vers l'avant, il gênait le capteur. Ensuite, on a demander à visualiser la distance avec ce capteur. Nous avons remarqué que la distance maximum programmable est de 2,55m. De plus, l'affichage qui se fait centimètres, nous a révélé que sa précision était adéquate (au centimètre).
Test couleur
Nous avons du abaisser le capteur couleur(h=~2mm), car étant trop haut, il ne détectait pas les différentes couleurs. une fois abaissé, nous avons pu demander au robot différentes actions comme faire demi tour dans le cas d'une ligne de limite de terrain. Ainsi, le robot ne dépasse pas entièrement la ligne.
Test infra rouge
On a d'abord du télécharger le module IRSeeker sur www.hitechnics.com pour l'intégrer au software lego Mindstorm Nxt. Ce qui nous a permis de tester les différents paramètres de la détection infrarouge.
la force (Strength) qui indique si la balle est proche ou loin, sur un échelle allant de 340(la balle est collé au récepteur) à 10( à une distance supérieur à 5m) en analysant la force du signal.
Direction (IRDirection) qui indique où se trouve la balle sur une échelle de 0 à 9. Si la balle se trouve derrière on obtient 0. Si la balle se trouve à la perpendiculaire gauche du récepteur on obtient 1. Si la balle se trouve directement en face, on a 5. Enfin si la balle se trouve à la perpendiculaire droit on a 9. Si la balle se trouve entre ces directions, les valeurs varient. En résumé, [1,5] la balle est à gauche, [5,9] la balle est à droite.
Degrés (DegDirection) indique la même chose que la direction, mais en degrés. On obtient une échelle de degrés de 0 à -150, avec -120 a la perpendiculaire gauche et 120 à la perpendiculaire droite. En résumé, [0,120] la balle est devant à droite, [120,-150] la balle est derrière à droite, [-150,-120] la balle est derrière à gauche, et [-120,0] la balle est devant à gauche. On remarque la précision vers l'arrière laisse à désirer.
Le module permet aussi de choisir si l'on souhaite détecter une émission infrarouge continue (DC) ou alternative, avec une fréquence (AC).
Ensuite on a téléchargé un autre module InfraRouge sur www.hitechnics.com. Ce module nous permet de séléctioner si on souhaite repérer plutôt une fréquence alternative ou continue.
Test lecteur RFID
On a d'abord du télécharger le module RFID Read sur le site generationrobot. Ensuite, comme pour le capteur couleur, nous avons du rapprocher le capteur du sol (h=~2mm), autrement, le robot ne détectais pas assez bien la carte RFID. On a su faire repérer au robot la présence, ou non, d'une carte RFID sur son passage, et d'agir en conséquence (changer de direction, s'arrêter...) Finalement, nous avons décidé de laisser de côté le RFID, car il n'aurait pas été possible de paver l'intégralité du terrain. Il aurait donc fallut en mettre à certains endroits. Mais dans ce cas, la balle aurait été gênée par les cartes.
Test Boussole
nous avons téléchargé le module Compass Sensor sur le site hitechnics. Nous avons repéré les directions principales par rapport au terrain.
Programmation du Robot
Pour programmer le robot, nous utilisons le logiciel Lego Mindstorm. Le robot doit être capable de se positionner dans sa zone de défense et de repérer la balle pour protéger le but.
Repérer un émetteur InfraRouge
Nous avons commencé par faire repérer un émetteur IR (la balle ici, mais on pourra utiliser les buts plus tard) et faire avancer le robot vers l'émetteur. Le robot commence par repérer l'émetteur, voir si il se trouve a sa gauche ou a sa droite (en utilisant la fonction DegDirection du capteur IR). Une fois l'émetteur repéré, le robot se tourne de manière à se mettre en face de l'émetteur. Ensuite il avance. Tout au long de son avancé vers l'émetteur, le robot continue de tester s'il se trouve toujours bien en face de l'émetteur. Si non, il corrige sa trajectoire avant de continuer à avancer.
Nous avons découvert une nouvelle façon de faire suivre la source infrarouge, en reliant la valeur de l'angle renvoyé par le capteur infrarouge a la direction en degré du mouvement. On obtient un suivi de la source plus fluide et efficace (ainsi qu'un programme plus léger). C'est ce qui correspond au bloc "Aller_vers_IR" dans notre programme.
Pour l'arrêt, on utilise la fonction Strength du capteur IR. On compare, tout au long de l'avancée du robot vers l'émetteur, la force du signal à une constante. Par exemple, 90. Lorsque le capteur trouve un signal supérieur à 90, le robot s'arrête. Ceci permet de définir une certaine distance entre le robot et l'émetteur, de manière a ce que lors d'un match, le robot se position à une certaine distance de son but. Ainsi il ne masque pas le but, mais se trouve dans une "zone de défense".
On remarquera que cette boucle s'arrête avec une deuxième condition, si un obstacle se trouve à moins de 30cm (ultrasons). Ce qui permet l'arrêt du robot pour commencer la procédure d'esquive d'un obstacle.
Éviter un obstacle
Ensuite, nous avons inclus dans ce programme la capacité d'éviter un obstacle sur sa trajectoire via le capteur ultrasons. De la même manière que le robot test sa distance avec l'émetteur IR, ici il test, au long de son avancée, s'il y a un obstacle à une distance symbolisée par une constante. Si le capteur trouve un obstacle a une distance inférieure à la constante, le robot s'arrête.
Le robot se tourne d'abord a gauche d'un angle de 30° mesure la distance de l'objet le plus proche, se tourne a droite de 60° mesure la distance de l'objet le plus proche, compare les deux valeurs et se tourne vers la direction ou l'objet est le moins proche. le robot avance ensuite sur 20cm puis le programme reprend (test d'obstacle, recherche de la source infrarouge etc...).
Illustration des programmes
Pour tester les programmes 'repérer un émetteur IR' et 'éviter un obstacle' nous avons filmé notre robot. http://www.youtube.com/watch?v=QOSnsy9F6aY&hd=1
Dans cette vidéo, on voit le robot progresser vers la balle (émetteur IR) sur son chemin il rencontre un robot (obstacle) qu'il évite, et enfin, une fois qu'il est proche de la balle, il se retourne. (ici la balle symbolise un but. Après avoir trouvé son but, le robot le défend)
Défendre le but
Le robot se positionne dans la zone verte, et se place ensuite de manière perpendiculaire à l'arrivée de la balle. Pour arrêter la balle, le robot corrige sa position de manière à rester à 90° de la balle. Ainsi, le robot empêche la balle de passer. Pour augmenter ses chances de stopper la balle, la batte est déployée.
Pour rester à 90° de la balle, le capteur infrarouge trouve la direction. Selon celle qui est renvoyée, le robot détermine s'il doit avancer ou reculer. Dès qu'il se retrouve perpendiculaire à la balle, il s'arrête de nouveau. En changeant de place le capteur InfraRouge, on a supprimé le principal défaut de ce programme. En effet, dès que la balle passait un peut trop derrière le capteur, celui ci ne renvoyait plus des données très cohérentes. Ainsi, au lieu de reculer, le robot avançait, et le programme perdait de son sens. Avec le changement de place du capteur IR, la balle ne passe plus derrière, et le robot s'arrête lorsqu'il voit la balle 'en face'. Lorsque le capteur renvois des valeurs entre 2 et 5, la balle va passer devant le robot, il avance. Lorsque le capteur renvois des valeurs entre 5 et 8, la balle va passer derrière le robot, il recule. Si les valeurs renvoyées sont 1, 9 ou 0 (lorsque le capteur ne détecte pas la balle),, c'est que la balle est passée outre le robot.
Nous avons décidé de ne pas inclure la procédure pour éviter les obstacles dans la partie de défense du robot. Ainsi il sera plus efficace dans sa fonction en ne cherchant pas à éviter les autres robots, mais en les empêchant de passer.
Pour pouvoir rester dans la zone de défense, nous faisons avancer le robot dans le sens inverse lorsqu'il passe sur une ligne. Ainsi, dès que le capteur couleur détecte une autre couleur que le vert, le robot repart dans l'autre sens pour rester dans sa zone.
Rester dans le Terrain
Nous avons créé un bloc, une fonction 'stay in the field' qui bloque le robot lorsqu'il tente de passer au dessus d'une ligne bleue et le fait reculer. Ce bloc, nous pourrons l'inclure facilement dans le programme final, pour être sur que le robot reste bien dans le terrain lors d'un match.
Le problème se pose alors de rester dans la zone verte en défendant. Pour cela nous utilisons le capteur couleur pour détecter dès que l'on quitte la zone verte. Alors, grâce au système de variable qui enregistre la direction précédente du robot, on lui fait changer sa direction. Ainsi, s'il avançait lorsqu'il est sorti de la zone, on le fait reculer. Et inversement.
Reconnaître son but
Bien que l'on ai pu vraiment travailler avec les robots pour finaliser cette partie du projet, nous avions trouvés des méthodes pour repérer son but.
Le défis est de savoir repérer un but particulier parmi les deux et de ne pas les confondre avec la balle. La première solution était de donner une certaine fréquence, très faible, aux robots plutôt que de les laisser en continu. Ainsi, le robot s'approche du but, calcule la fréquence,et si c'est celle que l'on veut, le robot commence à défendre. Pour calculer une fréquence, on fait compter sur 5secondes le nombre de fois que l'émetteur IR s'éteint, puis on divise ce nombre par 5 et on obtient la fréquence.
Finalement, avec l'ajout du compas, et comme il y a eu des problèmes avec les LEDs des buts, on rentre directement la direction du but (par exemple 110) et on fait suivre cette direction au robot jusqu'à ce qu'il trouve sa zone de défense. Alors commence la fonction de défense.
Programme final
Le robot commence par se placer sur le terrain. Pour cela, il se dirige vers le but grâce à la boussole. Une fois qu'il arrive sur la bande de défense, il passe en mode défense décrit plus haut. Dans son programme de défense, il y a le bloc fonction 'heading 275' qui corrige constamment la trajectoire pour que le robot reste parallèle aux bords de sa zone de défense.
Conclusion
Ce Bureau d'Étude était l'occasion pour nous de travailler en groupe, mais en autonomie avec un cahier des charges à respecter. On a fait face à des problèmes, liés à la précision du matériel. Notamment le problème des LEDs sur les buts, qui au delà de 20cm ne sont plus détectables. On a su surmonter les problèmes imposés par la zone de défense et au replacement grâce au capteur boussole.