为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

神不在的星期二 2019-12-25 10:53:03
我正在尝试在Android手机(Nexus 4)上制作一个应用程序,该应用程序将在模型船中使用。我添加了低通滤波器,以滤除传感器的抖动。但是,指南针仅在手机平放时才稳定。如果我将其向上倾斜(例如翻开嘘声的一页),则指南针的方向会偏离-多达50 *。我已经使用Sensor.TYPE_MAGNETIC_FIELD和Sensor.TYPE_GRAVITY和Sensor.TYPE_ACCELEROMETER进行了尝试,效果是相同的。我已经使用了这里提到的解决方案以及其他许多地方。我的数学不是很好,但这肯定是一个常见问题,令我感到沮丧的是,没有API可以处理它。我已经研究了3天,但仍未找到任何解决方案,但是当我使用Catch的Compass时,无论手机倾斜了多少,他们都保持稳定。所以我知道这是有可能的。我要做的就是创建一个指南针,如果手机指向北,则指南针将向北显示,并且当手机沿任何其他轴(滚动或俯仰)移动时,指南针不会跳来跳去。在我不得不放弃我的项目之前,谁能帮忙。
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

好吧,以为我解决了。


我没有使用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传感器非常适合指南针,增强现实等。


当您知道如何时,就这么简单。...但是,我还需要对它进行一段时间的测试,以了解是否引入了错误。


查看完整回答
反对 回复 2019-12-25
?
不负相思意

TA贡献1777条经验 获得超10个赞

这是获得磁航向而不受俯仰或侧倾影响的另一种方法。


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;

    }


查看完整回答
反对 回复 2019-12-25
  • 3 回答
  • 0 关注
  • 582 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信