4

私はこのデバイス ( http://www.sparkfun.com/products/10724 ) を使用しており、このhttp://www. x-io.co.uk/node/8#open_source_imu_and_ahrs_algorithms の実装。ここで、動的加速度を計算します (静的重力加速度なしで加速度を測定します)。これを行うために、私は次のアイデアに行き着きました。

生の加速度計データの移動平均を計算します。生の加速度がしばらく安定している場合 (移動平均と現在測定されている生データの差が小さい場合)、デバイスは動かないと仮定し、生の重力を測定しています。重力ベクトルと現在の向きをクォータニオンとして保存します。このアプローチは、デバイスが重力なしでは常に加速できないことを前提としています。

重力なしで加速度を計算するために、次の四元数計算を行っています。


RA = Quaternion with current x,y,z raw acceleration values
GA = Quaternion with x,y,z raw acceleration values of estimated gravity
CO = Quaternion of current orientation
GO = saved gravity orientation

DQ = GO^-1 * CO // difference of orientation between last gravity estimation and current orientation

DQ = DQ^-1 // get the inverse of the difference

SQ = DQ * GA * DQ^1  // rotate gravity vector

DA = RA - SQ // get the dynamic acceleration by subtracting the rotated gravity from the raw acceleration

誰かがこれが正しいかどうかを確認できますか? テストでは、センサーボードを回転させると高い加速度が得られるため、わかりませんが、デバイスを回転させずに動かした場合、加速度データを取得できます (ただし、回転中の加速度よりもはるかに小さい)。

さらに、加速度計がその場で回転している場合でも加速度を測定しているかどうかという質問があります!

4

2 に答える 2

3

もう 1 つの方法は、accel を微分してジャークを与えることです (有限差分 j = (a2 - a1) / dt を使用)。減衰/漏れ関数を介してジャークを実行します (単純な乗数ではなく、半減期の減衰計算値を使用します)。次にジャーク (台形則、a = dt * (j1 + j2) * 0.5) を統合すると、DC オフセット (重力) が除去されます。この信号を再び減衰関数に通します。
減衰関数は、値が急上昇するのを回避しますが、表示される動的加速度値の大きさを減らし、信号に何らかの整形を導入します。そのため、「正確な」m/s/s 読み取り値は取得できなくなります。しかし、短時間の移動には便利です。

もちろん、代わりにハイパス フィルターを使用することもできますが、通常は固定のサンプリング レートが必要であり、畳み込み (有限インパルス応答フィルター) を使用している場合は、おそらく計算コストが高くなります。

于 2014-08-15T13:02:07.347 に答える
2

思ったより簡単です。それについての私の投稿を見てみたいかもしれません: http://www.varesano.net/blog/fabio/simple-gravity-compensation-9-dom-imus

于 2012-07-24T10:22:33.023 に答える