summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--FTNoIR_Tracker_PT/FTNoIR_PT_Controls.ui833
-rw-r--r--FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp22
-rw-r--r--FTNoIR_Tracker_PT/ftnoir_tracker_pt.h5
-rw-r--r--FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.cpp22
-rw-r--r--FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h2
-rw-r--r--FTNoIR_Tracker_PT/ftnoir_tracker_pt_settings.cpp36
-rw-r--r--FTNoIR_Tracker_PT/ftnoir_tracker_pt_settings.h16
-rw-r--r--FTNoIR_Tracker_PT/point_tracker.cpp4
-rw-r--r--FTNoIR_Tracker_PT/point_tracker.h2
9 files changed, 597 insertions, 345 deletions
diff --git a/FTNoIR_Tracker_PT/FTNoIR_PT_Controls.ui b/FTNoIR_Tracker_PT/FTNoIR_PT_Controls.ui
index 20e16985..a2389f71 100644
--- a/FTNoIR_Tracker_PT/FTNoIR_PT_Controls.ui
+++ b/FTNoIR_Tracker_PT/FTNoIR_PT_Controls.ui
@@ -9,8 +9,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>393</width>
- <height>585</height>
+ <width>405</width>
+ <height>489</height>
</rect>
</property>
<property name="sizePolicy">
@@ -64,85 +64,57 @@
<item>
<widget class="QGroupBox" name="groupBox_6">
<property name="title">
- <string>TrackerThread</string>
+ <string>Tracker Thread</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_8">
- <item>
- <layout class="QFormLayout" name="formLayout_2">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="3">
+ <widget class="QCheckBox" name="videowidget_check">
+ <property name="toolTip">
+ <string>Whether to update the content of the VideoWidget</string>
</property>
- <item row="0" column="0">
- <widget class="QLabel" name="label_39">
- <property name="text">
- <string>Sleep time</string>
+ <property name="text">
+ <string>Show VideoWidget</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_39">
+ <property name="text">
+ <string>Sleep time</string>
+ </property>
+ <property name="buddy">
+ <cstring>sleep_spin</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout_11">
+ <item>
+ <widget class="QSpinBox" name="sleep_spin">
+ <property name="toolTip">
+ <string>Time the tracker thread sleeps after each processed frame</string>
</property>
- <property name="buddy">
- <cstring>sleep_spin</cstring>
+ <property name="suffix">
+ <string/>
+ </property>
+ <property name="maximum">
+ <number>9999</number>
</property>
</widget>
</item>
- <item row="0" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_11">
- <item>
- <widget class="QSpinBox" name="sleep_spin">
- <property name="toolTip">
- <string>Time the tracker thread sleeps after each processed frame</string>
- </property>
- <property name="suffix">
- <string/>
- </property>
- <property name="maximum">
- <number>9999</number>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_40">
- <property name="text">
- <string>ms</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_43">
+ <item>
+ <widget class="QLabel" name="label_40">
<property name="text">
- <string>Auto-reset time</string>
- </property>
- <property name="buddy">
- <cstring>reset_spin</cstring>
+ <string>ms</string>
</property>
</widget>
</item>
- <item row="1" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_12">
- <item>
- <widget class="QSpinBox" name="reset_spin">
- <property name="toolTip">
- <string>Time until automatic reset of tracker's internal state when no valid tracking result is found</string>
- </property>
- <property name="maximum">
- <number>9999</number>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_42">
- <property name="text">
- <string>ms</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
</layout>
</item>
- <item>
- <spacer name="horizontalSpacer_7">
+ <item row="0" column="2">
+ <spacer name="horizontalSpacer_11">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
@@ -154,32 +126,420 @@
</property>
</spacer>
</item>
- <item>
- <layout class="QFormLayout" name="formLayout_3">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_43">
+ <property name="text">
+ <string>Auto-reset time</string>
+ </property>
+ <property name="buddy">
+ <cstring>reset_spin</cstring>
</property>
- <item row="0" column="0">
- <widget class="QCheckBox" name="videowidget_check">
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout_12">
+ <item>
+ <widget class="QSpinBox" name="reset_spin">
<property name="toolTip">
- <string>Whether to update the content of the VideoWidget</string>
+ <string>Time until automatic reset of tracker's internal state when no valid tracking result is found</string>
+ </property>
+ <property name="maximum">
+ <number>9999</number>
</property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_42">
<property name="text">
- <string>Show VideoWidget</string>
+ <string>ms</string>
</property>
</widget>
</item>
</layout>
</item>
+ <item row="1" column="3">
+ <widget class="QCheckBox" name="dynpose_check">
+ <property name="toolTip">
+ <string/>
+ </property>
+ <property name="text">
+ <string>Dynamic Pose Resolution</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <spacer name="horizontalSpacer_7">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>85</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>Enable Axis</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_5">
+ <item>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>Roll:</string>
+ </property>
+ <property name="buddy">
+ <cstring>chkEnableRoll</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_9">
+ <property name="text">
+ <string>Pitch:</string>
+ </property>
+ <property name="buddy">
+ <cstring>chkEnablePitch</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_11">
+ <property name="text">
+ <string>Yaw:</string>
+ </property>
+ <property name="buddy">
+ <cstring>chkEnableYaw</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="chkEnableRoll">
+ <property name="maximumSize">
+ <size>
+ <width>20</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="layoutDirection">
+ <enum>Qt::LeftToRight</enum>
+ </property>
+ <property name="styleSheet">
+ <string notr="true"/>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="chkEnablePitch">
+ <property name="maximumSize">
+ <size>
+ <width>20</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="layoutDirection">
+ <enum>Qt::LeftToRight</enum>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QCheckBox" name="chkEnableYaw">
+ <property name="maximumSize">
+ <size>
+ <width>20</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="layoutDirection">
+ <enum>Qt::LeftToRight</enum>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="3">
+ <widget class="QLabel" name="label_14">
+ <property name="text">
+ <string>X:</string>
+ </property>
+ <property name="buddy">
+ <cstring>chkEnableX</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="4">
+ <widget class="QCheckBox" name="chkEnableX">
+ <property name="maximumSize">
+ <size>
+ <width>20</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="layoutDirection">
+ <enum>Qt::LeftToRight</enum>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="3">
+ <widget class="QLabel" name="label_15">
+ <property name="text">
+ <string>Y:</string>
+ </property>
+ <property name="buddy">
+ <cstring>chkEnableY</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="4">
+ <widget class="QCheckBox" name="chkEnableY">
+ <property name="maximumSize">
+ <size>
+ <width>20</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="layoutDirection">
+ <enum>Qt::LeftToRight</enum>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="3">
+ <widget class="QLabel" name="label_16">
+ <property name="text">
+ <string>Z:</string>
+ </property>
+ <property name="buddy">
+ <cstring>chkEnableZ</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="4">
+ <widget class="QCheckBox" name="chkEnableZ">
+ <property name="maximumSize">
+ <size>
+ <width>20</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="layoutDirection">
+ <enum>Qt::LeftToRight</enum>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Minimum</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="2">
+ <spacer name="horizontalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Minimum</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="2" column="2">
+ <spacer name="horizontalSpacer_8">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Minimum</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_11">
+ <property name="title">
+ <string>Status</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_8">
+ <item>
+ <layout class="QFormLayout" name="formLayout_2">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_65">
+ <property name="text">
+ <string>Camera Info:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="caminfo_label_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>120</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_17">
+ <property name="text">
+ <string>Extracted Points:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="pointinfo_label_2">
+ <property name="minimumSize">
+ <size>
+ <width>50</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
+ <layout class="QHBoxLayout" name="horizontalLayout_10">
+ <item>
+ <widget class="QPushButton" name="center_button">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip">
+ <string>Center the tracker</string>
+ </property>
+ <property name="text">
+ <string>Center</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="reset_button">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip">
+ <string>Reset the tracker's internal state</string>
+ </property>
+ <property name="text">
+ <string>Reset</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_2">
+ <attribute name="title">
+ <string>Camera</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_7">
+ <item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
- <string>Camera</string>
+ <string>Camera Settings</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -325,6 +685,53 @@
</item>
</layout>
</item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_6">
+ <item>
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>Camera Pitch (upwards = positive)</string>
+ </property>
+ <property name="buddy">
+ <cstring>campitch_spin</cstring>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="campitch_spin">
+ <property name="contextMenuPolicy">
+ <enum>Qt::DefaultContextMenu</enum>
+ </property>
+ <property name="toolTip">
+ <string>The angle the camera is facing upwards</string>
+ </property>
+ <property name="minimum">
+ <number>-99</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>deg</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_10">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
</layout>
</widget>
</item>
@@ -433,196 +840,14 @@
</widget>
</item>
<item>
- <widget class="QGroupBox" name="groupBox_3">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>85</height>
- </size>
- </property>
- <property name="title">
- <string>Enable Axis</string>
- </property>
- <widget class="QWidget" name="layoutWidget">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>20</y>
- <width>143</width>
- <height>60</height>
- </rect>
- </property>
- <layout class="QGridLayout" name="gridLayout_2">
- <item row="0" column="0">
- <widget class="QLabel" name="label_6">
- <property name="text">
- <string>Roll:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_9">
- <property name="text">
- <string>Pitch:</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_11">
- <property name="text">
- <string>Yaw:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QCheckBox" name="chkEnableRoll">
- <property name="maximumSize">
- <size>
- <width>20</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="layoutDirection">
- <enum>Qt::LeftToRight</enum>
- </property>
- <property name="styleSheet">
- <string notr="true"/>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QCheckBox" name="chkEnablePitch">
- <property name="maximumSize">
- <size>
- <width>20</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="layoutDirection">
- <enum>Qt::LeftToRight</enum>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QCheckBox" name="chkEnableYaw">
- <property name="maximumSize">
- <size>
- <width>20</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="layoutDirection">
- <enum>Qt::LeftToRight</enum>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item row="0" column="3">
- <widget class="QLabel" name="label_14">
- <property name="text">
- <string>X:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="4">
- <widget class="QCheckBox" name="chkEnableX">
- <property name="maximumSize">
- <size>
- <width>20</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="layoutDirection">
- <enum>Qt::LeftToRight</enum>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item row="1" column="3">
- <widget class="QLabel" name="label_15">
- <property name="text">
- <string>Y:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="4">
- <widget class="QCheckBox" name="chkEnableY">
- <property name="maximumSize">
- <size>
- <width>20</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="layoutDirection">
- <enum>Qt::LeftToRight</enum>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item row="2" column="3">
- <widget class="QLabel" name="label_16">
- <property name="text">
- <string>Z:</string>
- </property>
- </widget>
- </item>
- <item row="2" column="4">
- <widget class="QCheckBox" name="chkEnableZ">
- <property name="maximumSize">
- <size>
- <width>20</width>
- <height>16777215</height>
- </size>
- </property>
- <property name="layoutDirection">
- <enum>Qt::LeftToRight</enum>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Minimum</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer">
+ <spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>20</height>
+ <height>40</height>
</size>
</property>
</spacer>
@@ -689,36 +914,6 @@
</layout>
</widget>
</item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_10">
- <item>
- <widget class="QPushButton" name="center_button">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="toolTip">
- <string>Center the tracker</string>
- </property>
- <property name="text">
- <string>Center</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="reset_button">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="toolTip">
- <string>Reset the tracker's internal state</string>
- </property>
- <property name="text">
- <string>Reset</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
</layout>
</widget>
<widget class="QWidget" name="tab_4">
@@ -732,7 +927,7 @@
<enum>QTabWidget::Rounded</enum>
</property>
<property name="currentIndex">
- <number>0</number>
+ <number>2</number>
</property>
<property name="usesScrollButtons">
<bool>false</bool>
@@ -1343,7 +1538,7 @@
</item>
<item>
<layout class="QGridLayout" name="gridLayout_6">
- <item row="3" column="2">
+ <item row="3" column="1">
<widget class="QSpinBox" name="tz_spin">
<property name="suffix">
<string/>
@@ -1356,28 +1551,28 @@
</property>
</widget>
</item>
- <item row="1" column="1">
+ <item row="1" column="0">
<widget class="QLabel" name="label_61">
<property name="text">
<string>x:</string>
</property>
</widget>
</item>
- <item row="2" column="1">
+ <item row="2" column="0">
<widget class="QLabel" name="label_62">
<property name="text">
<string>y:</string>
</property>
</widget>
</item>
- <item row="3" column="1">
+ <item row="3" column="0">
<widget class="QLabel" name="label_66">
<property name="text">
<string>z:</string>
</property>
</widget>
</item>
- <item row="2" column="2">
+ <item row="2" column="1">
<widget class="QSpinBox" name="ty_spin">
<property name="minimum">
<number>-999</number>
@@ -1387,7 +1582,7 @@
</property>
</widget>
</item>
- <item row="1" column="2">
+ <item row="1" column="1">
<widget class="QSpinBox" name="tx_spin">
<property name="minimum">
<number>-999</number>
@@ -1397,13 +1592,6 @@
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_72">
- <property name="text">
- <string>T:</string>
- </property>
- </widget>
- </item>
</layout>
</item>
<item>
@@ -1526,21 +1714,27 @@
</widget>
<tabstops>
<tabstop>tabWidget</tabstop>
- <tabstop>ok_button</tabstop>
- <tabstop>cancel_button</tabstop>
<tabstop>sleep_spin</tabstop>
- <tabstop>reset_spin</tabstop>
<tabstop>videowidget_check</tabstop>
+ <tabstop>reset_spin</tabstop>
+ <tabstop>dynpose_check</tabstop>
+ <tabstop>chkEnableRoll</tabstop>
+ <tabstop>chkEnablePitch</tabstop>
+ <tabstop>chkEnableYaw</tabstop>
+ <tabstop>chkEnableX</tabstop>
+ <tabstop>chkEnableY</tabstop>
+ <tabstop>chkEnableZ</tabstop>
+ <tabstop>center_button</tabstop>
+ <tabstop>reset_button</tabstop>
<tabstop>camindex_spin</tabstop>
<tabstop>res_x_spin</tabstop>
<tabstop>res_y_spin</tabstop>
<tabstop>fps_spin</tabstop>
<tabstop>f_dspin</tabstop>
+ <tabstop>campitch_spin</tabstop>
<tabstop>threshold_slider</tabstop>
<tabstop>mindiam_spin</tabstop>
<tabstop>maxdiam_spin</tabstop>
- <tabstop>center_button</tabstop>
- <tabstop>reset_button</tabstop>
<tabstop>model_tabs</tabstop>
<tabstop>clip_tlength_spin</tabstop>
<tabstop>clip_theight_spin</tabstop>
@@ -1559,11 +1753,30 @@
<tabstop>ty_spin</tabstop>
<tabstop>tz_spin</tabstop>
<tabstop>tcalib_button</tabstop>
+ <tabstop>ok_button</tabstop>
+ <tabstop>cancel_button</tabstop>
</tabstops>
<resources>
<include location="ftnoir_tracker_pt.qrc"/>
</resources>
- <connections/>
+ <connections>
+ <connection>
+ <sender>dynpose_check</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>reset_spin</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>285</x>
+ <y>105</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>139</x>
+ <y>111</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
<slots>
<slot>startEngineClicked()</slot>
<slot>stopEngineClicked()</slot>
diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp
index 412d35d4..e9394eff 100644
--- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp
+++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp
@@ -20,7 +20,7 @@ using namespace boost;
//-----------------------------------------------------------------------------
Tracker::Tracker()
- : frame_count(0), commands(0), video_widget(NULL)
+ : frame_count(0), commands(0), video_widget(NULL), tracking_valid(false)
{
qDebug()<<"Tracker::Tracker";
TrackerSettings settings;
@@ -79,7 +79,7 @@ void Tracker::run()
if (new_frame && !frame.empty())
{
const std::vector<cv::Vec2f>& points = point_extractor.extract_points(frame, dt, draw_frame);
- point_tracker.track(points, camera.get_info().f, dt);
+ tracking_valid = point_tracker.track(points, camera.get_info().f, dt);
frame_count++;
}
#ifdef PT_PERF_LOG
@@ -106,9 +106,11 @@ void Tracker::apply(const TrackerSettings& settings)
point_extractor.min_size = settings.min_point_size;
point_extractor.max_size = settings.max_point_size;
point_tracker.point_model = boost::shared_ptr<PointModel>(new PointModel(settings.M01, settings.M02));
+ point_tracker.dynamic_pose_resolution = settings.dyn_pose_res;
sleep_time = settings.sleep_time;
point_tracker.dt_reset = settings.reset_time / 1000.0;
draw_frame = settings.video_widget;
+ cam_pitch = settings.cam_pitch;
bEnableRoll = settings.bEnableRoll;
bEnablePitch = settings.bEnablePitch;
@@ -188,9 +190,12 @@ void Tracker::StopTracker(bool exit)
bool Tracker::GiveHeadPoseData(THeadPoseData *data)
{
const float rad2deg = 180.0/3.14159265;
+ const float deg2rad = 1.0/rad2deg;
{
QMutexLocker lock(&mutex);
+ if (!tracking_valid) return false;
+
FrameTrafo X_CM = point_tracker.get_pose();
FrameTrafo X_MH(Matx33f::eye(), t_MH);
FrameTrafo X_CH = X_CM * X_MH;
@@ -202,13 +207,18 @@ bool Tracker::GiveHeadPoseData(THeadPoseData *data)
if (bEnableX) {
data->x = t[0] / 10.0; // convert to cm
}
-
if (bEnableY) {
data->y = t[1] / 10.0;
}
if (bEnableZ) {
data->z = t[2] / 10.0;
}
+
+ // correct for camera pitch
+ Matx33f R_CP( 1, 0, 0,
+ 0, cos(deg2rad*cam_pitch), sin(deg2rad*cam_pitch),
+ 0, -sin(deg2rad*cam_pitch), cos(deg2rad*cam_pitch));
+ R = R_CP * R * R_CP.t();
// translate rotation matrix from opengl (G) to roll-pitch-yaw (R) frame
// -z -> x, y -> z, x -> -y
@@ -225,13 +235,13 @@ bool Tracker::GiveHeadPoseData(THeadPoseData *data)
gamma = atan2( R(2,1), R(2,2));
if (bEnableYaw) {
- data->yaw = rad2deg * alpha;
+ data->yaw = rad2deg * alpha;
}
if (bEnablePitch) {
- data->pitch = -rad2deg * beta; // this is what ftnoir expects?
+ data->pitch = rad2deg * beta;
}
if (bEnableRoll) {
- data->roll = rad2deg * gamma;
+ data->roll = rad2deg * gamma;
}
}
return true;
diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h
index c381b807..2533a39b 100644
--- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h
+++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h
@@ -62,9 +62,14 @@ protected:
VICamera camera;
PointExtractor point_extractor;
PointTracker point_tracker;
+ bool tracking_valid;
+
cv::Vec3f t_MH;
+ int cam_pitch;
+
bool draw_frame;
int sleep_time;
+
bool bEnableRoll;
bool bEnablePitch;
bool bEnableYaw;
diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.cpp b/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.cpp
index f3daae0c..83c04305 100644
--- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.cpp
+++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.cpp
@@ -24,6 +24,7 @@ TrackerDialog::TrackerDialog()
// initialize ui values
ui.videowidget_check->setChecked(settings.video_widget);
+ ui.dynpose_check->setChecked(settings.dyn_pose_res);
ui.sleep_spin->setValue(settings.sleep_time);
ui.reset_spin->setValue(settings.reset_time);
ui.camindex_spin->setValue(settings.cam_index);
@@ -31,6 +32,7 @@ TrackerDialog::TrackerDialog()
ui.res_x_spin->setValue(settings.cam_res_x);
ui.res_y_spin->setValue(settings.cam_res_y);
ui.fps_spin->setValue(settings.cam_fps);
+ ui.campitch_spin->setValue(settings.cam_pitch);
ui.threshold_slider->setValue(settings.threshold);
ui.chkEnableRoll->setChecked(settings.bEnableRoll);
@@ -62,6 +64,7 @@ TrackerDialog::TrackerDialog()
// connect Qt signals and slots
connect( ui.videowidget_check,SIGNAL(toggled(bool)), this,SLOT(set_video_widget(bool)) );
+ connect( ui.dynpose_check,SIGNAL(toggled(bool)), this,SLOT(set_dyn_pose_res(bool)) );
connect( ui.sleep_spin,SIGNAL(valueChanged(int)), this,SLOT(set_sleep_time(int)) );
connect( ui.reset_spin,SIGNAL(valueChanged(int)), this,SLOT(set_reset_time(int)) );
connect( ui.camindex_spin,SIGNAL(valueChanged(int)), this,SLOT(set_cam_index(int)) );
@@ -69,6 +72,7 @@ TrackerDialog::TrackerDialog()
connect( ui.res_x_spin,SIGNAL(valueChanged(int)), this,SLOT(set_cam_res_x(int)) );
connect( ui.res_y_spin,SIGNAL(valueChanged(int)), this,SLOT(set_cam_res_y(int)) );
connect( ui.fps_spin,SIGNAL(valueChanged(int)), this,SLOT(set_cam_fps(int)) );
+ connect( ui.campitch_spin,SIGNAL(valueChanged(int)), this,SLOT(set_cam_pitch(int)) );
connect( ui.threshold_slider,SIGNAL(sliderMoved(int)), this,SLOT(set_threshold(int)) );
connect( ui.chkEnableRoll,SIGNAL(toggled(bool)), this,SLOT(set_ena_roll(bool)) );
@@ -259,28 +263,36 @@ void TrackerDialog::doCancel()
void TrackerDialog::poll_tracker_info()
{
if (tracker)
- {
+ {
+ QString to_print;
+
// display caminfo
CamInfo info;
tracker->get_cam_info(&info);
- ui.caminfo_label->setText(QString::number(info.res_x)+"x"+QString::number(info.res_y)+" @ "+QString::number(info.fps)+" FPS");
+ to_print = QString::number(info.res_x)+"x"+QString::number(info.res_y)+" @ "+QString::number(info.fps)+" FPS";
+ ui.caminfo_label->setText(to_print);
+ ui.caminfo_label_2->setText(to_print);
// display pointinfo
int n_points = tracker->get_n_points();
- QString to_print = QString::number(n_points);
+ to_print = QString::number(n_points);
if (n_points == 3)
to_print += " OK!";
else
to_print += " BAD!";
ui.pointinfo_label->setText(to_print);
+ ui.pointinfo_label_2->setText(to_print);
// update calibration
if (trans_calib_running) trans_calib_step();
}
else
{
- ui.caminfo_label->setText("Tracker offline");
- ui.pointinfo_label->setText("Tracker offline");
+ QString to_print = "Tracker offline";
+ ui.caminfo_label->setText(to_print);
+ ui.caminfo_label_2->setText(to_print);
+ ui.pointinfo_label->setText(to_print);
+ ui.pointinfo_label_2->setText(to_print);
}
}
diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h b/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h
index 19404444..0f836dfe 100644
--- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h
+++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt_dialog.h
@@ -34,6 +34,7 @@ public:
protected slots:
// ugly qt stuff
void set_video_widget(bool val) { settings.video_widget = val; settings_changed(); }
+ void set_dyn_pose_res(bool val) { settings.dyn_pose_res = val; settings_changed(); }
void set_sleep_time(int val) { settings.sleep_time = val; settings_changed(); }
void set_reset_time(int val) { settings.reset_time = val; settings_changed(); }
void set_cam_index(int val) { settings.cam_index = val; settings_changed(); }
@@ -41,6 +42,7 @@ protected slots:
void set_cam_res_x(int val) { settings.cam_res_x = val; settings_changed(); }
void set_cam_res_y(int val) { settings.cam_res_y = val; settings_changed(); }
void set_cam_fps(int val) { settings.cam_fps = val; settings_changed(); }
+ void set_cam_pitch(int val) { settings.cam_pitch = val; settings_changed(); }
void set_min_point_size(int val) { settings.min_point_size = val; settings_changed(); }
void set_max_point_size(int val) { settings.max_point_size = val; settings_changed(); }
void set_threshold(int val) { settings.threshold = val; settings_changed(); }
diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt_settings.cpp b/FTNoIR_Tracker_PT/ftnoir_tracker_pt_settings.cpp
index 7c356694..40d1bc4f 100644
--- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt_settings.cpp
+++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt_settings.cpp
@@ -25,6 +25,7 @@ void TrackerSettings::load_ini()
cam_res_x = iniFile.value("CameraResX", 640).toInt();
cam_res_y = iniFile.value("CameraResY", 480).toInt();
cam_fps = iniFile.value("CameraFPS", 30).toInt();
+ cam_pitch = iniFile.value("CameraPitch", 0).toInt();
threshold = iniFile.value("PointExtractThreshold", 128).toInt();
min_point_size = iniFile.value("PointExtractMinSize", 2).toInt();
max_point_size = iniFile.value("PointExtractMaxSize", 50).toInt();
@@ -37,16 +38,17 @@ void TrackerSettings::load_ini()
t_MH[0] = iniFile.value("tMHx", 0).toFloat();
t_MH[1] = iniFile.value("tMHy", 0).toFloat();
t_MH[2] = iniFile.value("tMHz", 0).toFloat();
+ dyn_pose_res = iniFile.value("DynamicPoseResolution", true).toBool();
video_widget = iniFile.value("VideoWidget", true).toBool();
sleep_time = iniFile.value("SleepTime", 10).toInt();
reset_time = iniFile.value("ResetTime", 1000).toInt();
- bEnableRoll = iniFile.value ( "EnableRoll", 1 ).toBool();
- bEnablePitch = iniFile.value ( "EnablePitch", 1 ).toBool();
- bEnableYaw = iniFile.value ( "EnableYaw", 1 ).toBool();
- bEnableX = iniFile.value ( "EnableX", 1 ).toBool();
- bEnableY = iniFile.value ( "EnableY", 1 ).toBool();
- bEnableZ = iniFile.value ( "EnableZ", 1 ).toBool();
+ bEnableRoll = iniFile.value( "EnableRoll", 1 ).toBool();
+ bEnablePitch = iniFile.value( "EnablePitch", 1 ).toBool();
+ bEnableYaw = iniFile.value( "EnableYaw", 1 ).toBool();
+ bEnableX = iniFile.value( "EnableX", 1 ).toBool();
+ bEnableY = iniFile.value( "EnableY", 1 ).toBool();
+ bEnableZ = iniFile.value( "EnableZ", 1 ).toBool();
iniFile.endGroup();
}
@@ -62,10 +64,11 @@ void TrackerSettings::save_ini() const
iniFile.beginGroup ( "PointTracker" );
iniFile.setValue("CameraId", cam_index);
- iniFile.setValue("CameraF", cam_f);
- iniFile.setValue("CameraResX", cam_res_x);
- iniFile.setValue("CameraResY", cam_res_y);
- iniFile.setValue("CameraFPS", cam_fps);
+ iniFile.setValue("CameraF", cam_f);
+ iniFile.setValue("CameraResX", cam_res_x);
+ iniFile.setValue("CameraResY", cam_res_y);
+ iniFile.setValue("CameraFPS", cam_fps);
+ iniFile.setValue("CameraPitch", cam_pitch);
iniFile.setValue("PointExtractThreshold", threshold);
iniFile.setValue("PointExtractMinSize", min_point_size);
iniFile.setValue("PointExtractMaxSize", max_point_size);
@@ -78,16 +81,17 @@ void TrackerSettings::save_ini() const
iniFile.setValue("tMHx", t_MH[0]);
iniFile.setValue("tMHy", t_MH[1]);
iniFile.setValue("tMHz", t_MH[2]);
+ iniFile.setValue("DynamicPoseResolution", dyn_pose_res);
iniFile.setValue("VideoWidget", video_widget);
iniFile.setValue("SleepTime", sleep_time);
iniFile.setValue("ResetTime", reset_time);
- iniFile.setValue ( "EnableRoll", bEnableRoll );
- iniFile.setValue ( "EnablePitch", bEnablePitch );
- iniFile.setValue ( "EnableYaw", bEnableYaw );
- iniFile.setValue ( "EnableX", bEnableX );
- iniFile.setValue ( "EnableY", bEnableY );
- iniFile.setValue ( "EnableZ", bEnableZ );
+ iniFile.setValue( "EnableRoll", bEnableRoll );
+ iniFile.setValue( "EnablePitch", bEnablePitch );
+ iniFile.setValue( "EnableYaw", bEnableYaw );
+ iniFile.setValue( "EnableX", bEnableX );
+ iniFile.setValue( "EnableY", bEnableY );
+ iniFile.setValue( "EnableZ", bEnableZ );
iniFile.endGroup();
}
diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt_settings.h b/FTNoIR_Tracker_PT/ftnoir_tracker_pt_settings.h
index 16ee20f3..88162c86 100644
--- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt_settings.h
+++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt_settings.h
@@ -21,6 +21,7 @@ struct TrackerSettings
int cam_res_x;
int cam_res_y;
int cam_fps;
+ int cam_pitch;
// point extraction
int threshold;
@@ -30,13 +31,7 @@ struct TrackerSettings
// point tracking
cv::Vec3f M01;
cv::Vec3f M02;
-
- bool bEnableRoll;
- bool bEnablePitch;
- bool bEnableYaw;
- bool bEnableX;
- bool bEnableY;
- bool bEnableZ;
+ bool dyn_pose_res;
// head to model translation
cv::Vec3f t_MH;
@@ -45,6 +40,13 @@ struct TrackerSettings
int reset_time; // in ms
bool video_widget;
+ bool bEnableRoll;
+ bool bEnablePitch;
+ bool bEnableYaw;
+ bool bEnableX;
+ bool bEnableY;
+ bool bEnableZ;
+
void load_ini();
void save_ini() const;
};
diff --git a/FTNoIR_Tracker_PT/point_tracker.cpp b/FTNoIR_Tracker_PT/point_tracker.cpp
index 03914bb4..d617de19 100644
--- a/FTNoIR_Tracker_PT/point_tracker.cpp
+++ b/FTNoIR_Tracker_PT/point_tracker.cpp
@@ -87,7 +87,7 @@ void PointModel::get_d_order(const std::vector<cv::Vec2f>& points, int d_order[]
// ----------------------------------------------------------------------------
-PointTracker::PointTracker() : init_phase(true), dt_valid(0), dt_reset(1), v_t(0,0,0), v_r(0,0,0)
+PointTracker::PointTracker() : init_phase(true), dt_valid(0), dt_reset(1), v_t(0,0,0), v_r(0,0,0), dynamic_pose_resolution(true)
{
X_CM.t[2] = 1000; // default position: 1 m away from cam;
}
@@ -109,6 +109,8 @@ void PointTracker::reset_velocities()
bool PointTracker::track(const vector<Vec2f>& points, float f, float dt)
{
+ if (!dynamic_pose_resolution) init_phase = true;
+
dt_valid += dt;
// if there was no valid tracking result for too long, do a reset
if (dt_valid > dt_reset)
diff --git a/FTNoIR_Tracker_PT/point_tracker.h b/FTNoIR_Tracker_PT/point_tracker.h
index efd40424..21baad19 100644
--- a/FTNoIR_Tracker_PT/point_tracker.h
+++ b/FTNoIR_Tracker_PT/point_tracker.h
@@ -74,9 +74,11 @@ public:
// track the pose using the set of normalized point coordinates (x pos in range -0.5:0.5)
// f : (focal length)/(sensor width)
+ // dt : time since last call
bool track(const std::vector<cv::Vec2f>& points, float f, float dt);
boost::shared_ptr<PointModel> point_model;
+ bool dynamic_pose_resolution;
float dt_reset;
FrameTrafo get_pose() const { return X_CM; }