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