Vision 2011

Montée sur le robot, la CMUCam 3 avait pour rôle de repérer des pions jaunes de 20 cm de diamètre. Ces pions étaient les seuls éléments jaunes sur la table. La CMUCam servait aussi à repérer des cases carrées bleues ou rouges de 35 cm de côté.

La CMUCam était fixée sous le support de balise et orientée vers la table pour disposer d’un champ de vision satisfaisant, allant de l’avant du robot jusqu’à un mètre devant le robot.


CMUCam sous le support balise

 Reconnaissance des couleurs

L’image est récupérée ligne par ligne. Pour chaque pixel, les trois composantes (rouge, vert et bleu) sont reçues, avec pour chacune d’entre elle des valeurs comprises entre 0 et 255. Pour reconnaître du rouge, cette décomposition en couleurs est efficace ; elle l’est moins pour les autres. Le rouge vu par la CMUcam est très prononcé. Pour cette couleur, les rapports des composantes rouge/vert et rouge/bleu sont très élevés. La caméra perçoit moins facilement le bleu et le vert, faisant apparaître ces couleurs plus sombres et moins saturées.

Un espace de couleurs (ou espace colorimétrique) est un moyen d’associer des coordonnées à une couleur. Une même couleur aura des coordonnées différentes en fonction de l’espace de couleur utilisé. Pour l’affichage sur écran, on se sert généralement d’un système à trois composantes : rouge, vert, bleu (une surface blanche éclairée par ces trois couleurs apparaîtra blanche à un oeil humain). Dérivée de la peinture, l’utilisation de trois couleurs primaires (jaune, magenta, cyan) est répandue dans l’impression (le système est parfois complété par du noir).

L’utilisation d’un espace de couleurs de type Teinte - Saturation - Valeur permet d’utiliser des critères simples pour différencier une couleur d’une autre.

Dans ce modèle, la teinte nous donne la couleur sur le cercle rouge - jaune - vert - bleu - violet. La valeur donne une idée de la luminosité de la couleur tandis que la saturation indique où se trouve la couleur entre le gris et la couleur vive pondéré par sa luminosité.

Si la valeur est à 0 (minimum), la couleur sera noire, quelque soit sa saturation. Si la valeur est au maximum, la saturation fera varier la couleur du blanc à la couleur vive.


Axe de la saturation

Axe de la valeur

On trouve assez facilement n’importe quelle couleur (rouge, jaune, vert, bleu, violet...) en vérifiant que la teinte se situe dans un intervalle donné. Il faut aussi fixer des seuils minimaux pour la saturation et la valeur afin d’éliminer le gris, le blanc ou le noir.
On trouve assez facilement n’importe quelle couleur (rouge, jaune, vert, bleu, violet...) en vérifiant que la teinte se situe dans un intervalle donné. Il faut aussi fixer un seuil minimum pour la saturation et la valeur afin de s’assurer que ce n’est ni du gris, du blanc ou du noir.


Seuil sur la valeur

Seuil sur la saturation

Seuil sur la valeur et la saturation

 Reconnaissance des zones

L’image est parcourue ligne par ligne. Sur chaque ligne, les pixels consécutifs de même couleur sont regroupés sous forme de segments. Chaque segment contient la position du pixel de gauche et du pixel de droite. Chaque segment contient aussi un lien vers la figure à laquelle il appartient. Lorsqu’un segment est créé, il n’appartient à aucune figure.


Reconnaissance d’un segment

Lorsque l’analyse d’une ligne est terminée, les segments sont reliés aux figures. Pour cela, chaque segment est comparé aux segments de la ligne du dessus. Si deux segments sont en contact, celui de la ligne actuelle est rattaché à la figure à laquelle appartient celui de la ligne du dessus. Les dimensions de la figure sont actualisées (figure 1). Si le segment de la ligne actuelle n’est en contact avec aucun segment de la ligne précédente, une nouvelle figure est créée (figure 2). Il est alors liée à celle-ci.


Rattachement des segments aux figures

 Limites de l’algorithme

Lors d’une démonstration, le robot a eu un comportement étrange lorsqu’il jouait côté bleu. Ce comportement était dû à l’algorithme de la CMUcam, le robot fusionnait toutes les cases bleues pour n’en voir qu’une seule grande case occupant tout l’écran.

Ceci peut s’expliquer si le pixel qui est à l’intersection des cases de l’échiquier est vu comme étant de la couleur recherchée. Il n’y a, alors, plus qu’une seule zone de couleur. Pour éviter ce genre de désagrément, il est certainement préférable de travailler avec un autre algorithme lors de la détection de cases sur un échiquier (ou tout cas similaire).

Bien qu’il soit gourmand en mémoire, l’algorithme décrit dans cet article devrait faire l’affaire

 Interface

Cette année, on voulait une caméra plus efficace, plus docile, voyant loin et traitant les images rapidement.

La caméra ne devait pas renvoyer systématiquement vers le microcontrôleur toutes les figures qu’elle voyait, mais seulement celles dont le microcontrôleur avait besoin. Lorsque le microcontrôleur cherchait sa cible, il fallait qu’il puisse indiquer la couleur recherchée puis choisir une figure parmi toutes les figures que la caméra voyait. Une fois que le microcontrôleur avait choisi sa cible, il n’avait plus besoin que de la figure cible.

La caméra avait donc trois modes :

  • Attente de la couleur : la caméra ne fait rien à part attendre la couleur recherchée. Dans notre cas, ’B’ pour bleu, ’R’ pour rouge et ’P’ pour pion (jaune). Dès réception de la couleur, la caméra analyse une image et envoie la première figure au microcontrôleur.
  • Choix de la figure : la caméra a envoyé une première figure sous la forme suivante : g x0 y0 x1 y1 id. ’g’ signifie que la recherche s’est effectuée sur toute l’image et que la caméra n’est pas en train de cibler une figure particulière. ’id’ est le nombre à renvoyer à la caméra pour lui demander de suivre cette figure. Le microcontrôleur peut envoyer le caractère espace pour obtenir la figure suivante qui sera envoyée sous la même forme. Lorsque la caméra n’a plus de figures à envoyer, elle envoie une figure dont les champs x0, y0, x1, y1 et id sont à 0. À tout moment, le microcontrôleur peut envoyer l’identifiant de la figure qu’il souhaite suivre ou le caractère ’/’ pour demander à la caméra d’effectuer une nouvelle recherche
  • Suivi de la figure : lorsque la caméra reçoit un identifiant de figure, elle calcule les coordonnées du centre de la figure. Elle analyse ensuite toutes les images en renvoyant au microcontrôleur la plus grosse figure contenant le point milieu de la figure précédemment envoyée.

Suivi de la figure grace à son point central

 Les améliorations attendues

L’analyse de l’image complète en haute résolution mettait 0,8 seconde. C’est acceptable dans le mode choix de la figure, mais trop lent dans le mode suivi de la figure. Il est possible d’améliorer grandement ce temps de deux manières :

  • En baissant la résolution, un moyen très efficace lorsque l’objet se trouve près de la caméra.
  • En n’analysant qu’une partie de l’image autour de la position de l’ancienne figure.

Pour ces améliorations, la CMUCam propose des fonctions adaptées. Faute de temps, nous n’avons pas pu les utiliser. Ayant renoncé à voir des objets lointains, la caméra était utilisée en basse résolution, en ne traitant qu’un pixel sur 2. De cette manière, nous avons obtenu une image toutes les 80 millisecondes.

Le code proposait aussi de détecter la couleur autour de la figure. Ce bout de code n’a pas été vraiment testé, ni utilisé.

Commentaires

Il n'y a pas de commentaires

Ajouter un commentaire

Forum sur abonnement

Pour participer à ce forum, vous devez vous enregistrer au préalable. Merci d’indiquer ci-dessous l’identifiant personnel qui vous a été fourni. Si vous n’êtes pas enregistré, vous devez vous inscrire.

Connexions’inscriremot de passe oublié ?

Copyright "POIVRON" 2011-2012, tous droits réservés
Administration du site