Convert between sensor framework and head tracking frames
We use different frame conventions in the head tracking library and we
forgot to do the conversion.
Test: Manual inspection of logs while running head tracking.
Bug: 188502620
Change-Id: Icc750d581bbe269c81a2972b4fe2e11cde040ddf
diff --git a/media/libheadtracking/SensorPoseProvider.cpp b/media/libheadtracking/SensorPoseProvider.cpp
index da1d8cb..cfa23d0 100644
--- a/media/libheadtracking/SensorPoseProvider.cpp
+++ b/media/libheadtracking/SensorPoseProvider.cpp
@@ -21,13 +21,14 @@
#include <inttypes.h>
#include <future>
-#include <iostream>
#include <map>
#include <thread>
#include <android/looper.h>
#include <log/log_main.h>
+#include "QuaternionUtil.h"
+
namespace android {
namespace media {
namespace {
@@ -217,6 +218,8 @@
case ASENSOR_TYPE_ROTATION_VECTOR:
case ASENSOR_TYPE_GAME_ROTATION_VECTOR: {
Eigen::Quaternionf quat(event.data[3], event.data[0], event.data[1], event.data[2]);
+ // Adapt to different frame convention.
+ quat *= rotateX(-M_PI_2);
return std::make_tuple(Pose3f(quat), std::optional<Twist3f>());
}