在安卓设备中测量精确的旋转角度

4
我需要获取我安卓设备每个轴的精确角度
首先,我要说我在网上和stackoverflow上搜索过,看到了像这样的页面: 如何使用Android加速度计测量手机在XY平面上的倾斜度 获取Android x轴旋转角度 但它们并没有帮助。 我使用了其中一些,但它们给出了错误的值。
如果设备中的轴是这样的:

enter image description here

我需要获取这些旋转角度:

enter image description here

我不想使用除加速度计之外的任何硬件传感器,并且我使用API 17。 我认为基于赛车游戏这是可能的,但我不知道如何做到。 如果您能帮助我,我将不胜感激。 谢谢。

你需要参考这个链接:http://developer.android.com/reference/android/hardware/SensorEvent.html - Murtaza Khursheed Hussain
正如我之前所说,我只想使用加速度计来获取方向。我没有其他的硬件传感器。 请注意,TYPE_ORIENTATION已在API级别8中被弃用,而我也无法访问属于API 20的传感器,例如STRING_TYPE_LINEAR_ACCELERATION。 - Taher
1个回答

1

仅使用TYPE_ACCELEROMETER无法获取所有旋转信息,您还需要TYPE_MAGNETIC_FIELD。如果您不关心值如何随快速移动而变化,则需要TYPE_GRAVITYTYPE_ACCELEROMETERTYPE_MAGNETIC_FIELD一起使用。
对于围绕z轴的旋转,您可以按照问题中的第一个链接进行操作。
对于围绕x和y轴的旋转,您可以使用俯仰角和横滚角以及屏幕朝向。


我需要另一个硬件传感器才能访问TYPE_MAGNETIC_FIELD吗? - Taher
通常大多数手机都有TYPE_ACCELEROMETER和TYPE_MAGNETIC_FIELD。如果有TYPE_GRAVITY,则应使用它而不是TYPE_ACCELEROMETER。如果您使用TYPE_ACCELEROMETER类型,则必须使用低通滤波器来过滤x和y加速度。 - Hoan Nguyen
我已经检查过了,不幸的是,我无法访问TYPE_MAGNETIC_FIELD和TYPE_GRAVITY。 - Taher
你用的是什么设备?很少见到安卓设备没有TYPE_MAGNETIC_FIELD。 - Hoan Nguyen
HTC Desire 310 搭载 Android 4.2.2。我编写了简单的代码来检查它: Sensor mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);在 onSensorChanged 方法中,我使用了这段代码:if (event.sensor == mMagnetometer) { Toast.makeText(this, "OK", Toast.LENGTH_SHORT).show(); }我使用相同的代码来检查我的加速度计,它也起作用了。 - Taher
如果没有TYPE_MAGNATIC_FIELD,您将无法获取所需信息,正如我在答案中所述。例如,如果设备平放并开始旋转。因此,在这种情况下,它是绕z轴旋转。要找到旋转,您需要找到y轴相对于磁北的方向。计算需要TYPE_MAGNETIC_FIELD和TYPE_ACCELEROMETER。 - Hoan Nguyen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接