CMUCAM, l'analyse d'image pour votre robot - NXTCAM, NXT-G

Lorsque l’on se lance dans la robotique personnelle programmable, une caméra n’est pas le premier type de capteur que l’on teste, ne serait-ce que par son coût et surtout sa complexité. Cependant, il n’est pas rare se diriger ensuite rapidement vers l’information visuelle, ce sens jouant un rôle important dans notre perception du monde pour les humains que nous sommes.

La fameuse Carnegie Mellon University l’a bien compris et propose depuis quelques années un modèle générique de caméra embarquée pour les petits robots nommée CMUCAM. Ce modèle est ensuite implémenté par différents constructeurs électroniques sur la base des spécifications éditées par l’université. Nous proposons sur ce site deux implémentations de CMUCAM :

La CMUCAM n’est pas exactement une caméra embarquée comme celle que nous connaissons pour nos PC ou nos téléphones portables. C’est à la fois un peut plus et un peu moins.

 

La CMUCAM, un système de vision avant tout

La CMUCAM est un système composé d’une caméra et d’un microprocesseur qui sont intégrés. C’est un appareil de vision artificielle d’entrée de gamme. Elle dispose d’un port série pour l’interfacer avec le PC ou le robot. La CMUCAM propose, embarqué dans son microprocesseur, des fonctionnalités basiques d’analyse d’images.

Ce système a spécifiquement été réalisé pour la robotique personnelle (dans le cadre du loisir ou de l’enseignement) avec comme objectif la simplicité ainsi que la maîtrise des coûts. Les capacités de la CMUCAM sont volontairement faibles car elle est destinée à être embarquée sur un petit robot où l’énergie et la capacité de traitement ainsi que la mémoire sont limités.

A ce jour, 3 générations de caméra sont proposés. Une page spécifique de l’institue de robotique de l’université de Carnegie Mellon présente les 3 générations de spécification : http://www.cs.cmu.edu/~cmucam

 

Comment se sert-on d’une CMUCAM et à quoi sert-elle ?

La CMUCAM sert avant tout à repérer des couleurs que l’utilisateur aura préalablement paramétrées dans la CMUCAM. Les couleurs sont repérées automatiquement par le processeur embarqué qui fourni ensuite au robot des informations brutes que sont le nombre de zones (on parle de Blob) ainsi que les coordonnées de ces zones et la couleur repérée.

A l’aide de ces informations, vous pouvez programmer votre robot pour réagir à ces zones de couleurs : suivre un objet, une ligne…

 

La NXTCAM

Présentation de la NXTCAM

NXTCAM Dans la suite de cet article, nous allons nous appuyer sur un exemple spécifique afin de concrétiser notre présentation. Nous avons choisi de présenter la NXTCAM de la société Mindsensors proposée par ailleurs sur ce site. Ce qui suit est donc spécifique à cette caméra mais la plupart des concepts sont identiques pour les autres implémentations de la CMUCAM.

Toute utilisation de la CMUCAM s’effectue en deux temps :

  • Le paramétrage de la carte des couleurs (colormap)
  • L’utilisation sur robot (ou tracking)

Caractéristiques de la NXTCAM

Les caractéristiques techniques de la NXTCAM sont les suivantes :

  • Le champ de vision est d’environ 43°
  • La capacité de la NXTCAM est d’environ 30 Frames par secondes
  • Connexion USB et RJ12 pour respectivement le PC et le robot
  • Consommation d’énergie : 42 mA (maximum) et 4,7V

La caméra retourne en temps réel les informations suivantes : Nombre d’objets (8 au max), couleur des objets, coordonnées des objets sous forme de boite ou de ligne. Tout ça en temps réel comme tout capteur NXT.

Installation de la NXTCAM

Pour installer la NXTCAM sur votre PC, vous devez tout d’abord installer les drivers USB pour la NXTCAM. Les drivers PC et MAC sont disponibles à l’adresse suivante : http://www.mindsensors.com/index.php?module=documents&JAS_DocumentManager_op=viewDocument&JAS_Document_id=44

Pour l’installation sur un PC équipé de Windows XP, téléchargez le fichier zip correspondant (cf. lien ci-dessus) et dézippez le fichier. Connectez ensuite la NXTCAM à votre PC à l’aide d’un câble USB. Votre PC détecte le nouvel équipement. Dans la fenêtre qui s’ouvre, indiquez l’emplacement du répertorie que vous venez de compresser. Cette opération sera à renouveler une seconde fois à l’identique (car deux drivers sont installés). Pour l’installation sur un PC équipé de Windows Vista ou sur un Mac, consultez le site de Mindsensors (http://www.mindsensors.com).

Les spécifications de la CMUCAM décrivent une connexion à l’aide du port série. Mindsensors, dans l’implémentation proposée, a eu l’idée d’une connexion USB. C’est pour cela que vous installez un second driver car celui-ci est le connecteur série-USB.

 

Connexion de la CMUCAM au PC

Avant d’utiliser la CMUCAM sur votre robot, la première étape consiste à paramétrer sur la CMUCAM les couleurs que vous souhaitez suivre. Pour ce faire, vous devez télécharger l’outil Open source NXTCamView disponible à l’adresse suivante : http://nxtcamview.sourceforge.net

Option de connexion de NXTCAMView

Il s’agit de la fenêtre Options de NXTCamView. Cette fenêtre vous permet de définir les configurations de connexion à la NXTCam. A ce stade, nous nous concentrerons sur la connexion à la NXTCam. Dans la liste déroulante, choisissez le port COM associé à la NXTCam. Appuyez sur le bouton « Test ». Si la connexion est valide, alors la phrase « Success : NXTCam responded » apparaît en vert sous le bouton test. Dans le cas contraire, assurez-vous que le câble USB est bien connecté à la NXTCam et à votre PC. Cliquez sur « OK ».

La fenêtre de travail de NXTCamView apparaît. Appuyez sur le bouton « Connect », la pastille rouge en bas à gauche devient alors verte. :

Interface de NXTCAMView

Voilà, vous êtes prêt à démarrer l’utilisation proprement dite de la NXTCam. L’étape à suivre ensuite est de paramétrer la NXTCAM pour lui indiquer quelles sont les couleurs que l’on souhaite suivre (on dit « tracker »).

 

Le paramétrage de la carte des couleurs de la NXTCAM

La première étape consiste à effectuer des captures d’images et de déterminer à l’aide de ces images, les couleurs que vous souhaitez tracker par la suite. Pour faire cela, vous devez déterminer les valeurs minimale et maximale de l’intensité de chacune des trois couleurs rouge, vert, bleu. Les valeurs que vous déterminez définissent ce que l’on appelle la carte des couleurs (ou colormap en anglais).

La difficulté est que la couleur d’un objet n’est généralement pas uniforme, ne serait-ce que par l’emplacement de la caméra ainsi que la configuration lumineuse de l’endroit. La qualité de l’image capturée par la NXTCam n’est pas très bonne et l’image est un peu floue. Cela est dû au fait que la résolution de la caméra n’est pas très puissante. On peut essayer d’ajuster le focus manuellement (en tournant le focus de la caméra) ou bien en ajustant les paramètres dans NXTCamView (paramètres AutoWhiteBalance ou AutoAdjust)

Revenons à notre propos. Nous devons paramétrer les couleurs à suivre. Les étapes sont les suivantes :

  1. Réalisez une capture, c'est-à-dire la prise d’une photo à l’aide du bouton « Capture » dans NXTCamView.

    Capture de frame à l'aide de NXTCamView
  2. Cliquez sur un objet de l’image capturée qui est de la couleur recherchée. Cela positionne automatiquement les curseurs des trois couleurs dans la fenêtre « Couleurs » et surligne les objets détectés par ces couleurs en jaune clignotant.

    Désignation de couleur à l'aide de NXTCamView
  3. Ajustez les couleurs rouge, vert et bleu dans la fenêtre couleur en déplaçant les curseurs correspondant afin de déterminer les bornes inférieures et supérieures de chacune des trois couleurs. Vous constatez que lorsque vous changez les paramétrages des couleurs, une zone plus au moins grande est surlignée dans la fenêtre de capture. Le logiciel vous indique en effet à quelles zones sur la photo vos choix de couleurs correspondent. Une fois que l’objet que vous souhaitez tracker est totalement surligné, cela signifie que vous avez correctement paramétré vos couleurs.
  4. Vous pouvez déterminer ainsi jusqu’à 8 couleurs en cliquant sur les cases de 1 à 8 dans la fenêtre des couleurs et en effectuant un paramétrage comme à l’étape précédente pour chacune d’elle.
  5. Téléchargez le paramétrage sur le processeur embarqué de la NXTCAM en cliquant sur le bouton « Upload » dans la fenêtre des couleurs.

    Couleurs téléchargées sur la NXTCAM
  6. La dernière étape est facultative, elle consiste à tester votre paramétrage en effectuant un tracking de test à l’aide de NXTCamView. Nous décrivons cette étape en détail dans le paragraphe suivant.

Des vidéos de démonstration sont disponibles au format Flash à l’adresse suivante : http://nxtcamview.sourceforge.net/DemoScreenCam.htm

 

Le tracking à l'aide de la NXTCAM

Le « tracking » est la capacité à extraire d’une image l’emplacement d’une couleur en particulier dans cette image. Cela revient à entourer d’un cadre toutes les touches d’une couleur que l’on peut trouver dans une image. C’est ce que fait automatiquement la CMUCAM en retournant la position (le cadre) de chacune des zones identifiées (maximum 8 zones par image).

Il existe plusieurs algorithmes de traitement de l’image pour réaliser le tracking. La CMUCAM 2 propose un algorithme simple qui ne nécessite qu’un traitement unique de chaque frame capturée. L’algorithme est le suivant : La CMUCAM démarre en haut à gauche de la frame capturée et examine chaque pixel un à un, ligne par ligne. Si la valeur du pixel entre dans la zone de couleur déterminé précédemment, alors il est marqué comme tracké. Le pixel est également examiné pour savoir s’il est le pixel le plus haut, le plus bas, le plus à gauche ou le plus à droite de la zone trackée en cours. Si c’est le cas, alors, la zone de tracking est élargie. L’algorithme conserve également en mémoire, la somme des coordonnées horizontales ainsi que la somme des coordonnées verticales des pixels constituant la zone trackée. Ces deux sommes peuvent ensuite être utilisées pour déterminer quel est le centre de gravité de la zone trackée en divisant ces deux nombres par le nombre de pixels trackés. Ce centre de gravité est nommé le centroïd.

Reprenons à l’étape 6 du paragraphe précédent. Une fenêtre tracking est disponible dans NXTCamView (si elle n’est pas visible, cliquez sur le bouton tracking). Cette fenêtre vous permet d’effectuer un tracking de test alors que votre NXTCam est toujours connectée à votre PC. Si vous avez bien téléchargé les couleurs sur la NXTCam à l’étape précédente, vous devez les voir apparaître dans le tableau en bas à droite de la fenêtre tracking. Cliquez alors sur le bouton « Start » ce qui démarre la capture d’images par la NXTCam. Vous voyez alors apparaître en temps réel une représentation graphique des mesures effectuées par la NXTCam dans le tableau blanc constituant la majeure partie de la fenêtre tracking.

NXTCamView présente en effet les objets sous forme de boites de la couleur correspondante accompagnée de leurs coordonnées.

Interface de tracking de NXTCAMView

Les coordonnées affichées pour chacune des boites est :

  • C = numéro de la couleur si vous avez uploadé plus d’une couleur
  • X = abscisse du point en haut à gauche de la boîte représentée (l’origine du plan se situe en haut à gauche de la fenêtre)
  • Y = ordonnée du même point
  • W = largeur de la boite
  • H = Hauteur de la boite
  • A = Aire occupée par la boîte (le blob)

Voilà, vous avez à présent une idée de comment fonctionne la CMUCAM. Elle fournit des coordonnées de zones de couleurs paramétrées dans son champ de vision. Vous pouvez à présent embarquer la NXTCam sur votre robot et vous en servir comme n’importe quel autre capteur.

 

L’installation de la NXTCAM sur le robot

Poursuivons notre découverte de la CMUCAM et installons notre NXTCam sur notre robot Lego Mindstorms NXT. Fixez tout d’abord la caméra sur le robot et reliez la caméra à la brique intelligente Lego Mindstorms NXT à l’aide d’un câble de connexion RJ12 (ce sont les câbles fournis avec le kit et qui ressemblent à des câbles de ligne téléphonique).

La connexion ainsi réalisée assure à la fois l’alimentation de la NXTCAM et également l’acheminement des informations au microprocesseur de la brique Intelligente Lego Mindstorms NXT (lorsqu’elle est alimentée, une diode jaune est allumée au dos de la NXTCAM).

La programmation de la NXTCAM à l’aide de NXT-G : Importer la brique de programmation

La première étape à réaliser consiste à vous munir de la brique de programmation qui vous permettra de manipuler la caméra.

Bloc de la NXTCAM dans NXT-G

Le code source de la brique se trouve sur le site de Mindsensors à l’adresse suivante : http://www.mindsensors.com/index.php?module=documents&JAS_DocumentManager_op=viewDocument&JAS_Document_id=46

La procédure d’installation est très simple et de s’effectue qu’une seule fois :

  1. Téléchargez le fichier zip (fichier compressé) et placez le sur votre PC (peut-importe l’endroit)
  2. Décompressez le fichier zip
  3. Dans l’environnement NXT-G, dans le menu outils, cliquez sur « Assistant d’importation et d’exportation de blocs… »
  4. Dans la fenêtre qui apparait, cliquez sur le bouton parcourir et sélectionnez le dossier que vous avez créé à l’étape 2
  5. Sélectionnez le bloc à importer dans le tableau
  6. Choisissez dans quelle palette vous souhaitez ajouter votre bloc à l’aide de la liste déroulante
  7. Cliquez sur importer
Assistant d'importation de bloc dans NXT-G

 

Exemple de programmation de la NXTCAM

Maintenant que toutes les conditions sont réunies pour programmer, nous allons réaliser un programme très simple.

D’autres programmes plus complexes et qui constituent de bon exemples sont disponibles aux adresses suivantes : http://nxtcamview.wiki.sourceforge.net/Projects

Le programme suivant est très simple :

Exemple de programme NXT-G simple utilisant la NXTCAM

Ce programme permet d’afficher le nombre d’objets trackés à l’écran de la brique intelligente Lego Mindstorms NXT.

Le bloc NXTCAM est appelé deux fois :

  • La première fois avec la fonction « Enable Tracking », ce qui a pour effet d’assurer l’alimentation de la NXTCAM par la brique intelligente.
  • La seconde avec la fonction « Get First Object » qui retourne le premier objet détecté par la NXTCAM qui correspond à l’une des couleurs paramétrées dans la carte des couleurs.

Il existe d’autres fonctions de la NXTCAM qui permettent de classer les objets par taille ou par couleur ou qui permettent de récupérer le nième objet de la liste (rappelez vous que la NXTCAM n’est tracke dans tous les cas que 8 à la fois). N’hésitez pas à consulter l’aide en ligne qui décrit le bloc.

Paramètres du bloc NXT-G de la NXTCAM

Petit remarque : il arrive parfois que la brique NXTCAM affiche « No device ». Ne vous en préoccupez pas et téléchargez le programme NXT-G sur votre robot, généralement cela fonctionne. Rappelez-vous de bien paramétrer le numéro de port sur lequel se trouve la NXTCAM (comme tous les autres capteurs). Vous n’avez généralement pas à toucher au paramètre address.

 

Bonnes pratiques

Voici quelques bonnes pratiques qui vous permettront de tirer un meilleur parti de votre CMUCAM :

  • Eviter de faire en sorte que des couleurs sélectionnées se recoupent dans leur spectre car sinon, cela va rendre le travail plus difficile à la caméra.
  • Dans le mode de tracking en ligne, il est recommandé de limiter le nombre de couleurs à 1.
  • La CMUCAM est destinée à fonctionner dans un environnement éclairé par de la lumière blanche fluorescente (les ampoules). Si l’image est un peu rouge, alors c’est qu’il y a une source d’infrarouge trop forte et qu’il faut la réduire ou l’éloigner. Des filtres oculaires permettant de filtrer (accepter ou refuser) les infrarouges sont en ventes sur le site de Mindsensors. De tels filtres sont nécessaires si vous souhaitez faire fonctionner la CMUCAM à l’extérieur en raison de l’émission infrarouge de la lumière du soleil.
  • La performance de la CMUCAM sera meilleure si le contraste des couleurs est fort. Par exemple une balle rouge sur fond blanc. De même, vous aurez de meilleures performances si vous êtes dans un environnement où la lumière est uniforme. Vous constaterez que les performances de la NXTCam peuvent être limitées par ces deux paramètres dans un environnement naturel mais que la NXTCam reste un capteur intéressant pour s’initier à l’utilisation de capteurs visuels en robotique

 


 

Génération Robots (http://www.generationRobots.com)

Tout usage et reproduction soumis à autorisation explicite préalable.