VRPN
Les différentes étapes ont été effectuées sous Windows.
Dépendances
Installer CMake.
Liens utiles
Site officiel:
http://www.cs.unc.edu/Research/vrpn/obtaining_vrpn.html
Pour le télécharger:
ftp://ftp.cs.unc.edu/pub/packages/GRIP/vrpn/
Tutoriels de Sébastien Kuntz (VrGeeks):
http://www.vrgeeks.org/vrpn/tutorial---use-vrpn
http://www.vrgeeks.org/vrpn/tutorial---vrpn-server
Installation
Commencez par créer la solution VisualStudio10 :
mkdir build
cd build
cmake .. -G"Visual Studio 10"
Puis lancer le fichier Visual Studio 10 ALLBUILD. Puis générer la solution.
Configuration
Le fichier de configuration de vrpn fait référence au fichier build/server_src/vrpn.cfg
Souris
Dé-commenter la ligne suivante (1500) dans le fichier de configuration (Enlever le #) :
#vrpn_Mouse Mouse0
Clavier
Dé-commenter la ligne suivante (1511) dans le fichier de configuration :
#vrpn_Keyboard Keyboard0
Wiimote
Dé-commenter la ligne suivante (1580) dans le fichier de configuration :
#vrpn_Mouse Mouse0
VRPN pour la Wiimote
Récupérer Wiiuse
- Télécharger Wiiuse
- Dézipper les fichiers
- Faire le prérequis et le test 1 de la Wiimote
Compiler VRPN pour la Wiimote
- Commencer par re-créer la solution VisualStudio10 en utilisant Cmake et changeant des options (cf liste ci-dessous) :
mkdir build
cd build
cmake .. -G"Visual Studio 10"
- Il faut cette fois-ci cocher, lors du CMake, la case VRPN_USE_WIIUSE
- Renseigner en plus : WIIUSE_INCLUDE_DIR qui pointe vers le dossier de la bibliothèque Wiiuse précédemment dézippée
- WIIUSE_ROOT_DIR idem
- WIIUSE_LIBRARY idem/wiiuse.lib
- WIIUSE_RUNTIME_LIBRARY idem/wiiuse.lib
- Cocher la case VRPN_GPL_SERVER
- Puis lancer le fichier Visual Studio 10 ALLBUILD et générer la solution.
- Copier-coller la dll wiiuse.dll du dossier de l'archive dézipée lors de l'installation de la bibliothèque Wiiuse dans le dossier du seveur VRPN.
- Faire le prérequis et le test 2 de la Wiimote
Tests
Commencez par lancer le projet vrpn_server et le laissez tourner en arrière plan.
Clavier
build/client_src/vrpn_print_devices KeyBoard0@localhost
Tester en appuyant sur les touches de votre clavier.
Souris
build/client_src/vrpn_print_devices Mouse0@localhost
Tester en bougeant et cliquant avec votre souris.
Wiimote
build/client_src/vrpn_print_devices WiiMote0@localhost
Tester en bougeant et en appuyant sur les boutons de la Wiimote.
Test 1
- Lancer, avant que la Wiimote ne s'éteigne, wiiuseexample.exe. Normalement, un affichage des valeurs de la Wiimote s'affiche en continu.
- Quitter puis lancer wiiusesdl.exe qui doit fonctionner aussi. Un appui sur le bouton B (gachette fait vibrer en continu la Wiimote)
- Quitter
Test 2
- Lancer, avant que la Wiimote ne s'éteigne, vrpn_server du dossier vrpn\build\server_src\Release (ou debug). Normalement, la Wiimote vibre et la connexion est établie.
- Laisser la console ouverte
- Ouvrir une invite de commande et aller dans le répertoire du client VRPN (vrpn\build\client_src\Release (ou debug)).
- Exécuter dans l'invite de commande
vrpn_print_devices.exe WiiMote0@localhost
- Normalement, un affichage des valeurs de la Wiimote s'affiche en continu.
Créer un projet VisualStudio10
Configuration
- Mettre vrpn.lib dans
Configuration Properties > Linker > Input > Additionnal Dependencies
- Mettre le dossier où se situe le fichier vrpn.lib dans :
Configuration Properties > Linker > General > Additionnal Libraries Directories
- Mettre le dossier du SDK VRPN (où sont situés les sources) dans :
Configuration Properties > C/C++ > General > Additionnal Include Directories
Création d'un client
Puis tester en ajoutant le fichier suivant (issu en partie du tutoriel VrGeek)
#include "vrpn_Tracker.h"
#include "vrpn_Button.h"
#include "vrpn_Analog.h"
#include <iostream>
using namespace std;
class Object {
public:
void call(){
cout << "Object call" << endl;
}
};
void VRPN_CALLBACK handle_analog( void* userData, const vrpn_ANALOGCB a )
{
int nbChannels = a.num_channel;
cout << "Analog : ";
for( int i=0; i < a.num_channel; i++ )
{
cout << a.channel[i] << " ";
}
cout << endl;
}
/**
* Fonction de callback appelé lors d'un évènement.
* @param[in,out] userData Pointeur vers un objet quelconque. Doit être caster dans la méthode.
* @param[in] a Structure qui les informations liés à l'évènement.
*/
void VRPN_CALLBACK handle_button( void* userData, const vrpn_BUTTONCB b )
{
// Object* o = static_cast<Object*>(userData);
// o->function();
cout << "Button '" << b.button << "': " << b.state << endl;
}
void VRPN_CALLBACK handle_tracker(void* userData, const vrpn_TRACKERCB t )
{
cout << "Tracker '" << t.sensor << "' : " << t.pos[0] << "," << t.pos[1] << "," << t.pos[2] << endl;
}
int main(int argc, char* argv[])
{
vrpn_Analog_Remote* vrpnAnalog = new vrpn_Analog_Remote("Mouse0@localhost");
vrpn_Button_Remote* vrpnButton = new vrpn_Button_Remote("Mouse0@localhost");
vrpn_Tracker_Remote* vrpnTracker = new vrpn_Tracker_Remote( "Tracker0@localhost");
// Object o;
vrpnAnalog->register_change_handler( NULL, handle_analog );
vrpnButton->register_change_handler( NULL, handle_button );
// vrpnButton->register_change_handler( o, handle_button );
vrpnTracker->register_change_handler( NULL, handle_tracker );
while(1)
{
vrpnAnalog->mainloop();
vrpnButton->mainloop();
vrpnTracker->mainloop();
}
return 0;
}
Référence
La documentation doxygen est à générer vous-même, mais permet de rapidement voir quel sont les structures utilisées par VRPN :
cd <vrpn>/doxygen
doxygen Doxyfile
firefox html/index.html
Sous Linux
Fixez les dépendances :
sudo apt-get install libxmu-dev libxi-dev
Télécharger l'archive :
mkdir VRPN && cd VRPN
wget http://www.cs.unc.edu/Research/vrpn/downloads/vrpn_07_30.zip
Par la suite, de-zippez, le zip dans le même fichier.
mkdir build && cd build
cmake ..
make
sudo make install
VRPN est maintenant installé !