vendredi 16 décembre 2011

Eviter l'adversaire

Le système d'évitement est obligatoire sur chaque robot participant à Eurobot depuis plusieurs années. Mais il y a pleins de façon d'éviter la collision avec l'adversaire : s'arrêter, reculer et le contourner sont les principales façons de faire. Beaucoup s'arrêtent, peu reculent et vraiment très peu contournent l'adversaire. C'est tout de même cette dernière façon de faire (contournement) qu'il nous faudra réussir à faire si nous voulons à coup sûr activer les deux bouteilles à la mer, même si nous croisons l'adversaire !

Repérer l'adversaire :

Mais gardons la tête sur les épaules, chaque chose en son temps. Avant de le contourner, il faut déjà voir l'adversaire ! Pour cela, nous allons bien entendu utiliser le capteur ultra-son que nous avons dans le kit mindstorm de base. Ce capteur à quelques inconvenients et quelques avantages. D'un côté il nous dira à quelle distance se trouve l'objet, de plus il a un cône de détection. C'est à dire que ce capteur capte sur plusieurs degrés devant lui, il faudra donc bien le positionner pour ne pas détecter les objets au sol mais si votre robot est suffisament petit, il se peut qu'un seul capteur vous suffise !
L'inconvenient c'est qu'il fonctionne avec des ultra sons et ces ondes ricochent. Si les objets ou robots devant ont une forme particulière ou sont vides, il se peut que le robot ne le détecte pas !

Mais bon, ce qu'il faut se dire c'est que les robots pleins de vide sont souvent assez limités et que les robots que l'on risque de croiser en allant à la seconde bouteille sont des robots qui vont à leur propre seconde bouteille et qui, théoriquement, seront assez développés et donc (j'espere) assez remplis ...

Donc revenons en à notre évitement et notre sonar. Le sonar peut détecter des objets à plusieurs mètres mais nous n'aurons pas besoin de savoir qu'il y a un objet à 1,5 m donc nous n'exploiterons pas les mesures à plus de DistSonarMax. A l'inverse, il nous faut définir une distance à laquelle nous interdirons au robot d'aller plus loin : DistSonarMin. Cette longueur dépendra de ce que vous voulez entreprendre :
- Simplement s'arrêter : la distance peut être très courte
- Tourner et contourner : la distance devra être plus grande


Ensuite, entre ces deux valeurs (DistSonarMax et DistSonarMin) vous ferez ce que vous voudrez, pour ma part j'agis sur la valeur max de puissance des moteurs. C'est à dire que plus l'objet se rapprochera, plus le robot ralentira. En dessous de DistSonarMin, je programmerais plusieurs types 'évitements', chaque type correspondant à une situation ou action particulière.

Atteindre la cible :

J'ai pu voir beaucoup de robots qui s'arrêtaient après avoir détecté l'adversaire à 20cm alors que le point qu'ils cherchaient à atteindre se situait à seulement 1cm devant ! Aussi je compare la mesure lue par le sonar à la distance de la cible (DistCibl) et si le robot est plus près de sa cible que l'objet détecté alors la vitesse sera diminuée mais le robot dépassera cette 'barrière'. Bien entendu à l'inverse, si la cible est plus éloignée, le robot lancera son cycle d'évitement.

Résultat :

Pour vérifier que le programme est bon et fonctionnel, j'ai programmé la séquence suivante :
- Le robot part du point A pour aller au point B puis revient en marche arrière en A
J'y ai inclus bien entendu la détection sonar; l'action d'évitement ici est le fait que le robot recule.

1/ Mon action est de placer un objet devant le point B pour constater que le robot recule puis revient à la charge.
2/ Ensuite je recule l'objet derrière le point B pour constater que le robot va avancer jusqu'à ce point avant de revenir au point A en marche arrière.
3/ Ensuite en appuyant sur Entrée on relancer le cycle, en ayant enlever l'objet pour voir la diffèrence de vitesse.

Vous m'excuserez la façon dont recule le robot, je l'ai programmé rapidement.
Les sons entendus me permettent de vérifier que le robot capte l'objet.

Système d'Evitement d'OLEG

Aucun commentaire:

Enregistrer un commentaire