私はこのデバイス ( 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
誰かがこれが正しいかどうかを確認できますか? テストでは、センサーボードを回転させると高い加速度が得られるため、わかりませんが、デバイスを回転させずに動かした場合、加速度データを取得できます (ただし、回転中の加速度よりもはるかに小さい)。
さらに、加速度計がその場で回転している場合でも加速度を測定しているかどうかという質問があります!