Я в немного странной ситуации. Ситуация, которую я сейчас имею, как правило, хорошая - вообще никакого дрейфа гироскопа, но я не знаю, почему это так. Я ожидал, что гироскоп будет дрейфовать, как сообщается повсюду. Поэтому этот вопрос, чтобы найти причину, почему я не вижу никакого дрейфа.Гироскоп не показывает никакого дрейфа
Я использую 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
Извините, я переформулировал его, чтобы сделать его хотя бы немного яснее ... – fkerber