私はちょっと奇妙な状況です。私が現在持っている状況は、通常、良いものです - ジャイロドリフトは全くありませんが、なぜこれが当てはまるのかわかりません。私はジャイロスコープがあらゆるところで報告されているように多くのドリフトを予想していました。したがって、私はドリフトを見ない理由を見つけるためにこの質問。ジャイロスコープにドリフトが表示されない
私は、Galaxy Nexus(Android 4.0.3)とそのジャイロスコープを使用して、最終的に姿勢変更の検出を行います。まず、センサーの読み取り値をログに記録したいだけで、大きな値が表示されることが予想されます(例:here)。また、他のウェブサイトでは、毎秒約1度のドリフト、または同様の測定値を読みました。
センサデータをログに記録する私のコード
は非常に基本的である:@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に設定され、二つのリスト:
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の非常に基本的な実装であります時間と測定値を追跡する必要があります。
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) {
}
すべてが正常に動作しますが、唯一のドリフトが、私はLETのためのテーブルとログの値の上に横たわる装置を備えたとき、たとえば(参照することができます(ボタンをクリック)私の測定が終了した場合の値がファイルに書き込まれます例えば60秒)は約0.2度である。 上記のスクリーンショットのようなものを得るためにデバイスを動かすと、ドリフトはまったく観測できません...
私は間違っていますか?
アドバイスありがとうございます!
私は理解するまで3回最初の文章を読まなければならなかった;) – MrTJ
申し訳ありませんが、私はそれを少なくとも少しはっきりさせるように改正しました... – fkerber