Android:正确解释传感器值

Pau*_*aul 5 android rotational-matrices sensormanager

因此,我一直在研究SensorEvent文档,试图找出如何找出相对于手机给定轴的北方向.我画了一个小图像,说明了我对坐标系如何工作的概念:

我对坐标系的概念

因此,如果世界坐标是x,yz,其中磁北沿zy指向天空,并且手机的坐标是Px,PyPz,那么我希望能够计算投影将每个载体放在另一个上.

似乎SENSOR_TYPE_ROTATION_VECTOR看起来可能是正确的,但似乎没有给我足够的信息来获得所有这些预测.我应该将ROTATION_VECTOR标准化并将其添加到我关心的轴上,然后拉出组件吗?

另一个大的单个传感器似乎是SENSOR_TYPE_ORIENTATION,但我再也不清楚如何处理这些值.如果我想知道真实世界坐标系在Py上的三个投影,我是否只是沿给定坐标旋转[ 0,1,0 ],如下所示:

// Assume here that I've received values
// and broken them out into 
// a = azimuth
// p = pitch
// r = roll

// Convert to radians
a = a*Math.Pi/180;
p = p*Math.PI/180;
r = r*Math.PI/180;

// Given that Py is initially 0, 1, 0, apply general rotation matrix:
float[] Py = new float[3];
Py[0] = -Math.cos(p)*Math.sin(a) + Math.sin(p)*Math.sin(r)*Math.cos(a);
Py[1] = Math.cos(p)*Math.cos(a) + Math.sin(p)*Math.sin(r)*Math.sin(a);
Py[2] = Math.sin(p)*Math.cos(a);
Run Code Online (Sandbox Code Playgroud)

我从公式中获得了一般旋转的公式(因为它旋转单位矢量,你可以选择中心列).我认为变量Py的组件将是x,yzPy的投影,但是我有倒退吗?是否将Py投影到三个真实世界的轴上?

最后,我注意到有一个getRotationMatrixFromVector()选项,它似乎为你计算这些预测,但我再次确定我是否完全倒退.如果我想知道x的三个投影.yzPy,我得到旋转矩阵的第二列,还是第二列?

(对不起,这可能是一个非常简单的问题的非常罗嗦的版本,我认为对于未来困惑的人来说,更好地了解坐标系,这是我的主要困惑点).