地磁场传感器测量的是什么?

时间:2015-06-06 22:26:46

标签: android sensor android-sensors

According to the docs,地磁场传感器沿x,y和z轴测量地球的磁场强度(微特斯拉,μT)。但是,它并没有像我期望的那样表现。

我希望如果我将设备放在一个位置,测量磁场,然后将设备旋转90°,使新磁场读数与第一个正交。或者,如果旋转180°,则两个矢量的大小相等,但方向相反。我也期望无论设备的方向如何,场地的强度在一个位置上几乎都是相同的。

但这些都不像预期的那样。应该正交的矢量变成具有高于0.8的点积(每个矢量标准化)。如果我将设备旋转180°,矢量的点积应为-1,但在我的测试中,我得到的点积约为0.9(而不是负数)。

幅度也变化很大。有些方向是250,有些方向是45。

唯一需要注意的是它是一致的 - 当我将设备返回到相同的方向和位置时,数字大致相同。

因此,如果数字(x,y和z)不是沿着这些轴的字段的真实值,那么它们是什么?或者,如果它不是矢量空间,它测量的是什么?

更新

以下是一些可以使用的示例代码:

public class SensorTestActivity extends Activity implements SensorEventListener {
  private SensorManager sensorManager;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
  }

  @Override
  public void onSensorChanged(SensorEvent event) {
    Log.i("SENSOR", event.getValues());
  }

  @Override
  public void onAccuracyChanged(Sensor sensor, int accuracy) {}

  @Override
  protected void onResume() {
    super.onResume();
    sensorManager.registerListener(this,
        sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
        SensorManager.SENSOR_DELAY_NORMAL);
  }

  @Override
  protected void onPause() {
    super.onPause();
    sensorManager.unregisterListener(this);
  }
} 

1 个答案:

答案 0 :(得分:0)

地磁场传感器应独立于设备的方向。它测量地球磁场强度,因此应仅取决于位置而不取决于设备的方向。当您将标准化向量对准自身时,上面的所有点积应该接近1。磁矢量的坐标仅因为磁矢量在设备坐标中表示而变化。因此,当您更改设备方向时,坐标会发生变化,但矢量保持不变。