我的情况有点奇怪。我目前的情况通常很好——根本没有陀螺仪漂移——但我不知道为什么会这样。我预计陀螺仪会像到处报道的那样漂移很多。因此这个问题找到了我没有看到任何漂移的原因。
最后,我使用 Galaxy Nexus (Android 4.0.3) 及其陀螺仪进行一些方向变化检测。首先,我只是想记录传感器读数,并希望看到大的漂移值,例如这里。同样在其他网站上,我读到大约每秒 1 度的漂移或类似的测量值。
我记录传感器数据的代码非常基本:
SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
LogSensorEventListener listener = new LogSensorEventListener(
SensorLoggerActivity.this, Sensor.TYPE_GYROSCOPE);
sm.registerListener(listener, sm.getDefaultSensor(Sensor.TYPE_GYROSCOPE),
SensorManager.SENSOR_DELAY_FASTEST);
LogSensorEventListener 也是 SensorEventListenerInterface 的一个非常基本的实现:
@Override
public void onSensorChanged(SensorEvent event) {
final float dT = (event.timestamp - mTimestamp) / 1000000000.f;
if (dT < 1) { // just a fix for the first step
mRelZ += event.values[2] * dT;
list.add(mRelZ);
list2.add(event.timestamp);
}
mTimestamp = event.timestamp;
mRelZ 最初设置为 0,两个列表应跟踪时间和测量值。如果完成我的测量(单击按钮),则将值写入文件:
try {
for (int i = 0; i < list.size(); i++) {
long time = list2.get(i);
if (mStartTime < 0) {
mStartTime = time;
time = 0;
} else {
time = time - mStartTime;
}
float timef = time / 1000000000.0f;
sb.append(timef);
sb.append(";");
sb.append(Math.toDegrees(list.get(i)));
sb.append("\n");
}
mOutFileStream.write(sb.toString().getBytes());
mOutFileStream.flush();
mOutFileStream.close();
} catch (IOException e) {
}
一切正常,但我能看到的唯一漂移(例如,当设备放在桌子上并记录值 60 秒时)大约是 0.2 度。如果我移动设备以获取类似于上面屏幕截图中的内容,则根本不会观察到漂移......
我在做什么错(或对?)?
感谢您的任何建议!