Configurer l'affichage et lancer oculusd (démarre la localisation par la caméra infra-rouge) :
cd ~/bureau/wiki ./xr1
Lancer OculusWorldDemo :
cd ~/Oculus/ovr_sdk_linux_0.4.3/Samples/OculusWorldDemo make run
Les anciens SDK ne sont plus disponibles sur le site de Oculus. Les nouveaux SDK sont exclusivement sur Windows. Pour trouver les dernières versions de SDK compatibles avec Linux :
https://wiki.archlinux.org/index.php/Oculus_Rift
L'ordre le linkage des bibliothèques est important à cause des interdépendances.
Par exemple avec l'ordre suivant :
target_link_libraries(displayOculus ${catkin_LIBRARIES}) target_link_libraries(displayOculus ${OpenCV_LIBRARIES}) target_link_libraries(displayOculus ${OPENGL_LIBRARY}) target_link_libraries(displayOculus ${GLFW_LIBRARIES}) target_link_libraries(displayOculus ${GLEW_LIBRARY}) target_link_libraries(displayOculus rt) target_link_libraries(displayOculus Xrandr) target_link_libraries(displayOculus Xxf86vm) target_link_libraries(displayOculus pthread) target_link_libraries(displayOculus ${OVR_LIBRARIES})
on a l'erreur suivante :
/usr/bin/ld: /home/jcombier/Oculus/ovr_sdk_linux_0.4.3/LibOVR/Lib/Linux/Debug/x86_64/libovr.a(OVR_SharedMemory.o): référence au symbole non défini «shm_unlink@@GLIBC_2.2.5» /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/librt.so: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit statusf
Avec cet ordre il n'y a plus d'erreur :
target_link_libraries(displayOculus ${catkin_LIBRARIES}) target_link_libraries(displayOculus ${OpenCV_LIBRARIES}) target_link_libraries(displayOculus ${OVR_LIBRARIES}) target_link_libraries(displayOculus Xxf86vm) target_link_libraries(displayOculus pthread) target_link_libraries(displayOculus Xrandr) target_link_libraries(displayOculus ${OPENGL_LIBRARY}) target_link_libraries(displayOculus ${GLFW_LIBRARIES}) target_link_libraries(displayOculus ${GLEW_LIBRARY}) target_link_libraries(displayOculus rt)
On a trouvé une solution en modifiant directement la ligne de compilation g++ qui avait été généré par la commande catkin_make. Trois documents sont ajoutés : CMakeLists.txt (version qui fonctionne), CMakeLists.txt.save (version initiale qui ne fonctionne pas), tentative compilation (fichier qui retrace notre démarche)
Après des mises à jour de paquets (sans doute des paquets de NVIDIA) sur l'ordinateur bellatrix, le SDK de l'Oculus ne fonctionnait plus. L'erreur suivante était affichée :
X Error of failed request: GLXBadFBConfig Major opcode of failed request: 155 (GLX) Minor opcode of failed request: 21 (X_GLXGetFBConfigs) Serial number of failed request: 135 Current serial number in output stream: 135
Elle survenait lors de l’exécution de la fonction bool SDKWindow::getVisualFromDrawable(GLXDrawable drawable, XVisualInfo* vinfoOut) dans LibOVR/Src/Displays/OVR_Linux_SDKWindow.cpp.
Une modification de cette fonction permet de résoudre le problème :
bool SDKWindow::getVisualFromDrawable(GLXDrawable drawable, XVisualInfo* vinfoOut) { _XDisplay* display = glXGetCurrentDisplay(); //********** Ajout int screen; int value; glXQueryContext(display, glXGetCurrentContext(), GLX_FBCONFIG_ID, &value); glXQueryContext(display, glXGetCurrentContext(), GLX_SCREEN, &screen); const int attribs[] = {GLX_FBCONFIG_ID, value, None}; int numElems; GLXFBConfig* config = glXChooseFBConfig(display, screen, attribs, &numElems); { XVisualInfo* chosen = glXGetVisualFromFBConfig(display, *config); *vinfoOut = *chosen; XFree(config); XFree(chosen); return true; } return false; //*********** Retrait // unsigned int value; // glXQueryDrawable(display, drawable, GLX_FBCONFIG_ID, &value); // XVisualInfo* chosen = glXGetVisualFromFBConfig(display, reinterpret_cast<GLXFBConfig>(value)); // *vinfoOut = *chosen; // return true; }
Modification d'après https://forums.oculus.com/fr/discussion/16664/solved-glxbaddrawable-under-linux et https://github.com/jherico/OculusSDK/pull/51/files