13 septembre 2012
Lors de la Coupe de France de Robotique de 2010, nous avions fait le choix de récupérer les balles rouges qui se trouvaient sur la table. Pour repérer ces balles, nous nous servions d’une CMUcam 3.
Les balles étaient les seuls éléments rouges présents sur le terrain. La caméra repérait les pixels rouges et les rassemblait dans des formes. Elle envoyait ensuite les formes au microcontrôleur PIC pour qu’il dirige le robot vers la balle.
La CMUcam est montée sur un bras à l’avant du robot.
Un capteur sonique est fixé devant la CMUcam...
L’image est récupérée ligne par ligne. Pour chaque pixel, les trois composantes (rouge, vert et bleu) sont reçues. Les valeurs reçues sont comprises entre 0 et 255. Un pixel est considéré comme rouge si :
if( (Rouge > 100) && (Rouge > 3*(Vert+Bleu) ) )
Si le pixel est rouge, ceci est noté dans un tableau qui reproduit l’image. A la fin du traitement, ce tableau contient 1 dans toutes les cases correspondant à des pixels rouges et 0 dans les autres cases.
Ensuite le tableau est parcouru de gauche à droite puis de haut en bas. A chaque pixel rouge rencontré qui ne fait pas partie d’une forme précédemment identifiée, le traitement suivant est appliqué :
Enfin, les différentes zones trouvées sont comparées. Si certaines se chevauchent, celles-ci sont fusionnées. Dans notre cas, deux zones étaient fusionnées si le centre de l’une était dans la zone de l’autre. Les zones les plus petites sont éliminées. Soit la balle est trop loin, soit il s’agit d’autre chose.
Il est possible de ne traiter qu’un pixel sur 4 ou qu’un pixel sur 9 (en prenant qu’un pixel sur deux par ligne et qu’une ligne sur deux). Ceci permet de raccourcir la durée du traitement, mais l’image perd en résolution. Ceci raccourcit un peu le champ de vision du robot.