summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authormm0zct <the_cartographer@hotmail.com>2013-10-21 21:30:14 +0100
committermm0zct <the_cartographer@hotmail.com>2013-10-21 21:30:14 +0100
commit6f51a22726266cc88cb061cab2c2bfead49ed4ef (patch)
treef594048c4d3596f6d5254c0fb454482a9500ca5d
parentbfcfdb8827507de1091d6b92081a78eb8e4df9da (diff)
parent5048961fa205ecebb2cea4f8d68d51dfbe993189 (diff)
Merge branch 'feature/libovr-0.2.5' of https://github.com/opentrack/opentrack into feature/tracker_hotkeys
-rw-r--r--CMakeLists.txt69
-rw-r--r--ftnoir_tracker_hydra/ftnoir_tracker_hydra.h3
-rw-r--r--ftnoir_tracker_rift/ftnoir_tracker_rift.cpp159
-rw-r--r--ftnoir_tracker_rift/ftnoir_tracker_rift.h11
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;