diff options
author | mm0zct <the_cartographer@hotmail.com> | 2013-10-21 21:30:14 +0100 |
---|---|---|
committer | mm0zct <the_cartographer@hotmail.com> | 2013-10-21 21:30:14 +0100 |
commit | 6f51a22726266cc88cb061cab2c2bfead49ed4ef (patch) | |
tree | f594048c4d3596f6d5254c0fb454482a9500ca5d | |
parent | bfcfdb8827507de1091d6b92081a78eb8e4df9da (diff) | |
parent | 5048961fa205ecebb2cea4f8d68d51dfbe993189 (diff) |
Merge branch 'feature/libovr-0.2.5' of https://github.com/opentrack/opentrack into feature/tracker_hotkeys
-rw-r--r-- | CMakeLists.txt | 69 | ||||
-rw-r--r-- | ftnoir_tracker_hydra/ftnoir_tracker_hydra.h | 3 | ||||
-rw-r--r-- | ftnoir_tracker_rift/ftnoir_tracker_rift.cpp | 159 | ||||
-rw-r--r-- | ftnoir_tracker_rift/ftnoir_tracker_rift.h | 11 |
4 files changed, 103 insertions, 139 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 73ffec68..5a10f8b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,6 @@ project(opentrack) cmake_minimum_required(VERSION 2.8) -if(CMAKE_VERSION VERSION_GREATER "2.10.0") - cmake_policy(SET CMP0020 NEW) -endif() set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_SOURCE_DIR}/cmake/") SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) @@ -47,18 +44,13 @@ SET(SDK_HYDRA_AMD64 FALSE CACHE BOOL "whether target is amd64 (else ia-32)") SET(SDK_RIFT "" CACHE PATH "libOVR path") -SET(SDK_RIFT_RECENTRE_SPRING TRUE CACHE BOOL "recenter yaw aggressively") - -if(SDK_RIFT_RECENTRE_SPRING) - add_definitions(-DOPENTRACK_RIFT_RECENTRE_SPRING) -endif() - file(GLOB opentrack-faceapi-wrapper-c "faceapi/*.cpp") include_directories(${CMAKE_SOURCE_DIR}) if(NOT SDK_FACEAPI_ONLY) find_package(OpenCV) find_package(Qt5 REQUIRED COMPONENTS Core Xml Network Widgets Gui QUIET) + cmake_policy(SET CMP0020 NEW) include_directories(${Qt5Core_INCLUDE_DIRS} ${Qt5Xml_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS}) add_definitions(${Qt5Core_DEFINITIONS} ${Qt5Xml_DEFINITIONS} ${Qt5Gui_DEFINITIONS} ${Qt5Widgets_DEFINITIONS} ${Qt5Network_DEFINITIONS}) @@ -313,7 +305,12 @@ endif() target_link_libraries(opentrack-compat rt) endif() - SET(MY_QT_LIBS ${Qt5Widgets_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Network_LIBRARIES} ${Qt5Xml_LIBRARIES} ${Qt5Core_LIBRARIES}) + # hack to avoid breakage on buildbot + set(my-qt-deps) + if(WIN32) + set(my-qt-deps ws2_32) + endif() + SET(MY_QT_LIBS ${Qt5Widgets_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Network_LIBRARIES} ${Qt5Xml_LIBRARIES} ${Qt5Core_LIBRARIES} ${my-qt-deps}) add_library(opentrack-csv SHARED ${opentrack-csv-c}) target_link_libraries(opentrack-csv ${MY_QT_LIBS}) @@ -516,38 +513,34 @@ endif() target_link_libraries(opentrack-tracker-hydra ${MY_QT_LIBS}) if(WIN32) target_link_libraries(opentrack-tracker-hydra - "${SDK_HYDRA}/lib/win32/release_static/sixense_s.lib" - "${SDK_HYDRA}/lib/win32/release_static/sixense_utils_s.lib") - set_target_properties (opentrack-tracker-hydra PROPERTIES LINK_FLAGS "/NODEFAULTLIB:libcmt.lib") - else() - if(SDK_HYDRA_AMD64) - set(underscore-sixtyfour _x64) - else() - set(underscore-sixtyfour) - endif() - if(APPLE) - set(underscore-dll _dll) - set(soext dylib) - set(sixense-plat osx) - else() - set(underscore-dll) - set(soext so) - set(sixense-plat linux) - endif() - install(FILES - "${SDK_HYDRA}/lib/${sixense-plat}${underscore-sixtyfour}/release${underscore-dll}/libsixense${underscore-sixtyfour}.${soext}" - "${SDK_HYDRA}/lib/${sixense-plat}${underscore-sixtyfour}/release${underscore-dll}/libsixense_utils${underscore-sixtyfour}.${soext}" - DESTINATION .) - target_link_libraries(opentrack-tracker-hydra "${SDK_HYDRA}/lib/${sixense-plat}${underscore-sixtyfour}/release${underscore-dll}/libsixense${underscore-sixtyfour}.${soext}" "${SDK_HYDRA}/lib/${sixense-plat}${underscore-sixtyfour}/release${underscore-dll}/libsixense_utils${underscore-sixtyfour}.${soext}") + "${SDK_HYDRA}/lib/win32/release_dll/sixense.lib" + "${SDK_HYDRA}/lib/win32/release_dll/sixense_utils.lib") + install(FILES "${SDK_HYDRA}/bin/win32/release_dll/sixense.dll" "${SDK_HYDRA}/bin/win32/release_dll/sixense_utils.dll" DESTINATION .) + else() + if(SDK_HYDRA_AMD64) + set(underscore-sixtyfour _x64) + else() + set(underscore-sixtyfour) + endif() + if(APPLE) + set(underscore-dll _dll) + set(soext dylib) + set(sixense-plat osx) + else() + set(underscore-dll) + set(soext so) + set(sixense-plat linux) + endif() + install(FILES + "${SDK_HYDRA}/lib/${sixense-plat}${underscore-sixtyfour}/release${underscore-dll}/libsixense${underscore-sixtyfour}.${soext}" + "${SDK_HYDRA}/lib/${sixense-plat}${underscore-sixtyfour}/release${underscore-dll}/libsixense_utils${underscore-sixtyfour}.${soext}" + DESTINATION .) + target_link_libraries(opentrack-tracker-hydra "${SDK_HYDRA}/lib/${sixense-plat}${underscore-sixtyfour}/release${underscore-dll}/libsixense${underscore-sixtyfour}.${soext}" "${SDK_HYDRA}/lib/${sixense-plat}${underscore-sixtyfour}/release${underscore-dll}/libsixense_utils${underscore-sixtyfour}.${soext}") endif() if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC) SET_TARGET_PROPERTIES(opentrack-tracker-hydra PROPERTIES LINK_FLAGS "-Wl,--version-script=${CMAKE_SOURCE_DIR}/facetracknoir/posix-version-script.txt") - else() - if(MSVC) - SET_TARGET_PROPERTIES(opentrack-tracker-hydra PROPERTIES LINK_FLAGS "/NODEFAULTLIB:libcmt.lib") - endif() - endif() + endif() endif() if(WIN32 AND NOT SDK_CONSOLE_DEBUG) diff --git a/ftnoir_tracker_hydra/ftnoir_tracker_hydra.h b/ftnoir_tracker_hydra/ftnoir_tracker_hydra.h index 19f2a685..2601ac55 100644 --- a/ftnoir_tracker_hydra/ftnoir_tracker_hydra.h +++ b/ftnoir_tracker_hydra/ftnoir_tracker_hydra.h @@ -15,9 +15,6 @@ public: bool GiveHeadPoseData(double *data); void loadSettings(); volatile bool should_quit; - void WaitForExit() { - return; - } protected: void run(); // qthread override run method diff --git a/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp b/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp index 1af99803..e94b9d03 100644 --- a/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp +++ b/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp @@ -11,43 +11,36 @@ using namespace OVR; Rift_Tracker::Rift_Tracker() { - pSensor.Clear(); - pHMD.Clear(); - pManager.Clear(); - bEnableRoll = true; - bEnablePitch = true; - bEnableYaw = true; - old_yaw = 0.0; + bEnableRoll = true; + bEnablePitch = true; + bEnableYaw = true; #if 0 - bEnableX = true; - bEnableY = true; - bEnableZ = true; + bEnableX = true; + bEnableY = true; + bEnableZ = true; #endif - isCalibrated = false; - should_quit = false; - for (int i = 0; i < 6; i++) - newHeadPose[i] = 0; + should_quit = false; } Rift_Tracker::~Rift_Tracker() { pSensor.Clear(); - pHMD.Clear(); - pManager.Clear(); - System::Destroy(); + pHMD.Clear(); + pManager.Clear(); + System::Destroy(); } /* void controller_manager_setup_callback( sixenseUtils::ControllerManager::setup_step step ) { - QMessageBox::warning(0,"OpenTrack Info", "controller manager callback",QMessageBox::Ok,QMessageBox::NoButton); - if( sixenseUtils::getTheControllerManager()->isMenuVisible() ) { - // Ask the controller manager what the next instruction string should be. - std::string controller_manager_text_string = sixenseUtils::getTheControllerManager()->getStepString(); - QMessageBox::warning(0,"OpenTrack Info", controller_manager_text_string.c_str(),QMessageBox::Ok,QMessageBox::NoButton); - // We could also load the supplied controllermanager textures using the filename: sixenseUtils::getTheControllerManager()->getTextureFileName(); + QMessageBox::warning(0,"OpenTrack Info", "controller manager callback",QMessageBox::Ok,QMessageBox::NoButton); + if( sixenseUtils::getTheControllerManager()->isMenuVisible() ) { + // Ask the controller manager what the next instruction string should be. + std::string controller_manager_text_string = sixenseUtils::getTheControllerManager()->getStepString(); + QMessageBox::warning(0,"OpenTrack Info", controller_manager_text_string.c_str(),QMessageBox::Ok,QMessageBox::NoButton); + // We could also load the supplied controllermanager textures using the filename: sixenseUtils::getTheControllerManager()->getTextureFileName(); - } + } }*/ void Rift_Tracker::StartTracker(QFrame* videoFrame) @@ -58,78 +51,64 @@ void Rift_Tracker::StartTracker(QFrame* videoFrame) // Startup the Oculus SDK device handling, use the first Rift sensor we find. // System::Init(Log::ConfigureDefaultLog(LogMask_All)); - pManager = *DeviceManager::Create(); - DeviceEnumerator<HMDDevice> enumerator = pManager->EnumerateDevices<HMDDevice>(); - if (enumerator.IsAvailable()) + auto ptr_manager = DeviceManager::Create(); + if (ptr_manager != nullptr) { - pHMD = *enumerator.CreateDevice(); - - pSensor = *pHMD->GetSensor(); + pManager = *ptr_manager; + DeviceEnumerator<HMDDevice> enumerator = pManager->EnumerateDevices<HMDDevice>(); + if (enumerator.IsAvailable()) + { + auto ptr_hmd = enumerator.CreateDevice(); + + if (ptr_hmd != nullptr) + { + pHMD = *ptr_hmd; + auto ptr_sensor = pHMD->GetSensor(); + if (ptr_sensor != 0) + pSensor = *ptr_sensor; + } - if (pSensor){ - SFusion.AttachToSensor(pSensor); - }else{ - QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to find Rift tracker",QMessageBox::Ok,QMessageBox::NoButton); + if (pSensor){ + SFusion.reset(new OVR::SensorFusion()); + SFusion->AttachToSensor(pSensor); + }else{ + QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to find Rift tracker",QMessageBox::Ok,QMessageBox::NoButton); + } + //isCalibrated = false; + //MagCal.BeginAutoCalibration(SFusion); } - isCalibrated = false; - MagCal.BeginAutoCalibration(SFusion); - } } bool Rift_Tracker::GiveHeadPoseData(double *data) { - if (pHMD.GetPtr() != NULL) { - - if (MagCal.IsAutoCalibrating()) - { - MagCal.UpdateAutoCalibration(SFusion); - if (MagCal.IsCalibrated()) - { - if(isCalibrated == false){ - //QMessageBox::warning(0,"OpenTrack Info", "Calibrated magnetic sensor",QMessageBox::Ok,QMessageBox::NoButton); - //fprintf(stderr,"magnetic calibration complete\n"); - isCalibrated = true; - } - //Vector3f mc = MagCal.GetMagCenter(); - //SetAdjustMessage("Magnetometer Calibration Complete\nCenter: %f %f %f",mc.x,mc.y,mc.z); - } - //SetAdjustMessage("Mag has been successfully calibrated"); - } - - Quatf hmdOrient = SFusion.GetOrientation(); - + if (SFusion != nullptr) { + Quatf hmdOrient = SFusion->GetOrientation(); + float newHeadPose[6]; + float yaw = 0.0f; float pitch = 0.0f; float roll = 0.0f; hmdOrient.GetEulerAngles<Axis_Y, Axis_X, Axis_Z>(&yaw, &pitch , &roll); -#ifdef OPENTRACK_RIFT_RECENTRE_SPRING - newHeadPose[Yaw] = newHeadPose[Yaw]*0.99999 + (yaw-old_yaw); - if(newHeadPose[Yaw]>0.02)newHeadPose[Yaw]-= 0.000005; - if(newHeadPose[Yaw]<-0.02)newHeadPose[Yaw]+= 0.000005; - old_yaw=yaw; -#else - newHeadPose[Yaw] = yaw; -#endif + newHeadPose[Yaw] = yaw; newHeadPose[Pitch] =pitch; newHeadPose[Roll] = roll; #if 0 - - newHeadPose[TX] = acd.controllers[0].pos[0]/50.0f; - newHeadPose[TY] = acd.controllers[0].pos[1]/50.0f; - newHeadPose[TZ] = acd.controllers[0].pos[2]/50.0f; - - //if (bEnableX) { + newHeadPose[TX] = acd.controllers[0].pos[0]/50.0f; + newHeadPose[TY] = acd.controllers[0].pos[1]/50.0f; + newHeadPose[TZ] = acd.controllers[0].pos[2]/50.0f; + + if (bEnableX) { data[TX] = newHeadPose[TX]; - //} - //if (bEnableY) { + } + if (bEnableY) { data[TY] = newHeadPose[TY]; - //} - //if (bEnableY) { + } + if (bEnableY) { data[TZ] = newHeadPose[TZ]; - //} + } #endif if (bEnableYaw) { data[Yaw] = newHeadPose[Yaw] * 57.295781f; @@ -141,7 +120,7 @@ bool Rift_Tracker::GiveHeadPoseData(double *data) data[Roll] = newHeadPose[Roll] * 57.295781f; } } - return pHMD.GetPtr() != NULL; + return pHMD.GetPtr() != NULL; } @@ -150,24 +129,24 @@ bool Rift_Tracker::GiveHeadPoseData(double *data) // void Rift_Tracker::loadSettings() { - qDebug() << "FTNoIR_Tracker::loadSettings says: Starting "; - QSettings settings("opentrack"); // Registry settings (in HK_USER) + qDebug() << "FTNoIR_Tracker::loadSettings says: Starting "; + QSettings settings("opentrack"); // Registry settings (in HK_USER) - QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/settings/default.ini" ).toString(); - QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file) + QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/settings/default.ini" ).toString(); + QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file) - qDebug() << "FTNoIR_Tracker::loadSettings says: iniFile = " << currentFile; + qDebug() << "FTNoIR_Tracker::loadSettings says: iniFile = " << currentFile; - iniFile.beginGroup ( "Rift" ); - bEnableRoll = iniFile.value ( "EnableRoll", 1 ).toBool(); - bEnablePitch = iniFile.value ( "EnablePitch", 1 ).toBool(); - bEnableYaw = iniFile.value ( "EnableYaw", 1 ).toBool(); + iniFile.beginGroup ( "Rift" ); + bEnableRoll = iniFile.value ( "EnableRoll", 1 ).toBool(); + bEnablePitch = iniFile.value ( "EnablePitch", 1 ).toBool(); + bEnableYaw = iniFile.value ( "EnableYaw", 1 ).toBool(); #if 0 - bEnableX = iniFile.value ( "EnableX", 1 ).toBool(); - bEnableY = iniFile.value ( "EnableY", 1 ).toBool(); - bEnableZ = iniFile.value ( "EnableZ", 1 ).toBool(); + bEnableX = iniFile.value ( "EnableX", 1 ).toBool(); + bEnableY = iniFile.value ( "EnableY", 1 ).toBool(); + bEnableZ = iniFile.value ( "EnableZ", 1 ).toBool(); #endif - iniFile.endGroup (); + iniFile.endGroup (); } diff --git a/ftnoir_tracker_rift/ftnoir_tracker_rift.h b/ftnoir_tracker_rift/ftnoir_tracker_rift.h index 579d7d34..34742d6c 100644 --- a/ftnoir_tracker_rift/ftnoir_tracker_rift.h +++ b/ftnoir_tracker_rift/ftnoir_tracker_rift.h @@ -6,18 +6,17 @@ #include <math.h> #include "facetracknoir/global-settings.h" #include "OVR.h" -#include "Util/Util_MagCalibration.h" +#include <memory> class Rift_Tracker : public ITracker { public: Rift_Tracker(); - ~Rift_Tracker(); + virtual ~Rift_Tracker(); void StartTracker( QFrame *videoframe ); bool GiveHeadPoseData(double *data); void loadSettings(); volatile bool should_quit; - void WaitForExit() {} protected: void run(); // qthread override run method @@ -26,12 +25,8 @@ private: OVR::Ptr<OVR::DeviceManager> pManager; OVR::Ptr<OVR::HMDDevice> pHMD; OVR::Ptr<OVR::SensorDevice> pSensor; - OVR::SensorFusion SFusion; + std::unique_ptr<OVR::SensorFusion> SFusion; // Magnetometer calibration and yaw correction - OVR::Util::MagCalibration MagCal; - bool isCalibrated; - double old_yaw; - double newHeadPose[6]; // Structure with new headpose bool bEnableRoll; bool bEnablePitch; bool bEnableYaw; |