使可穿戴设备在X轴周围以0-360度旋转

时间:2014-12-19 15:23:43

标签: android android-sensors

我正在使用Rotation Vector传感器试图跟踪用户移动的X轴(又称手腕运动)周围0-360度的旋转度。

我正在使用SensorManagers getOrientation进行偏航,俯仰和滚动

float[] rotationMatrix = new float[9];
SensorManager.getRotationMatrixFromVector(rotationMatrix, sensorData.getValues());

float[] orientation = new float[3];
SensorManager.getOrientation(rotationMatrix, orientation);

表盘朝上,它给出了我想要的0度,但是当我旋转时,我只获得+/- 90度的增量。向左旋转给我+90度,向右旋转给我-90度。我继续旋转让我说从+90度我开始得到负度,所以当手表面朝下(180度)时再次显示0。使用90度增量将难以准确地获得实际旋转角度。

有没有办法从+/- 90度增量到0-360度?

1 个答案:

答案 0 :(得分:0)

您可以使用z旋转值来确定手表是朝上还是朝下。这决定了您正在查看的视角,并为您提供了4个象限,而不是您开始使用的2个象限。

如果z为正:观看正面朝上。如果z为负数,则面朝下。

从这里,您可以创建转换坐标系。

如果手表朝上,则坐标为90+x_rotation。由于向右旋转得到[-90,0],向左旋转得到[0,90],这给出[-90+90,90+90] = [0, 180]度,这就是我们期望手表朝向手腕的方式。

如果手表朝下,则坐标为270+x_rotation。象限3给出负值90,使得值的范围为[270+-90,270] = [180,270]。同样,象限4的正值为90,创建了[270,90+270]的范围。所以面朝下的手表会给[180, 360]

组合起来,我们得到完整的[0,360]设备旋转范围。

希望这有帮助!