Club Robotique
aller au contenu
INSA Strasbourg
Membres

James et la WiiMote

Ce tutoriel est créé pour Linux, si vous voulez nous faire parvenir une version pour Windows, n'hésitez pas.

I. Connexion à la télécommande : WiiMote

Il est possible de récupérer les informations de la télécommande de la Wii. Nous allons voir ici comment piloter notre petit robot grâce à cette télécommande.

Installer la librairie « libcwiimote » : http://libwiimote.sourceforge.net/

Sur ubuntu : dans Synaptic, rechercher wii, installer les paquets.

Illustration 1
Illustration 1: Synaptic, installation des paquets concernant la Wii

Il est alors très facile de s'essayer à la récupération des informations de la wii en s'inspirant du code d'exemple fournit sur le site précédemment cité.


// print wiimote accelerometer data to stdout.
// replace xx:xx:xx:xx:xx:xx with the correct bluetooth address.

#include
#include "wiimote_api.h"
int main()
{
wiimote_t wi;
wiimote_connect(&wi, "xx:xx:xx:xx:xx");
wi.mode.acc = 1; // enable accelerometer
while (wiimote_is_open(&wi)) {
wiimote_update(&wi); // synchronize with wiimote
if (wi.keys.home) { // check if home key is pressed
wiimote_disconnect(&wi);
}
printf("x=%d y=%d z=%d\n", wi.axis.x, wi.axis.y, wi.axis.z);
}
}

Il est ici demandé l'adresse mac de la wiimote. On peut aisément la connaître grace à la commande :

$hcitool scan

Pour nous : 00:1F:C5:5C:50:3B

Illustration 2
Illustration 2: hcitool scan : liste des périphériques bluetooth

II. Connexion au module free2move

On a pu relever l'adresse mac de notre module bluetooth <-> uart grâce à la commande précédente. (00:0B:CE:04:34:BB)

Voici un petit script, qu'il est intéressant de placer dans /usr/bin/ afin de pouvoir l'exécuter depuis n'importe où dans la console.

Illustration 3
Illustration 3: Edition du script de connexion bluetooth

Le script est le suivant : il faut remplacer l'adresse mac 00:0B:CE:02:40:B6 par la votre.

Illustration 4
Illustration 4: Edition du script de connexion bluetooth 2

L'exécution du script permet alors de créer un port Com « rfcomm1 » attaché au module free2move.

Illustration 5
Illustration 5: Connexion au module Free2Move

III. Le programme

1. Utilisation du port Com :

On utilisera les fichiers « serie.h » et « serie.c » et notamment les fonctions suivantes :


/**
* jamesWriteString : Send a string throught the serial port.
* @param parPtrString : string to be sent.
* @return wn : number of byte written.
*/
int jamesWriteString( char * parPtrString);

/**
* jamesWriteString : Send a cmd
* @param parCmd : byte array
* @param parLength : longueur
* @return wn : number of byte written.
*/
int jamesWriteCmd(unsigned char * parCmd, int parLength);

/**
* jamesOpenPort : open the serial port describe by james_SERIAL_PORT
* @param none
* @return mFd : -1 if fail to open.
*/
int jamesOpenPort(void);

/**
* jamesRead : poll the serial port
* @param parPtr : name of the thread, could be everything.
* @return should never return...
*/
void * jamesRead(void * parPtr);

/* Crée les thread */
if( pthread_create( &wThSerie, NULL, jamesRead, (void*)"James serial" ) < 0 )
{
printf("Fail to create Thread : James serial \n");
exit(-1);
}
[...]
/*Rejoint les threads */
(void)pthread_join( wThSerie, &wThreadRet );

2. Programme global

Pour ce qui est du reste, voici globalement comment fonctionne le programme, libre à vous de creuser un peu le code.

Illustration 6
Illustration 6: Algorithme global

IV. Exécution du programme

Il faut d'abord lancer la connexion serie bluetooth

$james2 &

puis se placer dans le répertoire contenant l'executable de notre programme, (ou l'appeler avec le bon chemin) et l'executer.

$./jamesWii

Voici un aperçu de chez nous :

Illustration 7
Illustration 7: Résultat

Vous pouvez trouver le fichier .pdf de cette présentation sur ce lien ainsi qu'un dossier .zip contenant des éléments de code.

Valid CSS Valid XHTML 1.0
 ::  Club Robotique, Institut National des Sciences Appliqu?es, 24 Bd de la Victoire, 67084 STRASBOURG Cedex