1

簡単な質問: CoreMotion 値からの加速は、デバイスがテーブルに置かれていても、かなり大きなドリフトを取得します。大丈夫ですか、それとも何が間違っていますか?

長い質問: 私はそのような CoreMotion 加速度計を -init メソッドで使用しています:

motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 1.0 / 60.0;

次に、更新を開始します。

if ([motionManager isDeviceMotionAvailable])
{
    [motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical];
}

次に、いくつかの更新メソッドで値を読み取ります (タイマーによって Cocos3d によって呼び出されます)。また、現在の加速度値を追加する静的変数 accum - アキュムレータもあります。したがって、accum はすべての加速度値の合計を保持します。

if (motionManager.deviceMotionActive)
{
    CMDeviceMotion *deviceMotion = motionManager.deviceMotion;
    CMAcceleration accel = deviceMotion.userAcceleration;
    static CC3Vector accum = {0,0,0};
    accum.x += accel.x;
    accum.y += accel.y;
    accum.z += accel.z;
    NSLog(@"%f, %f, %f", accum.x, accum.y, accum.z);
}

iPad 3 をテーブルに置いたところ、一見すると加速値は問題ないように見えましたが、1 つの軸の累積値がかなり急速に増加し始めていることがわかります。生データから重力を取り除くことが 100% 正確ではないことはわかっていますが、iPad をテーブルに置いて動かしていなくても、これがそれほど悪いことだとは思っていませんでした。問題は、私が何か間違ったことをしているのか、それともこうあるべきかということです。

4

3 に答える 3

1

精度を高める方法の 1 つは、次のようなものを使用することです。

accum.x += (previous_accel.x - accel.x)/2;
previouis_accel.x = accel.x;

以下に作成した見苦しい写真/グラフに見られるように、生のセンサー読み取り値を取得して記録すると、自動的にデータが失われます。最後の測定値と現在の測定値を平均することで、不足している情報を滑らかにする (または埋める) ことができます。
データ

これは微積分 1 (最小二乗法だと思います) でわかると思いますが、微積分と同じように、間隔が小さいほど実際の情報に近づきます。私は尋ねていると思いますが、最大周波数でサンプリングしていますか?

加速度計を使用する際に常に推奨されるもう 1 つの (一種の) 基本的なデータ管理手法は、ローパス フィルターです。実装は簡単で、上記の平均化手法がなくても、静止時のドリフトが解消されます。聞いたことがない場合は、読み取った値がノイズ以外のものになるのに十分な大きさかどうかを確認するための単なるテストです。(ノイズは多くの原因で発生する可能性がありますが、私が読んだことによると、温度は最大の問題の1つであり、人間が検出できない微振動がそれに続きます).

if(accel.x < .05)
    accel.x = 0.0;

使用される実際の値は、センサーに完全に依存し、ある程度、何をしようとしているのか/読み取り値の感度が必要なのかに依存するため、状況に最適な値を見つけるためにテストを行う必要があります. 可能であればcsvファイルに出力し、グラフ機能を備えたスプレッドシートにインポートします。フィルターのテストと、後でプログラムをデバッグするときの両方で、データをグラフで表示すると非常に役立ちます。

于 2012-10-19T15:28:10.790 に答える
0

CMAttitudeReferenceFrameXArbitraryCorrectedZVertical磁力計に基づいてヨーを更新するを使用しています。これは通常、長期的な値を適切に修正しますが、環境によっては変動する傾向があります。

于 2015-04-09T21:14:31.070 に答える
0

加速度計は、重力の方向と強さを正確に知っていても、速度を正確に積分するにはノイズが多すぎます。

平均加速度ベクトルを累積してそれを減算することでバイアスをいくらか中和できるかもしれませんが、明らかに、デバイスを傾けたり加速したりするとすぐに機能しなくなります。

于 2012-10-18T22:28:37.617 に答える