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 20 octobre à 17:56, par zdoucha En réponse à : Caméras et Arduino

    Bonjour à tous,
    Je travaille sur un projet qui consiste à envoyer une photo stocké dans une carte micro sd vers un smartphone android en utilisant module bluetooth HC-05
    Je dispose d’une carte arduino UNO+ module sd card et module bluetooth HC-05
    est ce possible avec ce hardware ?

    JPEG - 111.2 ko
    • Le 23 novembre à 13:47, par Eric P. En réponse à : Caméras et Arduino

      Bonjour,
      Par défaut, je répondrais que oui car la communication BT n’est rien d’autre qu’une communication série, supportée nativement par l’environnement Arduino. Quant à la carte SD, l’utilisation de la bibliothèque correspondante permet d’aller en manipuler le contenu.
      Ceci étant je ne peux pas en dire plus, n’étant pas particulièrement Arduiniste, homis quelque bidouilles pontuelles par curiosité.
      Si vous habitez dans notre secteur, le mieux est de venir faire votre projet au sein de l’association. Vous y trouverez des adeptes beaucoup plus accros à l’Arduino que je ne le suis.
      Cordialement

    Répondre à ce message

  • Le 17 septembre à 12:55, par sam En réponse à : Caméras et Arduino

    Bonjour à tous
    j’ai besoin de détecter le survol du point d’entrée d’une piste atterrissage par des aéronefs d’envergure au moins 2 m, vitesse de l’ordre de 60 à 70
    km/h, hauteur par rapport au capteur entre 4 et 9 m, décalage horizontale par rapport au centre de la piste et du capteur 3 m
    est il possible de mettre une mini caméra ou caméra linéaire avec un angle de vision fermé 30° afin de voir de façon grossiere ce qui se passe au dessus. un arduino sait il gérer une micro caméra ?
    j’ai besoin de détecter une image vraiment différente (le passage du zing) sous fond de ciel peu changeant, une cadence de 5 images secondes serait suffisante j’imagine

    • Le 16 octobre à 16:40, par Eric P. En réponse à : Caméras et Arduino

      Détecter ce genre de chose avec une caméra est tout à fait possible, mais une Arduino n’est pas du tout assez puissante pour effectuer le traitement nécessaire.
      Le problème est d’autant plus délicat que les conditions d’éclairement sont changeantes en extérieur, ce qui rend les traitements à faire plus complexes pour être robustes.
      Quant à la cadence d’image minimale, il suffit de faire le calcul du temps que mettra l’objet à traverser le champ de la caméra en fonction de sa vitesse et de son altitude. Si on prend la situation la plus critique (vitesse maxi de 70 km/h et altitude mini de 4m) la traversée du champ de 30° dure :
      t = 4 x rd(30) / 70000 x 3600 = 0.11 secondes.
      Si on veut détecter à coup sûr, il faut donc une période au maximum égale à la moitié de cette durée (théorème de Shannon), soit 50ms, ce qui fait 20 images par seconde. Votre estimation est donc bien trop faible (sauf erreur dans mon calcul).

    Répondre à ce message

  • Le 3 octobre à 13:15, par Jacky J. En réponse à : Caméras et Arduino

    Bonjour,
    A lire ce blog, j’ai bien compris qu’il fallait prendre plutôt un Rapsberry Pi qu’un Arduino pour traiter la vidéo. Cependant, quelques points m’interpellent :
    - Pour le WiFi, je connecte mon Arduino Méga 2560 à une carte HUZZAH ESP8266. Cette carte est plus puissante que l’Arduino me semble-t-il. Est-il possible de capturer le flux en SPI et de l’envoyer par WiFi au serveur directement de cette carte sans passer par l’Arduino ?
    - 115200 bauds correspond à une liaison série asynchrone. Jusqu’où peut-on aller en liaison série synchrone comme le SPI ?
    - Il est certainement possible de connecter la caméra en parallèle soit sur le port parallèle d’un Arduino quelconque, soit sur celui d’un ESP8266. Ca ira beaucoup plus vite. Le problème est le format des données qu’il faut gérer. J’ai regardé sur le Github et, apparemment, rien... Existe-t-il qqchose dans ce sens.
    - Enfin, pour les caméras sophistiquées comme la CMUcam5, le traitement d’image change-t-il la vidéo à transmettre ? Un traitement d’image en local détecte les objets, d’accord, mais il faut quand même transmettre le flux vidéo, et là, je ne vois pas ce qui change. Si un Arduino bloque avec une petite caméra ordinaire, il bloquera de même avec une caméra à traitement d’images me semble-t-il.
    Merci de vos réponses.

    • Le 16 octobre à 16:28, par Eric P. En réponse à : Caméras et Arduino

      Nous ne connaissons pas la carte Wifi mentionnée. Donc impossible de répondre sur ce point.
      Concernant le SPI, la vitesse dépend du hardware. Par exemple on peut monter jusqu’à 5MHz sur Raspberry. Pour connaitre la limite sur une Arduino, se reporter à la documentation technique de l’AVR qui l’équipe. Ca peut donc varier selon le modèle d’Arduino.
      Concernant la CMUCam5 (ou la PixyCam), le traitement de la vidéo est fait sur le module caméra lui-même par le processeur qui y est embarqué. Le flux vidéo n’est donc pas transmis, et ce qui est envoyé au MCU est un flus contenant les caractéristiques géométriques (bounding box) des blobs détectés. Ce flux étant nettement moins lourd qu’un flux vidéo, un Arduino peut le supporter.
      D’ailleurs, notre robot Coupe de France 2006 (http://www.pobot.org/-Coupe-2006-Funny-Golf-.html) utilisait une CMUCam de l’époque (version 2 si je me souviens bien) et son flux série était traité par ce qui aurait pu être l’Arduino qu’on connait aujourd’hui si nous avions eu l’idée de diffuser notre carte maison (cf http://www.pobot.org/10-Architecture-generale.html).

    Répondre à ce message

  • Le 25 janvier à 15:18, par Titou En réponse à : Caméras et Arduino

    bonjour,
    j’ai comme projet de filmer une petite éolienne sur le toit de mon lycée grâce a une camera arduino et un arduino mega, et je dois retranscrire l’image de la camera sur un ecran lcd 2.8’ compatible avec arduino aussi. Qui pourrai m’aider ?
    merci d’avance

    • Le 25 janvier à 21:14, par Julien H. En réponse à : Caméras et Arduino

      Les Arduino ont très peu de ressources pour pouvoir acquérir un signal vidéo et l’afficher sur un écran. Pourquoi le choix de ce matériel ? Quelle est la caméra utilisée ?
      Bon courage et n’hésitez pas à nous contacter directement pour exposer le contexte de ce projet et ses contraintes.

    Répondre à ce message

  • Le 2 janvier à 19:25, par pj rauch En réponse à : Caméras et Arduino

    Bonjours
    Je comme projet de fair un robot qui suis avec sa tête un objet mais je ne sais pas quel caméra choisire Ps j’utilise une carte arduino uno
    Merci de votre attention

    • Le 5 janvier à 19:14, par Eric P. En réponse à : Caméras et Arduino

      La plus connue pour ce genre de chose et qui puisse être utilisée avec la puissance limitée d’une Arduino est la CMUCam.
      Attention cependant, il n’est possible à ce niveau que de faire du tracking de couleur, et non pas de forme, de visage ou autre. Ce genre de suivi nécessite de traiter de la vidéo en temps réel, tâche totalement hors de portée d’une Arduino.

    Répondre à ce message

  • Le 29 novembre 2013 à 10:31, par florent En réponse à : Caméras et Arduino

    Bonjour,
    mon projet est de filmer un match de foot de robot. La caméra utilisé est la pob eye, et je voudrais si l’on peut la relier à une carte arduino (UNO) et surtout comment ? merci

    • Le 8 décembre 2013 à 10:26, par Julien H. En réponse à : Caméras et Arduino

      Bonjour,

      La PobEye est incapable de filmer, elle fait uniquement de la reconnaissance de forme. On peut la connecter à une Arduino mais uniquement pour échanger des trames d’octets concernant les formes vues par la caméra.

      Pour filmer un match de foot de robot, il faut une webcam HD + une carte Linux comme la PCduino ou la Raspberry Pi et un logiciel pour Linux qui enregistrera sur la carte SD.

    • Le 4 janvier 2014 à 14:28, par florent En réponse à : Caméras et Arduino

      bonjour désolé du retard et merci pour votre réponse.
      En fait j’aimerais utilisé la POB EYE pour faire de la reconnaissance de formes puis que la arduino les traites et les envoie a une autre caméra pour les enregistrer et pour ensuite les retranscrire.. Voyez vous ce que je veux dire ? Pouvez-vous m’aider ?
      Merci

    • Le 8 janvier 2014 à 23:02, par Eric P. En réponse à : Caméras et Arduino

      >>
      Voyez vous ce que je veux dire ?
      <<

      Pas du tout :(

      Vous voulez envoyer quoi à une caméra ? Pas des images j’imagine, car en général une caméra fonctionne dans l’autre sens :) Lui envoyer les informations sur les formes détectées lui fera une belle jambe également d’ailleurs. Et pour ce qui est d’enregistrer, là encore ce n’est pas le bon cheval, car la caméra n’a aucune possibilité en la matière.

      Donc tout cela n’est pas très clair, et il est assez difficile de vous aider dans ces conditions.

    Répondre à ce message

  • Le 14 juillet 2015 à 19:50, par Indian2142 En réponse à : Caméras et Arduino

    Bonjour,
    Pour un de mes projet je souhaiterait utilisé deux camera sur un module arduino une camera infrarouge pour filmé et retranscrire sur un petit écran ainsi qu’une autre camera de préférence avec un maximum de résolution pour de jours y a t’il possibilité de trouvé tout cela ou du moins cela existe t’il ?
    Petite précision tout cela si il était possible serait enregistré sur SD et bien-sur les deux caméra ne tournerait pas ensemble le pauvre contrôleur ne serait plus coi faire ^^
    Cordialement

    • Le 15 juillet 2015 à 22:43, par Eric P. En réponse à : Caméras et Arduino

      Et tout ça avec un Arduino ?
      Non sérieusement, faut pas rêver. C’est absolument impossible.

    Répondre à ce message

  • 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 formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document