Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Capteurs > Capteurs de position > Position par souris optique

Position par souris optique

dimanche 6 septembre 2009, par Julien H.

Utiliser une souris optique est une idée répandue. En effet, on peut espérer une grande précision (400 points par pouce soit une précision théorique de 0,0635 mm entre deux valeurs). Mais elle est aussi souvent vite abandonnée car on commence par essayer avec la souris posée devant soi, on fait 2-3 aller/retour à la même position et on constate à l’écran une sacrée différence qui fait renoncer.

Souris optique PS/2

Ce phénomène s’explique par l’utilisation de la vitesse de mouvement dans le driver de souris de votre système d’exploitation (Bill, Pomme ou Pingouin font pareil car c’est un réel confort pour l’utilisateur, et pas une erreur) afin que vous puissiez à la fois obtenir une bonne précision à vitesse lente et une grande distance parcourue à vitesse rapide. On va donc tester cette idée de positionner un robot en utilisant le capteur d’une souris optique.

Cette idée est facile à mettre en œuvre et peu onéreux car certains capteurs disposent d’une interface série (une patte pour l’horloge, une patte pour les données) qui fonctionne comme une mémoire à registres (le capteur de la souris répond à un numéro de registre sur 8 bits en envoyant la valeur du registre octet par octet).

Mais c’est au niveau de la mécanique que c’est plus délicat, car le capteur a besoin d’une lentille (focale de quelques mm) et l’ensemble doit être à une certaine hauteur pour avoir des valeurs cohérentes. Or un robot, ça vibre et ça sursaute. On verra donc à la fois la communication entre un micro-contrôleur et ce capteur (la partie "simple" si on peut dire) et aussi comment on peut intégrer ce capteur à un vrai robot qui roule et pas seulement à une platine d’essai.

Le dernier point d’introduction concerne la vitesse. Les capteurs qu’on utilise sont donnés pour 12 ips (inches per second = pouces par seconde) ce qui donne une vitesse de 30 cm par seconde ce qui correspond à un petit robot, pas une bête de compétition. C’est une limite tout à fait acceptable pour nous mais il vaut mieux le savoir avant de réaliser votre robot autour de ce capteur. Bien sûr il faut vérifier selon le capteur que vous avez trouvé si la vitesse est meilleure ou pire.

Bien sûr, il y a des inconvénients et la précision réelle (pas la résolution du capteur mais l’erreur constatée) n’est pas comparable à des systèmes d’odométrie plus onéreux et plus complexes (ça vous étonne ?).

Quelques recherches

Avant-propos, certains visiteurs s’étonnent parfois de la ressemblance de nos articles avec d’autres qu’ils ont pu voir sur le Net (et que parfois nous ne connaissons même pas). Ce n’est pas étonnant, le domaine est encore assez limité et les mêmes idées reviennent régulièrement, car on s’inspire de ce qui nous entoure.

Cependant hors de question de faire de la recopie ou de la traduction d’articles mot pour mot. On va donc chercher ce qui a été fait (surtout si on découvre que ça ne fonctionne pas chez nous, autant avoir confirmation que ça ne vient pas d’une fausse manip’) et le refaire. En espérant l’améliorer.

Ou en tout cas en étant plus clair que certains qui mettent 2 mots sur un forum mais ne donnent pas la petite astuce qui les a bloqués pendant 2 mois et qu’ils omettent de mentionner alors qu’on va forcément la rencontrer. Ou pire, en disant qu’ils ont réussi mais ont crashé leur disque dur (d’où l’intérêt de tout publier, même quand on pense que c’est simple et que tout le monde pourrait le refaire) :

You can also get the actual image off those mouse sensors too. I did it once using the parallel port on the PC and a little C# application. Unfortunately I lost all that code after a hard drive crash :(

Donc voici quelques articles traitant du sujet :

D’autres liens proposés par Laurent qui avait étudié la question :

Par nous-mêmes

Voici quelques images d’une souris optique ouverte pour récupérer le capteur nécessaire à la mesure du déplacement d’un robot mobile.

Souris optique PS/2
Electronique complète
Support indispensable

Il est important de choisir une souris plutôt ancienne, par exemple avec un câble PS/2. Tout simplement car les souris modernes ont un capteur "tout en un" qui fait la capture et le traitement optique, mais également la communication USB, qui ne nous intéresse pas.

Caméra du capteur
Capteur ADNS-2610
Electronique suffisante

La datasheet du composant : ADNS-2610 (mais il en existe d’autres, sur le même principe de mémoire à registres).

Voici le code source pour Arduino issu de la librairie de Martijn.

On le modifie pour pouvoir envoyer une trame sur le PC qui sera récupérée dans une feuille Excel pour tracer le parcours réalisé.

Et voici le résultat (l’appli Processing contient la feuille Excel des valeurs brutes ainsi que la feuille Excel de traitement, qui permettra également de tracer la vitesse, etc..). Il s’agit d’un carré réalisé à main levée en suivant un cadre dessiné. Comme le manipulateur (votre serviteur) n’était pas très doué, il y a des erreurs qui lui sont entièrement imputables. En tout cas les horizontales montrent la bonne répétabilité.

Carrés à main levée
L’unité est le mm.

Voici une autre idée de manip’ proposée par Eric pour éliminer les problèmes d’imprécision dues à l’exécution manuelle des mouvements. Il s’agit de faire un mécanisme (en LEGO par exemple) de volant et bielle. Le capteur serait placé à l’extrémité de la bielle et se déplacerait ainsi sur un segment de droite toujours identique. De plus cela permettrait de tester ce qui se passe au niveau accélération, puisque la position curviligne du mobile aurait une équation en sin(t).

Un petit crobar valant mieux qu’un long monologue, voici ce que ça donnerait :

Image du capteur

Guilhem a réalisé une interface permettant de récupérer l’image que voit le capteur de la souris, puis que le calculateur DSP (data signal processing) va interpréter pour nous envoyer le décalage en x et en y.

Voici le résultat :

Intégration dans un robot

Après tests, on peut intégrer le capteur et son support sur un robot.

Intégration dans le robot

... la suite bientôt !

Fête de la Science

Cette démonstration a été proposée sous forme d’atelier lors de la Fête de la Science 2009 à Sophia-Antipolis.

Nouveau capteur ADNS-2620

Sparkfun propose ce capteur (et les pièces mécaniques et optiques nécessaires) pour une quinzaine de dollars, sous une forme beaucoup plus pratique à installer dans un robot qu’une souris démontée :

Platine pour ADNS2620

Vos commentaires

  • Le 5 avril 2014 à 15:53, par jptrauet En réponse à : Position par souris optique

    Bonjour,
    Dans cette souris, il y a un capteur pour la molette qui est éclairé par une LED vraisemblablement en infrarouge.
    Ce capteur comporte 3 broches, une au +5V, une à la masse et la 3ème au contrôleur. Connaitriez-vous la référence de ce capteur, afin que je puis trouver ses spécifications ?
    Merci bien
    Cdt
    JP

    • Le 6 avril 2014 à 11:21, par Julien H. En réponse à : Position par souris optique

      Bonjour,
      Non, ce capteur ne nous est pas connu spécifiquement, il faut le tester, par exemple en se connectant à une entrée analogique (ou à un oscilloscope).
      Il existe également un appareil formidable qui analyse les composants (je n’ai plus le nom en tête) : on y connecte les pattes d’un composant et il nous donne ses caractéristiques.

    Répondre à ce message

  • Le 17 mai 2013 à 10:55, par Philippe En réponse à : Position par souris optique

    Bonjour,
    Quelle précision obtenez vous ?
    ( le centième de millimètre est il envisageable ? )
    Merci
    Ptilou

    Répondre à ce message

  • Le 13 décembre 2012 à 14:45, par Mathieu En réponse à : Position par souris optique

    Bonjour à tous !

    Je suis étudiant en MP, j’étudie pour mon Tipe le capteur A2610 donc celui que vous avez utilisé pour votre robot.

    Nous avions dans l’idée de reproduire un scanner à l’aide de la souris. Mais n’étant pas habitués à programmer nous ne savons pas du tout comment créer l’interface permettant de récupérer les images prises par le capteur.
    Et la en cherchant je tombe sur :

    " Guilhem a réalisé une interface permettant de récupérer l’image que voit le capteur de la souris, puis que le calculateur DSP (data signal processing) va interpréter pour nous envoyer le décalage en x et en y. "

    Serait-il possible d’obtenir plus d’information et même (si possible)les ressources de votre interface s’il-vous-plait ?

    Merci d’avance !

    • Le 13 décembre 2012 à 21:44, par Julien H. En réponse à : Position par souris optique

      Salut ! Bien sûr, j’ai lancé un appel pour publier les sources. Mais rien de bien sorcier, avec des applis simples comme Processing et Arduino, vous devriez y arriver.

      Il s’agit tout simplement de faire une boucle sur les 64 pixels. Vérifiez bien que votre hardware peut vous envoyer la valeur du pixel. Ouvrez un fil de discussion sur http://forum.pobot.org afin qu’on vous donne un coup de pouce et qu’on échange sur les différentes étapes (c’est la règle : on fournit l’aide selon notre disponibilité, en échange d’une description régulière du déroulement du projet).

    Répondre à ce message

  • Le 4 juin 2011 à 10:46, par Astondb8 En réponse à : Position par souris optique

    Bonjour,
    Desolé de ressortir cette discussion, mais c’est un sujet sur lequel je me penche actuellement et qui reglerait pas mal de mes problemes.

    Le bus de mes recherches est de trouver une solution à un prix raisonable pour positionner un Robot roulant dans une espace donné.

    Votre sujet est vraiment complet et ne necessite pas d’autre explication que de tester et eventuellement d’adapter à la base de chaque robot.
    Toutefois, je me pose une question.

    N’est il pas preferable d’utiliser deux souris (une à droite et l’autre à gauche du Robot) ?

    En effet, un robot ne se deplace pas sur l’axe X, seul l’axe Y est vraiment parlant.

    Les virages seraient donc calculés en fonction de la différence entre les deux axes Y des deux souris ?

    Les calculs (enfin la formule mathématique serait une adaptation du mode de calcul de deux roues codeuses.

    Que penssez vous de cette reflexion, et si je me trompe pouvez vous me dire en quoi ?

    D’autre part Comme vous le prevoyez, les données obtenues sont plutot difficiles à analyser.
    Croyez vous que filtrer ces données me simplifirait la tache ou cela risquerait de perdre en precision de position ?

    Merci pour vos reponses.

    Cdlt
    Yves

    • Le 5 juin 2011 à 17:56, par Julien H. En réponse à : Position par souris optique

      Bonjour Yves,

      Non ce n’est pas préférable d’utiliser deux souris, car l’information des deux souris sera la même : un point 2D en x et y dans le repère de départ.

      Un robot se déplace sur deux axes, il tourne, il vire.. dans un repère fixe externe au robot. C’est sûr que dans le repère du robot, on peut même dire qu’il est immobile... donc je ne comprends pas ton point de vue, peux-tu expliquer ?

      Fais l’expérience avec une souris : avance de 5 centimètres, tourne à 90°, avance de 5 centimètres : le pointeur à l’écran a bien fait un angle de 90°, il n’a pas continué tout droit car le capteur a intégré la rotation. Des calculs en moins, le rêve !

    • Le 11 octobre 2012 à 17:14, par ? En réponse à : Position par souris optique

      Bon excusez moi (aussi) de ressortir le sujet, mais je n’ai pas tout a fait compris votre réponse a la question (pourquoi ne pas utiliser 2 souris optiques ?).
      En effet, chez moi lorsque je tourne la souris de 180 (par exemple) degrés et que je descend, le curseur a l’écran, lui, continue de monter (ai-je mal compris ?).
      Pour mon projet je comptais donc mettre deux souris (a droite et a gauche du robot) pour pouvoir determiner l’angle de rotation par la différence de variation entre les 2 capteurs.

    • Le 12 octobre 2012 à 00:46, par Julien H. En réponse à : Position par souris optique

      Bonjour Loïs ! Apparemment il fallait faire le test, car (sous Ubuntu), la souris ne fait pas un angle de 90°...

      J’avais tort et Yves avait raison (ne lui dites pas trop fort). Les déplacements en Y sont donc nuls ou faibles et on pourrait faire quelque chose avec deux souris.

      A tester et à valider !!

    Répondre à ce message

  • Le 16 janvier 2011 à 18:15, par ? En réponse à : Position par souris optique

    Nous avons comme projet de construire un petit robot autonome. Très vite, la question de l’odométrie c’est posée. Grâce a votre site et aux articles traitant du sujet, nous avons décidé d’utiliser des souris optique. Après de nombreuses heures de travail nous avons mis en place un système odométrique fonctionnel basé sur deux souris optique. Afin, que des personnes motivées poursuivent nos travaux, nous avons mis en ligne un site dédié à notre projet : http://kevin.lenormand.perso.sfr.fr.

    Répondre à ce message

  • Le 22 septembre 2009 à 00:31, par ? En réponse à : Position par souris optique

    Comme dit dans l’article le problème vient des drivers de souris plus que des souris elle même.
    Pourquoi ne pas s’interfacer directement en PS2 ou USB ? Ainsi on évite le problème lié aux drivers.

    Bonus : on profite des X boutons poussoirs et d’un encodeur (la molette). Le tout sans prendre de pattes supplémentaires sur le microcontrolleur.

    • Le 22 septembre 2009 à 14:12, par Julien H. En réponse à : Position par souris optique

      Car le protocole PS/2 ou le protocole USB est lourd à gérer (pis pour l’usb qui nécessite un contrôleur maître non disponible dans les microcontrôleurs simples), et rajoute un temps de réponse supplémentaire. Alors que s’interfacer avec seulement 2 lignes d’entrée/sortie d’un micro-contrôleur à la source (le chip qui fait le traitement vidéo + les calculs trigonométriques en x/y) est simple et rapide.

    • Le 24 septembre 2009 à 22:27, par Rom1 En réponse à : Position par souris optique

      Effectivement, en regardant le code source Arduino je viens de réaliser à quel point l’interfaçage était simple (enfin façon de parler).

      J’attends avec impatience vos avancées sur le sujet. Je compte moi même réaliser un module équipé de plusieurs capteurs de souris et d’un accéléromètre/gyroscope.

      L’objectif étant de positionner précisément un petit robot (moins de 100cm de périmètre) destiné à évoluer en intérieur. Le tout sans recourir à des éléments mécanique et pour un cout réduit.

      Bien sur je communiquerai sur mes travaux dés qu’ils auront débutés.

      A bientôt, merci pour cet article et vos réponses !

    • Le 24 septembre 2009 à 22:30, par Julien H. En réponse à : Position par souris optique

      Salut Rom1, je suis ravi que ça te plaise. Ce sera effectivement un petit robot :)

      N’hésites pas à nous relancer, car maintenant qu’il y a 3 robots Pobot Easy en construction parallèle (pour la fête de la science), il faut faire des choix chaque soir pour décider sur lequel on avance..

    • Le 25 septembre 2009 à 21:32, par Rom1 En réponse à : Position par souris optique

      Héhé, 3 robots ... attention au surmenage :)

      J’en suis à peine à la phase "d’étude" mais j’ai déjà remarqué les nouveaux composants d’Avago.
      Bien sur les capteurs sur bus SPI mais il y a surtout les ADNS5060 et ADNS5070.

      Je n’ai pas creusé la DS à fond mais ils reprennent exactement le même format et le même fonctionnement que le 2610. De plus ils vont jusqu’à 30i/s ce qui nous donne un joli 75cm/s.

      Il me semble que le problème majeur sera la disponibilité de ces composants.

      L’avenir le dira ;)

    Répondre à ce message

  • Le 8 septembre 2009 à 11:10, par nico En réponse à : Position par souris optique

    Je m’etais interesse un peu a cette solution et j’avais eu peur de la derive possible de l’information issue de la souris optique (le cas d’ecole c’est le curseur de la souris qui bouge tout seul). Il faudra voir si ce phenomene apparait...

    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.