我有點奇怪的情況。我現在的情況通常是很好的 - 沒有陀螺儀漂移 - 但我不知道爲什麼會出現這種情況。據我所知,隨着各地報道陀螺儀漂移很大。所以這個問題找到了我沒有看到任何漂移的原因。陀螺儀不顯示任何漂移
我使用Galaxy Nexus(Android 4.0.3)及其陀螺儀在最後進行一些方向變化檢測。首先,我只想記錄傳感器讀數,並預計會看到較大的漂移值,例如here。同樣在其他網站上,我讀到每秒漂移約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度。 如果我移動設備得到像上面的截圖一樣沒有漂移可以觀察到所有...
我在做什麼錯了(或對吧?
感謝您的任何建議!
我不得不閱讀你的第一句話的3倍,直到我理解它;) – MrTJ 2012-03-22 15:18:57
對不起,我重新制定它至少有點清晰... – fkerber 2012-03-22 16:33:12