仅使用陀螺仪和加速度计的正确方法可以在 ANDROID 上的任何轴上获得可靠的当前角度

Posted

技术标签:

【中文标题】仅使用陀螺仪和加速度计的正确方法可以在 ANDROID 上的任何轴上获得可靠的当前角度【英文标题】:Correct way to use ONLY Gyroscope and Accelerometer to get the reliable current angle in any axis on ANDROID 【发布时间】:2015-07-06 04:53:42 【问题描述】:

一周前,我对 android 运动传感器一无所知。在了解了名为虚拟现实的神奇事物后,我开始搜索使用哪些传感器来获得这些结果。比我有一个 APP 的想法,但我仍然不知道我应该使用哪些传感器来应对以下情况:

我必须自己参考手机方向。我的意思是,我应该能够逐步隔离每个轴。类似的东西:

在这种情况下,使用陀螺仪,我认为这种变化是在 Z 轴上。 仅使用陀螺仪我在这种情况下得到了很好的结果,但经过一些重复后,我遇到了陀螺仪传感器的一个著名问题:漂移。

本教程之后: http://www.thousand-thoughts.com/articles/#articles

事情在我的脑海中变得更加清晰,但是当我改变设备方向时,我仍然遇到实际运动与输出和错误输出之间的延迟等问题(我认为重力是罪魁祸首)。

是否有一些关于如何仅使用陀螺仪和加速度计传感器为每个轴获得 0 - 360 度的代码示例?

(我可能犯了一些英文错误。抱歉)

【问题讨论】:

链接坏了!!你能更新一下吗? @Sanoop 完成了。谢谢 【参考方案1】:

以下代码将为您提供正确的倾斜角度,但前提是您的手机 Z 轴为 0。(就像您说明它的方式一样)。 当也开始改变 Z 轴时,它变得有问题,我仍在努力。 (* 度数向左倾斜时带有减号“-”,向右倾斜时带有“+”号)

float[] mGravity;
float[] mGeomagnetic;


    float[] temp = new float[9];
    float[] RR = new float[9];
    //Load rotation matrix into R
    SensorManager.getRotationMatrix(temp, null,
            mGravity, mGeomagnetic);

    //Remap to camera's point-of-view
    SensorManager.remapCoordinateSystem(temp,
            SensorManager.AXIS_X,
            SensorManager.AXIS_Z, RR);

    //Return the orientation values
    float[] values = new float[3];
    SensorManager.getOrientation(RR, values);

    Double degrees = (values[2] * 180) / Math.PI;

【讨论】:

感谢您的回答。由于这个问题,我停止了这个开发已经有一段时间了,现在我回来了。我会检查你的解决方案。

以上是关于仅使用陀螺仪和加速度计的正确方法可以在 ANDROID 上的任何轴上获得可靠的当前角度的主要内容,如果未能解决你的问题,请参考以下文章

使用加速度计和陀螺仪获取手机在太空中的大致位置

iOS新加速计事件(陀螺仪和加速计)

互补滤波器陀螺加速度计

Html5 地理定位精度非常高

陀螺仪和加速度计的读数和四元数怎么建立关系

使用陀螺仪和加速度计获取方向