web-dev-qa-db-ja.com

ジャイロスコープと加速度計のデータを組み合わせる

レゴマインドストームのNXTシステムを使用してバランスロボットを構築しています。私はHiTechnicの2つのセンサーを使用しています。1つ目は加速度計で、2つ目はジャイロスコープです。両方のセンサーからノイズを除去し、両方の角度を-90〜90度の範囲で正常にフィルタリングしました。0度は完全にバランスが取れています。

次の課題は、両方のセンサー値を組み合わせて、ジャイロスコープの経時的なドリフトを補正することです。以下は、ジャイロスコープからのドリフトを示すために実際のデータから作成したグラフの例です。

enter image description here

これらのセンサーを堅固に組み合わせるために私が見た最も一般的に使用されるアプローチは、カルマンフィルターを使用することです。しかし、私は微積分学の専門家ではなく、数学記号を本当に理解していません。ソースコードの数学も理解しています。

私はRobotC(他のC派生物と同様)を使用しています。Cでこれを実現する方法の例を教えていただければ幸いです。

ご協力ありがとうございました!

解決結果:

さて、kersnyは補完フィルターを紹介して私の問題を解決しました。これは私の結果を示すグラフです:

結果#1

enter image description here

結果#2

enter image description here

ご覧のとおり、フィルターはジャイロドリフトを補正し、両方の信号を単一の滑らかな信号に結合します。

編集:私はとにかく壊れた画像を修正していたので、このデータを生成するために使用したリグを見せることは楽しいと思いました:

enter image description here

68
Dylan Vester

カルマンフィルターはすべて優れていますが、補完フィルターの実装ははるかに簡単で、同様の結果が得られます。補完フィルターをコーディングするために見つけた最高の記事は、 このwiki (と一緒に この記事 センサーの工学単位への変換について)とPDF上のZipファイルで このページ (技術文書では、Zipのファイル名はfilter.pdfであると考えています);

PS。カルマンフィルターにこだわっている場合、 here は、それを実装するArduinoのC構文コードです。

43
kersny

Gamasutra.com ran WiiMoteフィルタリングでのカルマンフィルターの使用に関する記事

記事の最後に、C++ソースコードへのリンクがいくつかあります。

5
Vatine