Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Capteurs > Autres caméras > Caméras et Arduino

Caméras et Arduino

dimanche 20 mars 2011, par Julien H.

On nous demande souvent si une Arduino peut "envoyer des informations" d’une caméra ou traiter les informations de deux caméras pour faire un algorithme de reconnaissance 3D ou bien d’autres traitements complexes de ce genre.

Préambule

Il faut rappeler qu’une Arduino est un micro-contrôleur (famille AVR) et qu’il existe des modèles de caméras pilotées par AVR. Donc rien d’infaisable. Mais il faut aussi dire qu’il y a différents types de caméra, donc la question nécessite un peu de précision avant de pouvoir y répondre.

Il faut savoir ce qu’on entends par "envoyer des informations" et de quel modèle de caméra on parle.

Caractéristiques d’une caméra

On va distinguer trois caractéristiques :

 le type de connexion
 le flux vidéo
 les fonctionnalités avancées

Connexion entre Arduino et caméra

Si vous avez une webcam USB, passez votre chemin : l’Arduino ne permet pas de piloter un périphérique USB car s’il est vrai qu’il y a une prise USB sur l’Arduino, la puce ne fait pas "hôte" (ou USB host en anglais). Il existe des puces permettant de piloter des périphériques USB qu’on peut trouver comme extension, mais les fonctions supportées sont plutôt des accès lecture/écriture vers une unité de stockage (clé USB) ou des données d’interface de contrôle comme une souris, un joystick, etc.. (en anglais HID pour Human Interface Device).

Si vous avez une caméra avec un signal analogique ou un flux vidéo composite pour chaque couleur, la tâche sera également difficile.

Les seules caméras vraiment pratiques pour interfacer avec un micro-contrôleur sont celles qui mettent à disposition chaque image dans un format numérique via une interface sérielle ou parallèle. On trouve plus facilement des caméras (celles qui équipent les téléphones portables par exemple) qui ont à la fois un port de communication série pour les signaux de contrôle (allumer, éteindre, calibrage, ordre d’envoi) et une communication parallèle pour transmettre les pixels qui forment l’image.

Le flux vidéo

Qui dit caméra dit vidéo et qui dit vidéo dit flux important. Qui dit flux important dit grande rapidité et qui dit grande rapidité dit Lucky Luke, pas Arduino. Relire Le Daily Star pour comprendre l’allusion.

En clair, une Arduino n’est pas faite pour lire un flux vidéo (certains disent qu’elle n’est même pas faite pour de la robotique...). Mais bien sûr tout dépend du flux : la résolution de chaque image et la fréquence de lecture de chaque image.

Si votre objectif est de transmettre par la liaison série de l’Arduino le flux d’image d’une caméra connectée à l’Arduino qui en plus contrôle votre robot, revoyez votre conception et choisissez une autre solution.

Voici un exemple concret d’un calcul du transfert d’une image :

Une image 320 x 240 en RGB fait environ 230koctets
Si tu la transfères à 115200 bauds sur la liaison série de l’arduino il te faut un peu plus de 15s pour l’envoyer.

Si votre objectif est de lire cette image de 320 x 240 mais uniquement pour faire un calcul sur la totalité des pixels à la vitesse d’une image toutes les deux secondes, et que l’Arduino ne fait que ça, alors pourquoi pas. Encore plus pour une caméra linéaire avec seulement 128 pixels. Il y a caméra et caméra donc pas de réponse unique.

Les fonctionnalités avancées

Certains modèles de caméra dédiées à la robotique contiennent un contrôleur qui fait un traitement préalable des images (pré-programmé ou bien que vous pouvez développer) afin de laisser un micro-contrôleur indépendant (votre Arduino ou n’importe quel autre) accéder aux résultats de calculs complexes : détection de forme, détection de couleur, valeur moyenne pour chaque couleur primaire, etc..

Ce sont ces modèles vers lesquels vous devez vous diriger : CMUCam, Pob-Eye. Si le prix vous déroute, essayez de reproduire cette architecture : une caméra numérique / une puce dédiée / votre Arduino. La puce dédiée peut être une autre Arduino si le traitement n’est pas trop gourmand en ressource et si la caméra est interfaçable avec.

Citations et sources

Voici quelques discussions sur le sujet :

 Caméra CMOS sur le forum Arduino
 La caméra C328R

Vos commentaires

  • Le 4 juin 2013 à 19:26, par Julien H. En réponse à : Caméras et Arduino

    Oui effectivement si l’image est ensuite envoyée à un serveur qui sait traiter les images jpeg, alors cette caméra permettra de gagner du temps. Peut-être une image par seconde ? Il faut refaire les calculs et s’assurer qu’ensuite l’image puisse être envoyée jusqu’au serveur : il y a peut-être aussi un goulet d’étranglement à l’écriture/lecture sur la puce mémoire qui accueillera l’image ?

    Mais pourquoi le faire avec une Arduino et se compliquer la vie avec une caméra qui a une si basse résolution et qui coûte déjà 35 € sans les frais de port et de douane ?

    Une Raspberry Pi, une webcam ou une camera board en Full HD et c’est fini, pour un prix à peine plus cher.

    Je ne sais pas quel est le projet, mais traiter une image de 160 x 120 pour en extraire une information exploitable pour piloter un robot, il faut être vachement costaud en algorithmes de traitement d’image.

    Répondre à ce message

  • Le 4 juin 2013 à 15:34, par jtrampq En réponse à : Caméras et Arduino

    Bonjour,

    Mon projet est de capturer les informations des senseurs depuis un arduino/robot et de l’envoyer par wifi au serveur pour ensuite piloter l’arduino/robot. En lisant ton article, j’ai pris peur et je me suis dit que la voie série ne supporterait jamais le flux...

    Si votre objectif est de transmettre par la liaison série de l’Arduino le flux d’image d’une caméra connectée à l’Arduino qui en plus contrôle votre robot, revoyez votre conception et choisissez une autre solution.

    Mais en cherchant un peu sur le net, je suis tombé sur une petite caméra toute simple et qui génère un flux video très léger : 160x120 en JPG.

    Référence : LS-Y201
    Exemple d’utilisation : http://mbed.org/cookbook/Camera_LS_Y201

    Qu’en pensez vous ?

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.