Wiimote : Script python avec cwiid pour envoyer et recevoir en OSC
Ce wiki a été archivé en 2018.
Le nouveau wiki se trouve à: ressources.labomedia.org Les fonctionnalités sont désactivées: vous pouvez faire une recherche sur Google site:https://wiki.labomedia.org et découvrir La Labomedia. |
De Centre de Ressources Numériques - Labomedia
Sommaire
Ressources
- http://abstrakraft.org/cwiid/ le trac du projet, qui est la seule doc du projet.
- Wiimote : Compilation de cwiid sur Linux Mint 12 explique comment compiler cwiid.
- Wiimote dans Blender avec le module python 2.6 de cwiid utilise le module python cwiid dans blender directement sans script extérieur.
- http://www.youtube.com/watch?v=acND4sO3pJs&feature=player_embedded montre les possibilités d'une wiimote.
Principe
Dans le dossier cwiid2OSC, un script en python2.7 tourne pour se connecter à la wiimote, récupérer les datas et envoyer le tout en OSC. Il reçoit aussi en OSC pour le rumble. Le fichier OSC.py est pour python2.7 !
Dans le dossier blender, Blender reçoit les datas et les exploite. Il utilise le fichier OSC.py pour python 3.2 !
Les avantages du script extérieur sont:
- Le script tourne dans un processus différent de blender, soit un coeur pour blender et une moitié de cœur pour le script ce qui permet au deux de tourner de façon optimale.
- Le script tourne vite donc intègre bien la vitesse du gyroscope, néanmoins des dérives se produisent si la wiimote est secouée fortement.
Inconvénients de cwiid:
- Plus de développement depuis 2 ans.
- Impossible d'avoir le Motion Plus et le Nunchuk: il faut choisir !
Fichiers
Des fichiers sont dans :
- Un sabre dans Blender pour tester
Envoyer en OSC avec OSC.py
La seule doc est dans OSC.py
Exemple
Comment envoyer x égal 823.56 et y égal 21.5
Créer la connexion
# OSC basic client
c = OSC.OSCClient()
c.connect(('127.0.0.1', 9000))
Créer un bundle
osc_bundle = OSC.OSCBundle()
Créer un message
m1 = OSC.OSCMessage('/position/X')
Ajouter une valeur au message
x = 823.56
m1.append(x)
Ajouter le message au bundle
osc_bundle.append(m1)
Créer un autre message
m2 = OSC.OSCMessage('/position/Y')
Ajouter une valeur au message
y = 21.5
m2.append(y)
Ajouter le message au bundle
osc_bundle.append(m2)
Envoyer le message
try:
# Send Bundle
c.send(osc_bundle)
except:
pass
# Reset bundle
osc_bundle.clearData()
Vous recevrez
['#bundle', 0.0, ['/position/X', ',f', 823.56], ['/position/Y', ',f', 21.5]]
0.0 est le temps d'envoi mais n'est pas gérer dans cet exemple.