> De la vision sur microcontrôleur (PIC)

La vision est une base fondamentale dans la perception de l'environnement d'un robot, tout comme c'est le cas pour un humain. Cependant, recréer le mécanisme mis en place par l'homme pour interpréter une scène n'est pas une chose aisée... Essayons !

Il faut réunir quelques éléments de base :

L'œil

L'œil est bien sûr remplacé par une caméra. Pour notre essai, nous avons opté pour un petit module OV7670 qui se trouve facilement sur Internet. Il affiche une résolution maximale de 640*480 pixels qui, comme nous le verrons lors de l'essai, est amplement suffisante pour faire une détection de couleur. Il présente aussi l'avantage de nécessiter moins de ressources provenant de notre microcontrôleur qui fait office de "cerveau".

Le cerveau

Nous arrivons sur le point clef de la vision car, pour un humain, il paraît logique de voir et il est facile d'interpréter les informations reçues par l'œil. Mais en réalité, le mécanisme mis en oeuvre est très complet. C'est pourquoi nous voyons encore très peu de vision dans le domaine de la robotique amateur.

Deux problèmes se posent lorsque nous voulons faire du traitement d'image :

Le premier vient de la quantité de données à traiter. En effet, il faut analyser tous les pixels en un temps restreint.

Exemple :

Une image full HD est faite de 1920*1080 pixels. Or, un pixel est composé de trois couleurs (R, V, B) et les couleurs sont codées sur 8 bits.

Une image représente alors un volume de 1920 * 1080 * 3 => 6,22 Mo

Ce n'est pas grand chose me direz vous, mais il faut traiter 30 images par seconde si on ne veut pas qu'il y ait un effet de latence comme sur les vidéos de mauvaise qualité.

On a donc 6,22 * 30 => 186,6 Mo/s

On comprend alors d'où vient le problème car ces débits sont difficilement supportés par un disque dur actuel.
C'est pour cette raison que l'on se contentera de notre petite caméra en 640*480 pixels qui est amplement suffisante pour nos besoins.

Le deuxième problème n'est pas des moindres, car après avoir réussi à acquérir le flux d'images, il faut encore savoir quoi en faire. On tombe alors vite dans des algorithmes mathématiques qui nécessitent beaucoup de temps de calcul, ce qui est problématique car il faut pouvoir effectuer les traitements aussi vite que l'on reçoit les images. C'est pourquoi il est rarement utilisé une fréquence de 30 im/s, comme dans notre cas où l'on désire juste connaître la couleur d'un objet.

 

Maintenant que nous avons compris comment fonctionne la vision, nous voulons voir si il est possible de faire ce traitement sur un simple microcontrôleur. Avec l'évolution de l'électronique, ce dernier s'est vu doté d'une grosse capacité de calcul et d'une mémoire étendue.

Le test

Le but n'étant pas de faire quelque chose de complexe mais une solution minimaliste,  nous avons disposé un microcontrôleur PIC dsPIC33FJ64GP802, à l'aide d'une simple plaque à trous :

Architecture 16 bits
CPU 40 Mips
RAM 16 ko

Autant vous dire que, comparée à un ordinateur domestique ou encore des PC embarqués, la configuration est ridicule ! Mais nous allons voir que l'on peut tout de même en faire quelque chose.

La visualisation se fait sur PC avec une liaison par port série USB.

Test vision pic

Mise en œuvre

Le câblage de ce genre de module est très simple, ce n'est que du fil à fil. Il ne nécessite qu'une petite horloge externe que nous avons synthétisée avec une sortie PWM du PIC.

La valeur des pixels est véhiculée par la ligne data à chaque impulsion sur la ligne PCLK (pixel clock) avec successivement l'intensité du rouge, du vert et du bleu. VSYNC signale la fin d'une ligne de l'image et HREF le début d'une nouvelle image.

Résultats

Nous sommes très fiers de notre ciseau blush L'image n'est certes pas très élégante, mais nous voulions seulement tester la faisabilité d'une reconnaissance de couleur à l'aide d'une camera bon marché et d'une électronique minimaliste.

Avec un petit seuillage par couleur, ici rouge sur blanc, on arrive à déterminer la position des ciseaux dans l'image ! Le tout pour une solution maison à moins de 10€, avec un PIC d'entrée de gamme.

On peut facilement améliorer cette solution en mettant en place la liaison parallèle de notre microcontrôleur, afin d'avoir un débit supérieur. Sans parler de ce que l'on pourrait réaliser avec les futurs PIC32MZ, 330Mips, 512 ko de RAM...

Nous referons un petit test dès réception des nouveaux PIC et en attendant, n'hésitez pas à vous éclater avec le traitement d'image car les possibilités sont sans fin et n'ont de limite que votre imagination !