地磁场传感器测量什么?



根据这些文档,地磁场传感器沿着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。磁矢量的坐标变化只是因为磁矢量是用设备坐标表示的。因此,当你改变设备方向时,坐标会改变,但矢量保持不变。

最新更新