仅使用陀螺仪和加速度计获得 ANDROID 上任何轴的可靠当前角度的正确方法
Correct way to use ONLY Gyroscope and Accelerometer to get the reliable current angle in any axis on ANDROID
一周前我对Android 运动传感器一无所知。在了解了称为虚拟现实的神奇事物后,我开始搜索使用哪些传感器来获得这些结果。比起我有一个 APP 的想法,但我仍然不知道在以下情况下我应该使用哪些传感器:
我必须自己获取 phone 方向参考。我的意思是,我应该能够逐步隔离每个轴。类似的东西:
在这种情况下,使用陀螺仪,我认为这种变化是在 Z 轴上。
对于这种情况,我只使用陀螺仪得到了很好的结果,但在重复几次之后,我遇到了陀螺仪传感器的一个著名问题:漂移。
完成本教程后:
http://www.thousand-thoughts.com/articles/#articles
事情在我脑海中变得更加清晰,但我仍然遇到真实运动之间的延迟等问题,以及当我改变设备方向时输出和错误输出(我认为重力是罪魁祸首) .
是否有一些代码示例说明如何仅使用陀螺仪和加速度计传感器为每个轴获取 0 - 360 度?
(我可能犯了一些英语错误。抱歉)
以下代码将为您提供正确的倾斜角度,但前提是您的 phone 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 运动传感器一无所知。在了解了称为虚拟现实的神奇事物后,我开始搜索使用哪些传感器来获得这些结果。比起我有一个 APP 的想法,但我仍然不知道在以下情况下我应该使用哪些传感器:
我必须自己获取 phone 方向参考。我的意思是,我应该能够逐步隔离每个轴。类似的东西:
在这种情况下,使用陀螺仪,我认为这种变化是在 Z 轴上。 对于这种情况,我只使用陀螺仪得到了很好的结果,但在重复几次之后,我遇到了陀螺仪传感器的一个著名问题:漂移。
完成本教程后: http://www.thousand-thoughts.com/articles/#articles
事情在我脑海中变得更加清晰,但我仍然遇到真实运动之间的延迟等问题,以及当我改变设备方向时输出和错误输出(我认为重力是罪魁祸首) .
是否有一些代码示例说明如何仅使用陀螺仪和加速度计传感器为每个轴获取 0 - 360 度?
(我可能犯了一些英语错误。抱歉)
以下代码将为您提供正确的倾斜角度,但前提是您的 phone 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;