【问题标题】:How to detect magnetic north / azimuth without Magnetometer如何在没有磁力计的情况下检测磁北/方位角
【发布时间】:2016-10-11 11:07:55
【问题描述】:

我正在使用没有磁力计但有旋转传感器(陀螺仪)、重力传感器和 GPS 的 Android 设备。我想从这些传感器确定真北/方位角,但不知道如何。如果没有磁力计,我如何确定该设备的方向?很明显,它知道北在哪里,地图应用程序工作得很好。

【问题讨论】:

  • @Ircover 谢谢,我已经更新了我的问题,我想我追求的是“真正的北方”,而不仅仅是设备的方向(因为它朝上会返回 0 )。本质上,我正在尝试创建具有给定约束的指南针
  • 如果设备移动(不止几米),那么 GPS 可以为您提供移动方向。从理论上讲,您可以使用它来“校准”旋转传感器,然后用它跟踪设备的旋转。当然,在实践中,如果设备在多个轴上旋转,事情就会变得复杂。

标签: android android-sensors magnetometer sensormanager


【解决方案1】:

更新

您可以使用看起来非常适合您的情况的Rotation Vector Sensor

private SensorManager mSensorManager;
private Sensor mSensor;
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);

你想要的坐标系如下:

  • X 定义为 Y x Z 的向量积。它与设备当前位置的地面相切,指向东方
  • Y 在设备当前位置与地面相切,并指向地磁北极
  • Z 指向天空并垂直于地平面。


Android 提供了很多可用的传感器

如果您特别想使用陀螺仪 (Sensor.TYPE_GYROSCOPE),您可以这样做(取自 Google example):

private SensorManager mSensorManager;
private Sensor mSensor;
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);

public void onSensorChanged(SensorEvent event) {
      //...
}

但您可以尝试检查是否可以使用将利用多个传感器的更高级别的 API

您应该看看 JavaCodeGeeks 的 simple example,他们利用默认的 Sensor.TYPE_ORIENTATION 构建一个 android 指南针

关于 Sensor.TYPE_ORIENTATION 的更多信息。 According to Google 您仍然可以使用设备方向,但通过调用 getOrientation() 而不是直接通过传感器进行操作。

我们建议不要使用来自方向传感器的原始数据 您将getRotationMatrix() 方法与 getOrientation() 计算方向值的方法,如 以下代码示例。作为此过程的一部分,您可以使用 remapCoordinateSystem() 将方向值转换为的方法 您的应用程序的参考框架。

坏消息是getOrientation() 和旧的Sensor.TYPE_ORIENTATION 至少部分依赖于磁力计

希望这会有所帮助!

【讨论】:

  • 谢谢,我知道如何使用陀螺仪传感器——我只是不知道如何从读数中确定“真北”,因为我需要先了解北在哪里。很遗憾,TYPE_ORIENTATION 已被弃用,因此无法使用:(
  • 那我再看看;)
  • 谢谢,我会将其标记为正确答案,尽管我使用的硬件没有给我任何 TYPE_ROTATION 的读数 :( 但这听起来像是我可能拥有的唯一其他选择.
  • 谢谢 ;) 你有没有注意到它实际上是 TYPE_ROTATION_VECTOR 而不是 TYPE_ROTATION? (只是确保)
  • 是的,感谢您仔细检查,这就是我的意思:) 这是我正在使用的汽车仪表板,显然它不愿意打球
猜你喜欢
  • 2010-11-06
  • 2019-11-28
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多