Un pilote wiimote sous Linux en python

Publié le dans « Informatique ». Mots-clefs : Programmation, Wiimote

La wiimote est la manette de contrôle de la console wii de Nintendo, un outil merveilleux dont voici un petit résumé de ses fonctionnalités:

  • Accéléromètres
  • Caméra infrarouge
  • Émetteur/Récepteur Bluetooth
  • 11 boutons

( voir le détail sur la page de wikipédia )

En disposant d’un récepteur bluetooth, il est possible de se connecter à la télécommande et de récupérer ses informations, mieux, avec le projet cwiid, on peut transformer la wiimote en souris!

Ainsi selon le mode dans lequel se trouve la télécommande, on contrôle notre curseur en inclinant la télécommande, ou en la pointant vers une source infrarouge

La source infrarouge pouvant être la sensor bar fournie avec la console, ou une source externe, bougie lampe ou tout ce dont pouvez disposer diffusant de la chaleur à partir d’un point unique

Le pilote fourni avec cwiid fonctionne mais n’est pas optimisé. Il arrive que la souris parte dans une direction incontrôlée, ou de ne pas pouvoir accéder à certaines parties de l’écran.

La faute est due au pilote intégré qui se contente juste de placer le pointeur sur la source infrarouge, avec quelques petites optimisations.

En effet, le capteur de la wiimote nous indique quelle est la position de toutes les sources infrarouges perçues ( et nous fourni également des informations sur leur intensité ), mais la conversion en pointeur est laissée au pilote:

  • Quelle source choisir comme référence?
  • Comment gérer les cas où une source est sortie du champ de vision?
  • Comment réagir quand cette source revient dans le champ de vision?

Tout ceci doit être pris en compte pour pouvoir offrir une ergonomie au curseur et faciliter le contrôle.

Heureusement pour nous le pilote nous donne la possibilité de réécrire nos propres moteurs, et donc de gérer nous même la manière dont on veut que la souris réagisse. Nous avons même le choix dans le langage! En effet, nous pouvons choisir entre offrir un plugin compilé ( le pilote est écrit en C ), ou l’écrire en python. C’est cette deuxième option que je vais présenter dans les articles qui suivront.

À lire aussi :

Commentaires :

  • Avatar
    Raphaël 2010-05-21T13:45:42

    Bonjour,

    Je cherche un moyen de récupérer sous forme de chiffre les données envoyer par la wiimote pour pouvoir faire un TP de mécanique, pourriez-vous m'indiquer un moyen d'y parvenir sachant que je ne sais pas programmer en python et que ça fait longtemps que je n'ai pas fait de C ?

    Sous Windows j'ai utilisé glovepie mais il ne marche pas sous linux, même avec wine.

    Merci.

  • Avatar
    Chimrod 2010-01-07T19:38:41

    Ça ne sera pas si simple que cela y parraît pour une raison toute simple : la gestion des droits. En effet, le démon pour contrôler la souris tourne en root, ce qui signifie que toutes les commandes lancées par le programme seront exécutées avec ces droits, je pense que ce n'est pas du tout ce que vous souhaitez ! La solution serait de transformer le système actuel en couple client lancé par l'utilisateur et un démon qui se chargerait de modifier la position du curseur sur l'écran en fonction des informations qu'envoie le client… Le client serait lancé par l'utilisateur et c'est lui qui lancerai les applications.
    Ça rendrait le code plus sûr qu'il ne l'est actuellement ( séparation des droits ), mais c'est un projet qui dépasse l'utilisation de la wiimote… Mais ça me paraît intéressant à tester !

  • Avatar
    jerry 2010-01-07T19:12:30

    bonjour,

    pensez vous qu'il soit possible avec cwiid de lancer une commande unix a l'appuis d'une touche sur la wiimote?

    je ne trouve rien sur le net et le site du createur est down. Vous avez l'air de bien maitriser le sujet.

    sinon, vous pensez qu'il faille developper un plugin juste pour cette tache ?

    merci pour votre aide