我发现的所有在 Android 中获取指南针方向的指南都有一个错误:当您以纵向模式握住手机并“看”地平线上方时,指南针箭头会从正确方向旋转 180 度。
谷歌地图方向指示器不存在这个问题。
谷歌地图的另一个好处是它们可以以某种方式估计指南针的准确性。知道他们是怎么做到的吗?
您问的错误是由于欧拉角或称为万向节锁引起的。
为了解决非常大的角度差异,您应该检查您的设备是否平坦,或者在使用重力传感器获取倾斜度或从带有低通滤波器的加速度计获取重力后不检查倾斜度。如果不平坦(AR 应用程序或倾角 >25 || 倾角
SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values);
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, remappedRM);
SensorManager.getOrientation(remappedRM, orientation);
这解决了万向节锁定问题,但是,3D 指南针(普通指南针不会给出正确的结果,因为它们仅映射到 x,y 并发生万向节锁定)我在 Play 商店中看到过,当您保留时,这里的每个代码都有所不同您的设备平放或屏幕指向您。这种差异有时高达 10 度。我没能解决它。大多数差异在 1-5 度之间,但有时我会看到它上升到 10 度,这是不可接受的。
Google 测量您所在位置的方位角。有一个代码可以找到轴承。
currentLocation.getBearing();
经纬度的精度(当前位置的精度)决定了方位的精度。
从最精确到最不精确的指南针方法列表按顺序排列
- 使用 GPS/Wife(Google 的融合位置)位置并获取位置方位
- 使用旋转矢量(需要磁场传感器,您应该检查它是否可用),它是一个融合传感器(磁场+陀螺仪+加速度计和软件部件)并使用卡尔曼滤波器来平滑值,但检查倾斜度以重新映射方向
- 重力/加速度计+磁场传感器。这将产生可怕的噪音,为了平滑它,您应该使用移动平均或低通滤波器(这不是为了隔离重力,而是为了使用阈值频率来防止跳高)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)