Journal La wiimote comme souris pour X

Posté par .
Tags : aucun
7
9
mar.
2009
J'ai essayé un nouveau jeu ces derniers jours: piloter X avec une wiimote, à distance de l'écran. C'est wminput[1] qui s'occupe de ça, et il marche très bien. L'ensemble est assez simple à faire fonctionner.

C'est Wiili le projet qui permet tout ça: http://www.wiili.org/

Je vais citer les noms des paquets debian à installer, mais je suis presque sûr que ça marche aussi sous d'autre distributions.

Il faut:
- une wiimote ;-)
- un ordinateur sous debian avec bluetooth fonctionnel. La wiimote utilise une connection bluetooth. Un dongle bluetooth fait parfaitement l'affaire.
- de préférence une « wii sensor bar » ou bien un ou plusieurs projecteurs IR (InfraRouge) ou un bricolage avec des LED IR. J'ai écrit « de préférence » parce qu'on peut faire sans, en utilisant les accéléromètres mais c'est beaucoup moins pratique. Une « wii sensor bar» à piles se trouve dans le commerce (fnac par exemple). La « wii sensor bar » qui «détecte» les mouvements n'est rien d'autre que quelque LED IR. Ce système IR doit être placé à proximité de l'écran (dessous, dessus, sur le côté...).

Marche à suivre:
- installer bluez-utils et wminput.
- ajouter uinput aux modules chargés au démarrage, i.e. dans /etc/modules.
- configurer udev pour que uinput soit utilisable par tous. Un fichier dans /etc/udev/rules.d/ contenant KERNEL=="uinput", MODE="0666" fera ça très bien. Pour affiner les droits aller voir en [1].
- relancer udev et charger uinput ensuite, ou redémarrer le système comme du temps de Windows.
- configurer X: il faut qu'il utilise evdev comme pointeur. Voir par exemple (en bas de la page): http://www.circuitdb.com/articles/7/3

C'est tout. Dans un terminal lancer wminput -c ir_ptr et ça marche. Pas besoin d'être Utilisateur_root si vous avez configuré udev correctement.

Notez que sous debian la configuration par défaut utilise les accéléromètres et non pas l'infrarouge, d'où l'option "-c ir_ptr". On peut changer ça dans /etc/cwiid/wminput, ce qui permet de lancer wminput sans option.

Vous pouvez ensuite utiliser GCompris pour vous entraîner à piloter le pointeur de loin. Ce n'est pas si facile d'être précis.

Plus quà écrire un pilote pour la « wii balance board » pour piloter le pointeur en faisant bouger le centre de gravité. Les geeks vont pouvoir garder la forme.

[1] http://www.wiili.org/index.php/Wminput
  • # Wii balance board

    Posté par . Évalué à 6.

    Je pense que le pilote pour la wii balance board existe déja puisqu'il est possible de jouer à Neverball avec.
    • [^] # Re: Wii balance board

      Posté par . Évalué à 3.

      Il faut que j'essaye ça ! Merci !
      • [^] # Re: Wii balance board

        Posté par (page perso) . Évalué à 1.

        y'a même un profil déjà tout fait dans le package debian:
        $ dpkg -L wminput | grep neverball
        /etc/cwiid/wminput/neverball

        Après, pour utiliser ce profil,
        wminput -c /etc/cwiid/wminput/neverball
        et c'est parti

        Sinon il est aussi très facile de faire son propre fichier de configuration et de mapper à peu près n'importe quelle touche ( dont les macro correspondantes sont listées dans un header du kernel Linux /usr/include/linux/input.h ).

        J'en ai fait un tout bête pour keyjnote par exemple ( la partie X,Y peut être remplacée par les deux lignes 'Plugin.ir_ptr.X = ~ABS_X' et 'Plugin.ir_ptr.Y = ~ABS_Y', pour utiliser le capteur infrarouge ):


        $cat keyjnote
        #keyjnote

        Plugin.acc.X = REL_X
        Plugin.acc.Y = REL_Y

        Wiimote.A = BTN_LEFT
        Wiimote.B = KEY_ENTER
        Wiimote.Up = KEY_UP
        Wiimote.Down = KEY_DOWN
        Wiimote.Left = KEY_LEFT
        Wiimote.Right = KEY_RIGHT
        Wiimote.Minus = KEY_KPMINUS
        Wiimote.Plus = KEY_KPPLUS
        Wiimote.Home = KEY_TAB
        Wiimote.1 = KEY_W
        Wiimote.2 = KEY_Z
  • # Mon plugin pour le pointeur

    Posté par (page perso) . Évalué à 10.

    Je suis en train d'expérimenter ça depuis qques semaines. Je trouve que le moteur ir_ptr n'est pas très performant, et j'étais en train d'en écrire un nouveau. ( En comptant faire un journal une fois terminé..) Puisque tu me prend de vitesse, voici les constatation que j'avais faites :
    Le plugin ne prend pas en compte la rotation de la wiimote ( cela fait bouger le curseur alors que cela ne devrait pas quand on fait tourner la wiimote sur elle même )
    Le plugin ne prend pas en compte quand un point sort du champ
    Et enfin, impossible de recadrer la souris ( comme quand on soulève la souris pour la reposer à l'autre coin du tapis )

    J'ai écrit un petit plugin en python, prenant en compte tout ça. La touche B neutralise le déplacement du pointeur ( ça n'est pour l'instant pas paramétrable ), et gère les cas ou un point sort du champs et un autre apparaît dans l'autre coin sans que le curseur traverse l'ensemble de l'écran. Le plugin est en python, pour le rendre executable il suffit de le placer dans le répertoire contenant les autres plugins ( /usr/lib/cwiid/plugins/ ) . Quand il est lancé en main, il utilise pygame pour afficher les points dans l'écran.

    J'ai des projets pour ce petit plugin, changer de mode suivant une config de bouton ( pour passer du mode souris au mode joystick par exemple ), mettre en place des combinaisons de boutons ( 1 + 2 renverrai clic droit) etc. Si qqn veut se lancer dans le projet, il est le bienvenue !

    Voici la config que j'utilise pour charger le plugin :

    #ir_ptr

    Wiimote.A = BTN_LEFT

    Plugin.ir_control.X = REL_X
    Plugin.ir_control.Y = REL_Y


    Et le lien vers mon code :

    http://www.chimrod.com/downloads/ir_control.py

    Bon jeu à tous !
    • [^] # Re: Mon plugin pour le pointeur

      Posté par . Évalué à 2.

      Je teste ça. Mais que ça t'empêche pas de faire un autre journal, celui-là est venu expliquer comment brancher, quel matériel, etc, pour synthétiser des infos que j'ai glané de ci de là.

      Il faut le mettre où ton ir_control.py ? sur ma debian j'ai juste un ir_ptr.so
      • [^] # Re: Mon plugin pour le pointeur

        Posté par . Évalué à 2.

        Pardon j'avais lu trop vite.

        Le plugin est en python, pour le rendre executable il suffit de le placer dans le répertoire contenant les autres plugins ( /usr/lib/cwiid/plugins/ ) . Quand il est lancé en main, il utilise pygame pour afficher les points dans l'écran.
    • [^] # Re: Mon plugin pour le pointeur

      Posté par . Évalué à 3.

      Et le lien vers mon code :

      http://www.chimrod.com/downloads/ir_control.py


      Ça marche ! Et c'est magnifique. Merci beaucoup.

      Je peux te demander si tu sais si on peut mapper un des boutons pour remplacer le double-click ? Je me disais que ça serait pratique.

      Sinon tu as oublié de mettre une licence sur ton code ;-)
      • [^] # Re: Mon plugin pour le pointeur

        Posté par (page perso) . Évalué à 1.

        Pour le double clic il faut voir ça côté Xorg, ça ne se trouve pas dans le plugin mais plutôt dans le source wminput. Ça pourrait effectivement être une bonne idée ( ou une autre est de tout faire au clic simple (-: )

        C'est vrai pour la licence, à partir sur des bouts de codes, on fini par oublier de fignoler ça une fois le code terminé :) Voilà qui est corrigé !
  • # Bougie

    Posté par . Évalué à 6.

    A noter que si vous ne possédez pas de « wii sensor bar » (le terme sensor m'a toujours fait rire), et que vous n'êtes ni dépensier (une wii sensor bar à pile coûte une quinzaine d'euros, je trouve ça plutôt cher pour 3 diodes), ni bricoleur, une simple bougie suffit.

    Allumez simplement une bougie à côté de l'écran, et ça marche ! (ça tremblote un peu par contre).
  • # quelques exemples

    Posté par . Évalué à 6.

    de ce qui peut être fait avec beaucoup d'imagination et de compétence en programmation...

    http://johnnylee.net/projects/wii/
    • [^] # Re: quelques exemples

      Posté par . Évalué à 2.

      Pour l'embryon de Minority Report, en théorie, on devrait déjà pouvoir faire ça avec les webcams embarqués sur certains portables et des bouts de scotchs colorés flashy. Ça éviterait de plus de se défoncer les yeux aux IR.

      En pratique, comme d'hab, suis toujours pas programmeur: oubliez pas de mettre mon nom sur la page d'accueil du projet que vous allez coder sans moi, tout ça…

      Moi j'ai été plus impressionné par l'idée du tableau blanc, sachant que les "micro-projecteurs" vont arriver sur le marché d'ici quelques années (enfin, même avant, mais je veux dire avec une autonomie raisonnable et à la portée de tout le monde).
      L'avenir sera au netbook fusionné avec le PDA/Téléphone portable: en mode netbook, le projecteur envoie l'image sur une surface devant vous, et une caméra transforme cette même surface en écran tactile.
      Toutes les variantes sont permises (surface "écran" et surface "tactile" séparée, etc.).
      • [^] # Re: quelques exemples

        Posté par . Évalué à 1.

        Sans oublier que les portable/PDA ont parfois des accéléromètres et que l'on peut aussi s'amuser à l'utiliser comme souris.

        J'avais fais ça simplement sur mon N82. Un script en python sur le téléphone pour envoyer les données des accéléromètres et des touches et un petit script en bash avec netcat et xautomation côté PC. Du vrai bricolage mais se fut amusant.
      • [^] # Re: quelques exemples

        Posté par . Évalué à 1.

        Ha tient ça nique les yeux les infrarouges maintenant ?? Les ultraviolets oui, clairement, mais pas les IRs...
        • [^] # Re: quelques exemples

          Posté par . Évalué à 2.

          Les yeux ne détectent pas les IR, et par conséquent ne savent pas s'adapter à la puissance du rayonnement.
          • [^] # Re: quelques exemples

            Posté par . Évalué à 2.

            Sachant que tout le monde en génère, on n'est pas dans la merde ;)
            • [^] # Re: quelques exemples

              Posté par . Évalué à 2.

              Exact, on en génère tous.
              Ce qui signifie que pour concevoir un système de pointage à partir d'une source IR, il faut que la source soit largement plus puissante que toutes les sources environnantes parasites, tellement puissante que la réflexion de cette source sur des petits bouts de scotch au bout des doigts sera également largement plus puissante que les sources environnantes, à commencer par la main de l'utilisateur.
              Cette source largement plus puissante est dans le cas qui nous intéresse placée juste en face de la gueule de l'utilisateur, dont les pupilles ne savent toujours pas s'en protéger.
              C.Q.F.D.
  • # Wiimote et ergonomie

    Posté par . Évalué à 2.

    C'est rigolo la Wiimote, y'a des jeux qui sont sympas à jouer avec comme le tennis, mais niveau ergonomie, on est à des années lumière d'une souris. En général, quand un jeu Wii permet de se déplacer dans les menus avec la croix de direction au lieu de la Wiimote, c'est largement mieux.
  • # wiili

    Posté par . Évalué à 5.

    A noter que le site wiili se contente de recopier les infos qui paraissent sur d'autres sites, et de ramasser les donations paypal..

    Le site de reference sur le hack wii et wiimote est:
    http://www.wiibrew.org/wiki/Wiimote
    • [^] # Re: wiili

      Posté par . Évalué à 2.

      Bon, apperement, le coup des donations paypal est fini, mais ca n'empeche que wiibrew est beaucoup mieux organise que wiili..
    • [^] # Re: wiili

      Posté par (page perso) . Évalué à 1.

      Je suis entièrement d'accord, de plus wminput appartient au projet cwiid : http://abstrakraft.org/cwiid

      il existe des patchs pour la balance http://abstrakraft.org/cwiid/ticket/63 et la guitare GHWT : http://abstrakraft.org/cwiid/ticket/79

      cwiid est aussi dans ubuntu d'origine.

      Donc en gros wiili n'y est surement pour rien dans wminput, je pensais d'ailleurs que ce site était mort....

      S'il y a un problème, il y a une solution; s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

      • [^] # Re: wiili

        Posté par . Évalué à 10.

        Donc en gros wiili n'y est surement pour rien dans wminput, je pensais d'ailleurs que ce site était mort....

        Donc, ça veut dire qu'ils n'ont pas réussi à sauver wiili ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.