2012-02-10 11 views
6

私はAndroid用の動き検出アプリケーションを開発しようとしています。アプリケーションは、宇宙での携帯電話の動きを追跡し、それをコンピュータ画面上の動きにマッピングできる必要があります。私は3軸加速度計を使用しています。データは非常に騒々しいので、カルマンフィルタを使用しています。カルマンフィルタと内部状態変数の品質

内部状態は6成分ベクトル[速度-x、速度-y、速度-z、加速度-x、加速度-y、加速度-z]であり、測定状態は3成分ベクトル[accel-x、accel-y 、accel-z]である。

フィルタは測定値ではうまく機能しますが、速度はまだ非常に騒がしいです。

Plotted values

これは正常な動作ですか、私は何か間違ったことをやっている場合は、カルマンフィルタの私の理解は非常に基本的なものですので、今私は、疑問に思って。私は二重[] [] A = { {1、0、0、DT、0、(dtは近似センサリフレッシュレートである1/15である)

をJKalmanライブラリを使用し、状態遷移行列を次の午前0}、{0,0,0,1,0,0}、 {0,0,1,0,0}、{ 0,0,0,0,1,0}、 {0,0,0,0,1} };

また、テストデータから計算された共分散を持つ独自の共分散行列を設定しました。この改良された加速度信号は少しでも速度には影響しませんでした。

現在、私は速度のために[0,0632041857 0,0607274545 0,0886326602] stdvarを

を達成することができています[X、Y、Z]

[0,0041689678 0,004423822 0、 0074808552]を加速[x、y、z]とする。

私は加速信号に非常に満足しています。私はそれ以上に改善できないと思いますが、スピード信号の品質を向上させたいと思います。

答えて

3

Won't work.

どんなにあなたが何をすべきか、速度は秒でextemely不正確になるんだろう。上記のリンクの答えは位置に関するものですが、速度は同じです。カルマンフィルタに関してもhere.

あなたは、速度を得るために(もしあれば)、あなたのアプリで携帯電話の向きを使って、速度を得ることをやめてください。

+0

実際、それはかなりうまくいっています、問題は本当に遅くて本当に速い動きです(期待どおり)。私は相対的な動きだけが必要なので(それは左、右、上、下に)、おそらくそれの大きさを知っています。スピードの問題については、私はスピードダンピングを使用しています(加速度ゼロが適用されている場合、スピードは各タイムステップで係数<1.0で乗算されるので、かなり速くゼロになります)。とにかく、材料のおかげで、私はそれを見てみましょう、面白いようです。 – Andraz

+0

@Andraz興味深い。正確な速度は必要ありません。次に、あなたが何を記述すればうまくいくのですかとにかく幸運! – Ali

2

私はWikipediaで読んだこと以外はカルマンフィルタについてはあまりよく分かりませんが、不適切な方法でカルマンフィルタを適用しようとしていると思います。

stdvarsはのみを表します。ノイズはですが、これはあなたが計算したものです。しかし、より根本的には、入力データが不足していると思います。が多く、の入力が異なるとカルマンフィルタが使用されます。加速度計+ GPS。

カルマンやその他のものでは、ノイズの多い加速度センサーの入力を読み込んで何らかの形で滑らかで正確な軌跡を得ることは不可能に思えます。加速度計のデータをいつも平均化することができますが、滑らかな軌道が得られますが、軌道は実際の軌道とは異なります。 (例えば、a_smooth {i} = 0.6 a {i} + 0.3 a {i-1} + 0.1 a {i-2}を試したい場合)

さらに大きい加速度計の精度が非常に悪いという問題と、おそらくそれを多用することはできません。特に、位置の追跡は、@Aliの回答と同じです。

EDIT:私は、あなたに同様の式を持っているウェブ上のいくつかの参照を見つけたが、それらが何をしたい明らかではありません定数加速、とのモデルに使用さカルマンフィルタのためでした。