2016-10-20 3 views
2

私はMatlabのカルマンフィルタの実装を試しています。カルマンフィルタを使って空気中の子供が投げたボールの動きをモデル化したいと思います。カルマンフィルタを初期化して更新するための測定値(グラウンドトゥルース値)として使用するために、イメージフレーム内のボールの位置に手作業で注釈を付けました。私は次のように6次元ベクトルであると状態を定義している:カルマンフィルタを構成し、発射運動を正しくモデル化するための状態ベクトルを定義するにはどうすればよいですか?

[X VxのアックスY VxとAyの】

X - X座標Vxと - 速度Xでアックス座標 - 加速度がXのY座標 - X Vyの座標 - xの速度はAyの座標 - xの加速度座標

カルマン・フィルタは、次の呼び出しを使用して構成されている:

カルマンフィルター= myConfigureKalmanFilter( 'ConstantAcceleration'、重心、[0.5 0.5 0.5] * 1E2、[25 、10,10]、25)。

:重心が(X、Y)(Excel文書の通り985)、最初のフレームのグランドトゥルース値以下の呼び出しを使用して生成される(フレーム以降986の)

予測値に対応

[predictCentroid、状態] =予測(kalmanFilter);

カルマンフィルタは、フレームに対応するグランドトゥルース値と次の呼び出し(以降986)を使用して更新される。

正しい(カルマンフィルター、重心)。

enter image description here

この実験の結果は、図に示されています。

問題:Ayの値は一定ではなく、不規則に増減しているように見えます。これは、y方向に一定の加速度を与える重力を伴う発射運動の場合であるので、これらの値はあまりドリフトしてはならないが、そうではない。

注:これらの値はピクセル座標です。

答えて

0

ここでの問題の一部は、ボールが3D空間で動いていることですが、そのモーションの2D投影を追跡していると思います。また、3D空間でも、空気抵抗のために加速度は実際には一定ではありません。

しかし、この場合、常に一定の加速度が最良のモーションモデルである可能性があります。モーションモデルが正しくないという事実を説明するために、プロセスノイズの共分散を増やすことを試みます。

また、共分散の微調整を行うこともできます。たとえば、加速度の推定値は、おそらく位置の推定値よりも騒々しいです。

編集:

レンズの歪みは別の問題です。あなたがそれを訂正できるなら、それはいつも良いことです。しかし、私が話していたことは、ボールが3Dで動くという事実ですが、あなたが見ているビデオはその動きの2D投影を示しています。

実際の3D世界では、重力のため一定の加速があり、ボールの軌道は3Dの放物線です。ボールの動きをビデオで見ると、その軌道は、カメラの角度に応じて、その放物線の2次元投影です(スキューされる可能性があります)。結果として、この2D軌跡は一定の加速度を持たなくてもよい。

極端なケースを考慮してください。ボールはフィールドを越えて投げられる。カメラはフィールドの上にまっすぐに見えます。 3Dでは、ボールは実際にはパラボラで飛んでいます。最初は減速してから、地面に当たるまで加速します。しかし、上のカメラでは、ボールが直線的に動き、最初に加速してから減速するように見えます。ビデオには3次元がありませんので、一定の下向きの加速度の代わりに、軌道に沿った様々な加速度を観測します。

唯一の方法は、イメージプレーンがボールの動きの平面と平行であるかどうかです。次に、3D放物線の軌跡が2D放物線として画像に投影され、一定の加速度がY軸に沿って下向きになります。

+0

「2D投影を追跡する」とは、現在、歪んだ画像を使用しており、樽型の歪みが大きいため、処理する前に画像を歪ませないようにすることです。 –

+0

私は答えを編集しました。 – Dima

+0

放物線が歪んでいることに私は同意します。しかし、ボールの運動面と相対的な傾きを持つカメラとの間の一定の角度を一方向に限定したとすると、gの成分を取る問題であるため、加速度はy方向で一定でなければならない一定数のボールの動きの方向。 –

関連する問題