可以补偿倾斜和俯仰的Android指南针

我正在尝试在Android手机(Nexus 4)上制作一个应用程序,该应用程序将在模型船中使用。我添加了低通滤波器,以滤除传感器的抖动。


但是,指南针仅在手机平放时才稳定。如果我将其向上倾斜(例如翻开嘘声的一页),则指南针的方向会偏离-多达50 *。


我已经使用Sensor.TYPE_MAGNETIC_FIELD和Sensor.TYPE_GRAVITY和Sensor.TYPE_ACCELEROMETER进行了尝试,效果是相同的。


我已经使用了这里提到的解决方案以及其他许多地方。我的数学不是很好,但这肯定是一个常见问题,令我感到沮丧的是,没有API可以处理它。


我已经研究了3天,但仍未找到任何解决方案,但是当我使用Catch的Compass时,无论手机倾斜了多少,他们都保持稳定。所以我知道这是有可能的。


我要做的就是创建一个指南针,如果手机指向北,则指南针将向北显示,并且当手机沿任何其他轴(滚动或俯仰)移动时,指南针不会跳来跳去。


在我不得不放弃我的项目之前,谁能帮忙。



神不在的星期二
浏览 586回答 3
3回答

海绵宝宝撒

好吧,以为我解决了。我没有使用Sensor.TYPE_ACCELEROMETER(或TYPE_GRAVITY)和Sensor.TYPE_MAGNETIC_FIELD,而是将Sensor.TYPE_ROTATION_VECTOR用于:float[] roationV = new float[16];SensorManager.getRotationMatrixFromVector(roationV, rotationVector);float[] orientationValuesV = new float[3];SensorManager.getOrientation(roationV, orientationValuesV);无论手机的倾角或倾角如何,这都会返回稳定的方位角。如果您在此处查看表1下方的Android运动传感器,它表示ROTATION传感器非常适合指南针,增强现实等。当您知道如何时,就这么简单。...但是,我还需要对它进行一段时间的测试,以了解是否引入了错误。

不负相思意

这是获得磁航向而不受俯仰或侧倾影响的另一种方法。private final static double PI = Math.PI;private final static double TWO_PI = PI*2; case Sensor.TYPE_ROTATION_VECTOR:                float[] orientation = new float[3];                float[] rotationMatrix = new float[9];                SensorManager.getRotationMatrixFromVector(rotationMatrix, rawValues);                SensorManager.getOrientation(rotationMatrix, orientation);                float heading = mod(orientation[0] + TWO_PI,TWO_PI);//important                //do something with the heading                break;private double mod(double a, double b){        return a % b;    }
打开App,查看更多内容
随时随地看视频慕课网APP