From 145117f8af44a35c40898b3b9345168063f4306a Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 26 Nov 2014 18:04:09 +0100 Subject: tracker: map before filtering --- opentrack/tracker.cpp | 79 +++++++++++++++++++++++++-------------------------- opentrack/tracker.h | 2 +- 2 files changed, 40 insertions(+), 41 deletions(-) diff --git a/opentrack/tracker.cpp b/opentrack/tracker.cpp index 07ea22b5..cba5137c 100644 --- a/opentrack/tracker.cpp +++ b/opentrack/tracker.cpp @@ -118,17 +118,6 @@ void Tracker::t_compensate(const dmat<3, 3>& rmat, const double* xyz, double* ou void Tracker::logic() { - if (enabledp) - for (int i = 0; i < 6; i++) - final_raw(i) = newpose[i]; - - Pose filtered_pose; - - if (libs.pFilter) - libs.pFilter->filter(final_raw, filtered_pose); - else - filtered_pose = final_raw; - bool inverts[6] = { m(0).opts.invert, m(1).opts.invert, @@ -137,66 +126,76 @@ void Tracker::logic() m(4).opts.invert, m(5).opts.invert, }; - - // must invert early as euler_to_rmat's sensitive to sign change - for (int i = 0; i < 6; i++) - filtered_pose[i] *= inverts[i] ? -1. : 1.; - - static constexpr double pi = 3.141592653; - static constexpr double r2d = 180. / pi; - + + Pose value, raw; + + if (enabledp) + for (int i = 0; i < 6; i++) + { + value(i) = newpose[i]; + raw(i) = newpose[i]; + } + if (centerp) { centerp = false; for (int i = 0; i < 3; i++) - t_b[i] = filtered_pose(i); - r_b = euler_to_rmat(&filtered_pose[Yaw]); + t_b[i] = value(i); + r_b = euler_to_rmat(&value[Yaw]); } - - Pose raw_centered; - + { - const dmat<3, 3> rmat = euler_to_rmat(&filtered_pose[Yaw]); + const dmat<3, 3> rmat = euler_to_rmat(&value[Yaw]); const dmat<3, 3> m_ = rmat * r_b.t(); const dmat<3, 1> euler = rmat_to_euler(m_); for (int i = 0; i < 3; i++) { - raw_centered(i) = filtered_pose(i) - t_b[i]; - raw_centered(i+3) = euler(i, 0) * r2d; + static constexpr double pi = 3.141592653; + static constexpr double r2d = 180. / pi; + + value(i) -= t_b[i]; + value(i+3) = euler(i, 0) * r2d; } } - Pose mapped_pose_precomp; - for (int i = 0; i < 6; i++) - mapped_pose_precomp(i) = map(raw_centered(i), inverts[i], m(i)); + value(i) = map(value(i), inverts[i], m(i)); + + { + Pose tmp = value; + + if (libs.pFilter) + libs.pFilter->filter(tmp, value); + } - Pose mapped_pose_ = mapped_pose_precomp; + // must invert early as euler_to_rmat's sensitive to sign change + for (int i = 0; i < 6; i++) + value[i] *= inverts[i] ? -1. : 1.; if (s.tcomp_p) - t_compensate(euler_to_rmat(&mapped_pose_precomp[Yaw]), - mapped_pose_precomp, - mapped_pose_, + t_compensate(euler_to_rmat(&value[Yaw]), + value, + value, s.tcomp_tz); - Pose mapped_pose; + Pose output_pose_; for (int i = 0; i < 6; i++) { auto& axis = m(i); int k = axis.opts.src; if (k < 0 || k >= 6) - mapped_pose(i) = 0; + output_pose_(i) = 0; else - mapped_pose(i) = mapped_pose_(i); + output_pose_(i) = value(i); } - libs.pProtocol->pose(mapped_pose); + libs.pProtocol->pose(output_pose_); QMutexLocker foo(&mtx); - output_pose = mapped_pose; - raw_6dof = final_raw; + output_pose = output_pose_; + raw_6dof = raw; } void Tracker::run() { diff --git a/opentrack/tracker.h b/opentrack/tracker.h index 23939576..84202635 100644 --- a/opentrack/tracker.h +++ b/opentrack/tracker.h @@ -24,7 +24,7 @@ private: Mappings& m; Timer t; - Pose output_pose, raw_6dof, final_raw; + Pose output_pose, raw_6dof; double newpose[6]; std::atomic centerp; -- cgit v1.2.3