【发布时间】:2015-06-06 22:26:46
【问题描述】:
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);
}
}
【问题讨论】:
标签: android sensors android-sensors