Participation au concours Eurobot 2014

Présentez-nous vos créations...
Avatar de l’utilisateur
GuilliuG
Level 12
Level 12
 
Messages: 3127
Localisation: Belgique
Âge: 30 ans
experttrialtruckmoceurtechnicexpert

Messagepar GuilliuG » Mer Jan 29, 2014 5:09 pm

Salut à tous, comme vous l'aurez peut-être remarqué, je ne suis plus très actif sur le forum en ce moment pour cause de nombreuses activités qui me prennent beaucoup de temps. L'une de celle-ci est ma participation au concours Eurobot, avec un (ou plutôt deux) robots en lego !

Je ne vous présente pas encore aujourd'hui mon travail parce que les robots vont subir de grosses modifications une fois que je pourrai les tester sur le plateau de jeu. Non, si j'ouvre ce topic aujourd'hui c'est pour faire appel aux as de la programmation Mindstorm pour m'aider à résoudre un problème auquel je suis confronté. A noter que je ne poste pas cette question dans le forum de la théorie à la pratique parce que ce topic servira à présenter au complet le projet mais il faudra probablement attendre longtemps avant que je le fasse !

Voici mon problème (je l'explique juste pour un robot ):

Lorsque le programme est en marche, le robot ne doit effectivement se mettre en mouvement qu'à partir du moment où le départ du match est donné,et ceci sans toucher au robot. Dans mon cas, j'utilise donc un capteur tactile enfoncé avant le lancement du match. Dès que le départ est donné, via une cordelette, j'enlève l'axe qui maintenait en position le capteur tactile et celui-ci se retrouve donc en position haute, en même temps que le programme, avant arrêté sur un bloc 'attendre que le capteur tactile soit en position haute' ne poursuive.

Ce bouton permettra ensuite, par une simple pression, d'arrêter le robot en cas d'arrêt d'urgence, et de le relancer une fois le problème passé.
Le robot doit également intégrer un système de détection du robot adverse. Dans mon cas, j'utilise un capteur infrarouge, qui, s'il détecte un obstacle très proche (distance inférieure à 1-valeur brut du capteur-par exemple, arrêtera le robot. Celui-ci se remettra en marche dès que le capteur détectera un obstacle situé à une distance supérieure à 1.

Ceci signifie donc que, si je veux déplacer mon robot d'un point A, à un point B, je ne peux pas bêtement mettre un bloc 'avancé' où les deux moteurs tournent à une puissance X pendant Y degrés, puisque dans ce cas, une fois l'instruction donnée, il est assez compliqué de l'arrêter puis de la reprendre en chemin.

J'ai donc décidé d'utiliser une boucle, disant que si les moteurs doivent tourner de 200° pour bouger le robot à la bonne position, les moteurs vont en fait tourner à chaque tour de boucle d'un degré et la boucle se répéter 200fois. Ainsi, à chaque début de boucle, je vérifie si le capteur tactile a été enfoncé ou si un obstacle se situe trop proche( avec 2 sélecteurs). En théorie, tout fonctionne très bien mais en pratique, c'est pas vraiment ça...

Je ne sais pas pour quelle raison, il y a une perte de puissance des moteurs lorsqu'on donne cette instruction. En fait, avec un bête bloc 'avancé', à puissance max les moteurs vont tourner à 220t/min tandis qu'avec la boucle, même à puissance max, ils ne tourneront qu'à 200t/min (valeur prise à titre d'exemple pur). Et si jamais j'effectue non plus 200tours à 1° mais 40tours à 5° c'est encore plus catastrophique ! Je me suis dit alors, faisons 2000tours à 0,1° mais le capteur de rotation intégré dans le moteur n'est précis qu'au degré et en faisant ça, impossible de détecter les conditions citées ci-dessus! La boucle ne tourne plus ( en réalité, je crois qu'elle tourne tellement rapidement que sur le programme au pc, on ne la voit plus tourner).

A noter pour que l'idée ci-dessus fonctionne, il ne faut pas freiner les moteurs à la fin de chaque tour de boucle.

Bref, si vous savez d'où vient le problème et comment le régler,je suis preneur ! Ou si vous avez une autre idée que la boucle pour tester ces conditions, je suis tout autant preneur !

Merci d'avance.
Dernière édition par GuilliuG le Mer Jan 29, 2014 5:26 pm, édité 1 fois au total.
Mon site web

"Les meilleures idées sont celles qu'on n'a pas encore eues "

Avatar de l’utilisateur
leo593
Level 7
Level 7
 
Messages: 510
Localisation: Dunkerque
Âge: 26 ans

Messagepar leo593 » Mer Jan 29, 2014 5:22 pm

Il y a un mois, j'avais fait un programme pour un robot à chenilles (avec le EV3). Il avançait jusqu'à un obstacle, si il en rencontrait un, il tournait d'un quart de tour, et il redémarrait. Je n'ai jamais rencontré de perte de puissance au moment où la boucle redémarrait. J'avais mis # rotation sur les deux moteurs, avec à la fin de la boucle, je-ne-sais-plus-quelle valeur pour le capteur de proximité.

Je ne sais pas d'où vient ton problème, visiblement du capteur tactile. Je vais essayer de faire un programme analogue au tien, le tester, et je te tiens au courant de mes résultats.
Ma collection ---- Ma chaine YouTube ---- Mon Brickset

Le bon goût n'est pas le fruit du hasard, mais le hasard n'est pas toujours le fruit du bon goût...

Teuk
Level 5
Level 5
 
Messages: 131

Messagepar Teuk » Mer Jan 29, 2014 7:50 pm

Je pense voir d'ou vient ton probleme: dans la boucle, le moteur avance d'1° puis s'arrête le temps de vérifier l'état du capteur infrarouge. Donc le moteur n'est pas alimenté en permanence, et donc il y a une petite perte de puissance.

Je pense qu'un programme de ce type aura de meilleurs résultats:
Code: Tout sélectionner
Début     --->  Attente capteur ----->  Marche  ----->  Si rotation>=200° --->  Arret moteur
Programme       contact           ^     moteur  ---                             (ou suite des opérations)
                                  |                -->  Si obstacle
                                  |                          |
                                  |                          V
                                  |---  si pas   <---   Arret moteur
                                        obstacle

Avatar de l’utilisateur
GuilliuG
Level 12
Level 12
 
Messages: 3127
Localisation: Belgique
Âge: 30 ans
experttrialtruckmoceurtechnicexpert

Messagepar GuilliuG » Mer Jan 29, 2014 9:20 pm

Oui, en fait la boucle n'est pas parcourue assez rapidement, et il y a forcément une latence (temps entre la première instruction 'tourner de 1°' et la suivante,etc) qui fait que le moteur ne peut pas tourner à sa vitesse maximale. Je pense que si je garde ce système de boucles, je n'arriverai jamais à faire mieux que ce que j'ai pour le moment ( les conditions vérifiées à chaque tour de boucle sont le strict minimum pour réduire le temps entre les deux instructions pour les moteurs).

Donc soit
1) je me simplifie la vie, je garde le programme tel qu'il est là et je tolère que le robot ne se déplace pas à la vitesse max qu'il pourrait atteindre avec les moteurs utilisés
2) je me creuse les méninges pour trouver une autre solution qui sera surement plus complexe. Ton exemple ne fonctionne pas Teuk parce que, si le moteur a déjà effectué 10 tours ( par exemple) et qu'il doit en effectuer 100 en tout, si j'arrête le moteur, lorsqu'il reprendra, je ne dois pas lui donner l'instruction d'en effectuer 100 mais bien 90. Mais il doit y avoir moyen de faire quelque chose à ce niveau via le capteur 'rotation du moteur'. Je vous tiens au jus dès que je trouve, et si je trouve pas, bah je garderai l'autre solution :lol:
Mon site web

"Les meilleures idées sont celles qu'on n'a pas encore eues "

Avatar de l’utilisateur
Plastik
Level 6
Level 6
 
Messages: 330
Âge: 41 ans

Messagepar Plastik » Mer Jan 29, 2014 9:45 pm

Salut guilliug! j'ai peu etre une idée :

- départ classique avec bouton poussoir
- démarrage moteur plein pot pour une durée infinie
- début boucle :
+ lecture de l'angle parcourue
+ lecture du capteur IR
- fin de boucle avec condition : boucler tant que l'angle est inférieur à l'angle visé ou que le capteur IR n'a pas trouvé un obstacle.
- arret moteur

Qu'en penses-tu?

Avatar de l’utilisateur
Alban42800
Level 11
Level 11
 
Messages: 2473
Localisation: Loire (42)
Âge: 51 ans
expertgbbexpertnxtvainqueurconcours

Messagepar Alban42800 » Jeu Jan 30, 2014 12:07 am

+1 avec plastik.
Par contre tu devrais utiliser le capteur ultra sons (US), il est fait pour ça.
L'IR sera perturbé par l'éclairage lors des matchs.
Ta solution 200 x 1° n'est pas bonne car elle perturbe la régulation de vitesse interne du NXT.

Avatar de l’utilisateur
GuilliuG
Level 12
Level 12
 
Messages: 3127
Localisation: Belgique
Âge: 30 ans
experttrialtruckmoceurtechnicexpert

Messagepar GuilliuG » Jeu Jan 30, 2014 3:42 pm

Merci pour vos idées, je visualise bien comment je vais faire maintenant !

Alban, tu es certain que le capteur infra-rouge sera d'office perturbé ? Parce que je t'avoue que j'ai pas trop envie de payer 70 euros de plus pour obtenir deux capteurs ultra-son ! En plus,j'avais lu dans les règles que le capteur ultra-son pouvait être perturbé par le système radio de communication des organisateurs lors des matchs !
Mon site web

"Les meilleures idées sont celles qu'on n'a pas encore eues "

Avatar de l’utilisateur
Alban42800
Level 11
Level 11
 
Messages: 2473
Localisation: Loire (42)
Âge: 51 ans
expertgbbexpertnxtvainqueurconcours

Messagepar Alban42800 » Jeu Jan 30, 2014 11:44 pm

Pas eu de pb avec les US... tu n'en as pas, pourtant c'est la base des kits ?
C'est quel capteur IR que tu as, s'il est modulé ça peut marcher.

Sinon un poussoir avec une "barre palpeuse" devant le robot c'est accepté aussi.

Avatar de l’utilisateur
GuilliuG
Level 12
Level 12
 
Messages: 3127
Localisation: Belgique
Âge: 30 ans
experttrialtruckmoceurtechnicexpert

Messagepar GuilliuG » Ven Jan 31, 2014 6:41 pm

Bah j'ai juste deux fois le set de base :

http://shop.lego.com/en-BE/LEGO-MINDSTORMS-EV3-31313

Qui ne contient pas de capteur ultra-son :pamafote:

Qu'entends-tu par 'modulé' ? Qu'on peut changer la fréquence des ondes envoyées ? Si c'est ce que tu voulais dire,ce n'est pas possible à ma connaissance.

Mais je n'ai pas besoin d'une précision au cm près, donc j'espère que le capteur infra-rouge fera tout de même l'affaire !
Mon site web

"Les meilleures idées sont celles qu'on n'a pas encore eues "


Retourner vers Vos MOCs Technic

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 33 invités