summaryrefslogtreecommitdiffhomepage
path: root/opentrack/tracker.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2015-09-30 16:21:41 +0200
committerStanislaw Halik <sthalik@misaki.pl>2015-09-30 16:22:00 +0200
commitac4dc94acc5d1e1d8fd4867730b835e2aa1fcc89 (patch)
tree8ca3dc84958e572e3f890ac3f56dfda670c63f60 /opentrack/tracker.cpp
parent03a164ed74d616e8d5203142ec7e9738c8aae547 (diff)
parenteb7703b4ecea5540a4c4a65faa1ff4c53fe97631 (diff)
Merge branch 'unstable' into trackhat-ui
Sponsored-by: TrackHat * unstable: (112 commits) Revert "accela: try more complex deadzone algorithm" pt: add wiki link for calibration instructions qfc: more gray colors when graph is disabled qfc, mapping: disallow editing and change color when checkbox disabled qfc: don't allow editing when disabled plugin-support: workaround multiple copies of modules accela: change translation gain accela: change rotation gain pt: change extraction code freepie-udp: add license freepie-udp: update accela: try more complex deadzone algorithm accela: add helpful comment accela: revert to more quadratic spline at start also save if save pending when start tracking ui: force saving if saving timer is pending accela: slightly more linear function pose-widget: simplify freepie-udp: nix harmless warning pose-widget: add comment simple-mat: add __restrict for GNU ui: save settings on a timer ui: show a warning if configuration directory can't be used aruco: tune min/max marker size win32-joystick: fix duplicate device name selection logic ui: no need to reset settings on tracking start ui: save profile when combobox text changes, not merely index ui: save current tracker/filter/proto, not last win32-joystick: fix COM failure path win32-joystick: nix unused variable win32-joystick: allow for unique selection of joysticks qfc: also draw line from function start while moving no need to save on tracking start anymore save axis opts, not just spline control points tracker: change centering order again fix typo cmake: don't say "opentrack" twice for osx build ui: really don't switch profiles while refreshing combobox pt: fix type mismatch ui: save prior to switching configs tracker_rs: adjusted tracker's name ui: don't reload settings if config wasn't changed ui: save everything before switching profiles options: return .ini basename easier tracker_rs: more readable icon tracker_rs: prevent potential thread starvation ui: switch to newly-created config ui: decruft ui: also bail on new config if its name is ".ini" ui: auto-refresh config list ui: display up to 20 profiles w/o scrolling ui: create an empty config properly in another code branch udp-tracker: silence harmless warning plugin-support: fix typo plugin-support: set more sane RTLD flags plugin-support: free modules from address space when needed ui: rename symbol to reflect current usage ui: move some slots to private ui, shortcuts: these are slots, actually ui: no need to write anything to new empty config ui: avoid potential memory leak ft: new game support game-data: chomp newlines in extractor ui: append extension in the right place simple-mat: fix arglist SFINAE simple-mat: can use static_cast here nix default empty config. it gets created on its own. ui: these aren't qt slots ui: nix wrong headers ui: remove GNU GPL ui: simplify condition props changed only main, ui: store config files in a predefined directory pt: show extracted points' areas and success count close dialogs on switch to new module ...
Diffstat (limited to 'opentrack/tracker.cpp')
-rw-r--r--opentrack/tracker.cpp52
1 files changed, 20 insertions, 32 deletions
diff --git a/opentrack/tracker.cpp b/opentrack/tracker.cpp
index e9d85f5d..58e911bf 100644
--- a/opentrack/tracker.cpp
+++ b/opentrack/tracker.cpp
@@ -52,14 +52,14 @@ double Tracker::map(double pos, Mapping& axis)
void Tracker::t_compensate(const rmat& rmat, const double* xyz, double* output, bool rz)
{
// TY is really yaw axis. need swapping accordingly.
- dmat<3, 1> tvec({ xyz[2], -xyz[0], -xyz[1] });
+ dmat<3, 1> tvec( xyz[2], -xyz[0], -xyz[1] );
const dmat<3, 1> ret = rmat * tvec;
if (!rz)
- output[2] = ret(0, 0);
+ output[2] = ret(0);
else
output[2] = xyz[2];
- output[1] = -ret(2, 0);
- output[0] = -ret(1, 0);
+ output[1] = -ret(2);
+ output[0] = -ret(1);
}
void Tracker::logic()
@@ -81,7 +81,12 @@ void Tracker::logic()
if (!zero_)
for (int i = 0; i < 6; i++)
{
- value(i) = newpose[i];
+ auto& axis = m(i);
+ int k = axis.opts.src;
+ if (k < 0 || k >= 6)
+ value(i) = 0;
+ else
+ value(i) = newpose[k];
raw(i) = newpose[i];
}
else
@@ -90,7 +95,7 @@ void Tracker::logic()
for (int i = 0; i < 3; i++)
{
- raw(i+3) = value(i+3) = mat(i, 0) * r2d;
+ raw(i+3) = value(i+3) = mat(i) * r2d;
raw(i) = value(i) = t_b[i];
}
}
@@ -102,7 +107,7 @@ void Tracker::logic()
};
const rmat cam = rmat::euler_to_rmat(off);
rmat r = rmat::euler_to_rmat(&value[Yaw]);
- dmat<3, 1> t { value(0), value(1), value(2) };
+ dmat<3, 1> t(value(0), value(1), value(2));
r = cam * r;
@@ -122,19 +127,19 @@ void Tracker::logic()
{
centerp = false;
for (int i = 0; i < 3; i++)
- t_b[i] = t(i, 0);
+ t_b[i] = t(i);
r_b = r;
}
{
- double tmp[3] = { t(0, 0) - t_b[0], t(1, 0) - t_b[1], t(2, 0) - t_b[2] };
+ double tmp[3] = { t(0) - t_b[0], t(1) - t_b[1], t(2) - t_b[2] };
t_compensate(cam, tmp, tmp, false);
- const rmat m_ = r_b.t() * r;
+ const rmat m_ = r * r_b.t();
const dmat<3, 1> euler = rmat::rmat_to_euler(m_);
for (int i = 0; i < 3; i++)
{
value(i) = tmp[i];
- value(i+3) = euler(i, 0) * r2d;
+ value(i+3) = euler(i) * r2d;
}
}
@@ -144,7 +149,7 @@ void Tracker::logic()
if (libs.pFilter)
libs.pFilter->filter(tmp, value);
}
-
+
for (int i = 0; i < 6; i++)
value(i) = map(value(i), m(i));
@@ -153,27 +158,14 @@ void Tracker::logic()
value,
value,
s.tcomp_tz);
-
- for (int i = 0; i < 6; i++)
- value[i] *= inverts[i] ? -1. : 1.;
-
- Pose output_pose_;
for (int i = 0; i < 6; i++)
- {
- auto& axis = m(i);
- int k = axis.opts.src;
- if (k < 0 || k >= 6)
- output_pose_(i) = 0;
- else
- output_pose_(i) = value(k);
- }
-
+ value[i] *= inverts[i] ? -1. : 1.;
- libs.pProtocol->pose(output_pose_);
+ libs.pProtocol->pose(value);
QMutexLocker foo(&mtx);
- output_pose = output_pose_;
+ output_pose = value;
raw_6dof = raw;
}
@@ -202,10 +194,6 @@ void Tracker::run() {
}
{
- // do one last pass with origin pose
- for (int i = 0; i < 6; i++)
- newpose[i] = 0;
- logic();
// filter may inhibit exact origin
Pose p;
libs.pProtocol->pose(p);