summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ftnoir_tracker_rift/ftnoir_rift_clientcontrols.ui110
-rw-r--r--ftnoir_tracker_rift/ftnoir_tracker_rift.cpp17
-rw-r--r--ftnoir_tracker_rift/ftnoir_tracker_rift.h3
-rw-r--r--ftnoir_tracker_rift/ftnoir_tracker_rift_dialog.cpp8
4 files changed, 118 insertions, 20 deletions
diff --git a/ftnoir_tracker_rift/ftnoir_rift_clientcontrols.ui b/ftnoir_tracker_rift/ftnoir_rift_clientcontrols.ui
index 9c3ec53a..38e745c9 100644
--- a/ftnoir_tracker_rift/ftnoir_rift_clientcontrols.ui
+++ b/ftnoir_tracker_rift/ftnoir_rift_clientcontrols.ui
@@ -9,10 +9,16 @@
<rect>
<x>0</x>
<y>0</y>
- <width>176</width>
- <height>145</height>
+ <width>195</width>
+ <height>265</height>
</rect>
</property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="windowTitle">
<string>Oculus Rift tracker settings FaceTrackNoIR</string>
</property>
@@ -26,21 +32,9 @@
<property name="autoFillBackground">
<bool>false</bool>
</property>
- <layout class="QFormLayout" name="formLayout">
- <item row="0" column="0" colspan="2">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
<widget class="QGroupBox" name="groupBox_3">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
<property name="title">
<string>Enable Axis</string>
</property>
@@ -159,7 +153,89 @@
</layout>
</widget>
</item>
- <item row="1" column="1">
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Yaw spring</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <item row="0" column="0">
+ <widget class="QCheckBox" name="yawSpring">
+ <property name="text">
+ <string>Enable</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Persistence</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QDoubleSpinBox" name="persistence">
+ <property name="decimals">
+ <number>5</number>
+ </property>
+ <property name="minimum">
+ <double>0.900000000000000</double>
+ </property>
+ <property name="maximum">
+ <double>1.000000000000000</double>
+ </property>
+ <property name="singleStep">
+ <double>0.001000000000000</double>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Constant drift</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QDoubleSpinBox" name="constantDrift">
+ <property name="decimals">
+ <number>5</number>
+ </property>
+ <property name="minimum">
+ <double>0.000100000000000</double>
+ </property>
+ <property name="maximum">
+ <double>0.100000000000000</double>
+ </property>
+ <property name="singleStep">
+ <double>0.001000000000000</double>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Deadzone</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QDoubleSpinBox" name="deadzone">
+ <property name="decimals">
+ <number>5</number>
+ </property>
+ <property name="maximum">
+ <double>0.100000000000000</double>
+ </property>
+ <property name="singleStep">
+ <double>0.010000000000000</double>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
diff --git a/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp b/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp
index 7d567ca3..dc0892fe 100644
--- a/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp
+++ b/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp
@@ -21,6 +21,7 @@ Rift_Tracker::Rift_Tracker()
pHMD = NULL;
pSensor = NULL;
pSFusion = NULL;
+ old_yaw = 0;
}
Rift_Tracker::~Rift_Tracker()
@@ -87,9 +88,17 @@ bool Rift_Tracker::GiveHeadPoseData(double *data)
float pitch = 0.0f;
float roll = 0.0f;
hmdOrient.GetEulerAngles<Axis_Y, Axis_X, Axis_Z>(&yaw, &pitch , &roll);
- newHeadPose[Yaw] = yaw;
- newHeadPose[Pitch] =pitch;
+ newHeadPose[Pitch] = pitch;
newHeadPose[Roll] = roll;
+ newHeadPose[Yaw] = yaw;
+ if (useYawSpring)
+ {
+ newHeadPose[Yaw] = newHeadPose[Yaw]*persistence + (yaw-old_yaw);
+ if(newHeadPose[Yaw]>deadzone)newHeadPose[Yaw]-= constant_drift;
+ if(newHeadPose[Yaw]<-deadzone)newHeadPose[Yaw]+= constant_drift;
+ old_yaw=yaw;
+ }
+ else
#if 0
newHeadPose[TX] = acd.controllers[0].pos[0]/50.0f;
@@ -142,6 +151,10 @@ void Rift_Tracker::loadSettings() {
bEnableY = iniFile.value ( "EnableY", 1 ).toBool();
bEnableZ = iniFile.value ( "EnableZ", 1 ).toBool();
#endif
+ useYawSpring = iniFile.value("yaw-spring", false).toBool();
+ constant_drift = iniFile.value("constant-drift", 0.000005).toDouble();
+ persistence = iniFile.value("persistence", 0.99999).toDouble();
+ deadzone = iniFile.value("deadzone", 0.02).toDouble();
iniFile.endGroup ();
}
diff --git a/ftnoir_tracker_rift/ftnoir_tracker_rift.h b/ftnoir_tracker_rift/ftnoir_tracker_rift.h
index 55fa99e3..bd295838 100644
--- a/ftnoir_tracker_rift/ftnoir_tracker_rift.h
+++ b/ftnoir_tracker_rift/ftnoir_tracker_rift.h
@@ -35,7 +35,8 @@ private:
bool bEnableY;
bool bEnableZ;
#endif
-
+ bool useYawSpring;
+ double old_yaw, constant_drift, persistence, deadzone;
};
// Widget that has controls for FTNoIR protocol client-settings.
diff --git a/ftnoir_tracker_rift/ftnoir_tracker_rift_dialog.cpp b/ftnoir_tracker_rift/ftnoir_tracker_rift_dialog.cpp
index 6b1a559d..2efefbb3 100644
--- a/ftnoir_tracker_rift/ftnoir_tracker_rift_dialog.cpp
+++ b/ftnoir_tracker_rift/ftnoir_tracker_rift_dialog.cpp
@@ -117,6 +117,10 @@ void TrackerControls::loadSettings() {
ui.chkEnableY->setChecked(iniFile.value ( "EnableY", 1 ).toBool());
ui.chkEnableZ->setChecked(iniFile.value ( "EnableZ", 1 ).toBool());
#endif
+ ui.yawSpring->setChecked(iniFile.value("yaw-spring", true).toBool());
+ ui.deadzone->setValue(iniFile.value("deadzone", 0.02).toDouble());
+ ui.constantDrift->setValue(iniFile.value("constant-drift", 0.000005).toDouble());
+ ui.persistence->setValue(iniFile.value("persistence", 0.9999).toDouble());
iniFile.endGroup ();
settingsDirty = false;
@@ -140,6 +144,10 @@ void TrackerControls::save() {
iniFile.setValue ( "EnableY", ui.chkEnableY->isChecked() );
iniFile.setValue ( "EnableZ", ui.chkEnableZ->isChecked() );
#endif
+ iniFile.setValue("yaw-spring", ui.yawSpring->isChecked());
+ iniFile.setValue("deadzone", ui.deadzone->value());
+ iniFile.setValue("constant-drift", ui.constantDrift->value());
+ iniFile.setValue("persistence", ui.persistence->value());
iniFile.endGroup ();
settingsDirty = false;