wiki:TrackIR

LE TRACKIR


Photo du Trackir Photo des capteurs infrarouges se fixant à une casquette Photo des capteurs infrarouges à fixer sur un casque

Installation du trackIR

Le trackIR 4 PRO fonctionne sous windows, pour l'installer, il suffit de le connecter à un port USB et d'installer les pilotes fournie avec le CD. Nous utilisons une virtual box pour faire fonctionner windows en même temps que Linux et il ne faut pas oublier de d'activer le trackIR dans les périphériques usb. Si l'installation a fonctionné vous pouvez le tester en lançant le programme trackIR et en visualisant les jauges, le "tracking" et les visages. Attention les visages ne marche pas toujours sur la virtual box car il ce peut qu'elle gère mal la 3D.


Développement pour le trackIR

Pour développer une application utilisant le trackIR il vous faut utiliser  optitrack SDK et sa documentation. Attention vous ne pouvez pas utiliser le Tracking Toolkits (Point Cloud) qui nécessite une license. J'ai utilisé les exemples fournie sur le site pour avoir une base de programme. Ils utilisent l'Active Template Library (ATL) et les COM de Microsoft pour instancer et gérer leurs composants, car ce sont des objets abstraits. Pour compiler j'utilise Visual C++ et il ne faut pas oublier d'ajouter les répertoires de optitrack dans Options->Projects and Solutions->VC++ Directories. Ensuite dans votre projet, dans les propriétés->linker->input->additional Dependencie, il faut ajouter optitrackuuid.lib, et vous pourrez enfin commencer à coder. Nous utiliserons la passerelle pour transmettre les donnée du trackIR récupérer sous windows à la librairie sous linux.


Les classes du SDK optitrack

Le SDK optitrack permet devellopper des applications sur les differantes cameras natural point (le trackIR 4, le trackIR 3, FLEX:C120, FLEX:V100, SLIM:V100...). Nous l'utiliserons exclusivement avec un TrackIR 4.
La classe INPCameraCollection permet de voir les cameras connectées au système. Elle permet ensuite d'initialiser la INPCamera avec la camera TrackIR connecté.
La classe INPCamera permet d'interagir avec la camera (pour nous un trackIR), elle permet d'avoir différante information sur la camera comme par exemple la fréquence de raffraichissement à l'aide de la méthode "get_FrameRate". Elle permet aussi de demarer et d'arreter la camera et d'initialiser l'INPCameraFrame.
La classe INPCameraFrame est une image de la situation à un instant, on l'utilise pour mettre à jour le INPVector.
La classe INPVector ce met a jour avec la méthode "Update" qui prend en paramettre une INPCamera et une INPCameraFrame. Une fois la mise à jour éffectuer l'INPVector peut renvoyer les valeurs des differants axes (X,Y,Z,Roll,Pitch,Yaw).


Explication pour ATL et les COM

#import <optitrack.tlb>

On utilise la directive préprocesseur Microsoft ‘#import’ pour pouvoir utiliser la collection d’objets COM de optitrack.

CoInitialize(NULL);

Ensuite quand on fait un client d’objet COM en C++, il est indispensable d’initialiser COM dans chaque thread susceptible d’appeler un objet COM. Pour cela il suffit juste d’appeler la fonction Coinitialize() au début du thread.

// Initialisation des pointeurs
CComPtr<INPCameraCollection>  _cameraCollection;
CComPtr<INPCamera>  _camera;
CComPtr<INPCameraFrame>  _frame;
CComPtr<INPVector>  _vector;

Puis on déclare un pointeur (CComPtr) sur l'interface INPCameraCollection, sur l'interface INPCamera, sur l'interface INPCameraFrame et sur l'interface INPVector. Les pointeurs _cameraCollection, _camera, _frame et _vector sont initialisés à NULL par défaut. Dans la classe TrackIRServeur _cameraCollection, _camera, _frame et _vector sont des attributs privés.

_cameraCollection.CoCreateInstance(CLSID_NPCameraCollection);
_vector.CoCreateInstance(CLSID_NPVector);

On utilise la méthode Cocreateinstance pour créer une instance de _cameraCollection. Elle prend en paramètre un CLSID_NPCameraCollection qui est un identifiant unique permettant de définir le composant demandé. On fait la même chose pour l'attribut _vector. Cette instanciation ce fait dans le constructeur de TrackIRServeur.

_cameraCollection->Item(0,&_camera);
hr = _camera->GetFrame(0,&_frame);

Pour créer une instance de _camera on utilise la méthode de _cameracollection Item() qui lie la camera physique à notre attribut. Et pour l'attribut _frame on utilise la méthode GetFrame de _camera.

_cameraCollection.Release();

La méthode Release() permet d'enlever une référence de cameraCollection sur composant. Dés qu'il n'y a plus de référence qui pointe sur _cameraCollection, elle sera détruite automatiquement.
Pour une explication plus détailler vous pouvez aller voir ce  site


Retour au Wiki

Attachments