diff options
author | Donovan Baarda <abo@minkirri.apana.org.au> | 2014-10-15 14:07:20 +1100 |
---|---|---|
committer | Donovan Baarda <abo@minkirri.apana.org.au> | 2014-10-15 14:07:20 +1100 |
commit | dbd04e283082ab869a22abf03c4c6280b03935bb (patch) | |
tree | 3951c6f91f76047e655f35e04db4eecd576c49df /facetracknoir/pose.hpp | |
parent | d880464fbe9180aefde94594330126e115066dc3 (diff) | |
parent | 051a2e4392bc75b246cc5cb897ae0bbb1f92042e (diff) |
Merge branch 'unstable' of https://github.com/opentrack/opentrack into dev/kalman
Conflicts:
ftnoir_filter_kalman/ftnoir_filter_kalman.h
Diffstat (limited to 'facetracknoir/pose.hpp')
-rw-r--r-- | facetracknoir/pose.hpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/facetracknoir/pose.hpp b/facetracknoir/pose.hpp new file mode 100644 index 00000000..41e984f5 --- /dev/null +++ b/facetracknoir/pose.hpp @@ -0,0 +1,44 @@ +#pragma once + +#include <utility> +#include <algorithm> +#include "./quat.hpp" +#include "./plugin-api.hpp" + +class Pose { +private: + static constexpr double pi = 3.141592653; + static constexpr double d2r = pi/180.0; + static constexpr double r2d = 180./pi; + + double axes[6]; +public: + Pose() : axes {0,0,0, 0,0,0 } {} + + inline operator double*() { return axes; } + inline operator const double*() const { return axes; } + + inline double& operator()(int i) { return axes[i]; } + inline double operator()(int i) const { return axes[i]; } + + Quat quat() const + { + return Quat(axes[Yaw]*d2r, axes[Pitch]*d2r, axes[Roll]*d2r); + } + + static Pose fromQuat(const Quat& q) + { + Pose ret; + q.to_euler_degrees(ret(Yaw), ret(Pitch), ret(Roll)); + return ret; + } + + Pose operator&(const Pose& B) const + { + const Quat q = quat() * B.quat().inv(); + Pose ret = fromQuat(q); + for (int i = TX; i < TX + 3; i++) + ret(i) = axes[i] - B.axes[i]; + return ret; + } +}; |