VRPN

De µRV - La réalité virtuelle au département informatique
Aller à : navigation, rechercher

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é !