1

これは、SO に関する私の最初の投稿です。組み込みシステム用のコードはまだあまり開発していませんが、問題はほとんどなく、より高度なプログラマーの助けが必要です。私は次のデバイスを使用しています: - LPC1768 (Cortex M3) MCU を搭載した LandTiger ボード、 - ADXL345 加速度計 (3 軸) を搭載した Digilent pmodACL、 - L3G4200D ジャイロスコープ (3 軸) を搭載した Digilent pmodGYRO。

デバイスの向き、つまり X、Y、Z 軸の回転角度に関する情報を取得したいと考えています。これを達成するには、カルマンフィルターまたはその単純な形式、つまり相補フィルターを使用して、加速度計とジャイロスコープの両方からのデータを組み合わせる必要があることを読みました。ジャイロスコープと加速度計 (磁力計なし) のみの測定データを使用して、全範囲 (0 ~ 360 度) からロール、ピッチ、ヨーをカウントできるかどうかを知りたいです。いくつかの数式も見つけました ( http://www.ewerksinc.com/refdocs/Tilt%20Sensing%20with%20LA.pdfおよびhttp://www.freescale.com/files/sensors/doc/app_note/AN3461 .pdf ) ただし、分子/分母に平方根が含まれているため、座標系の適切な象限に関する情報が失われます。

4

1 に答える 1

5

あなたが尋ねている質問はかなり頻繁なものであり、かなり複雑で、さまざまな解決策があります。タイトルには加速度計のみが記載されていますが、投稿の本文にはジャイロスコープが記載されているため、両方を持っていると仮定します。さらに、低コストの加速度計とジャイロを機能させるには多くの手順が必要です。その 1 つに、電圧から測定値への変換があります。その部分はカバーしません。

何よりもまず、私はあなたの質問に答えます。ジャイロ測定値を「カウント」することで、オイラー角でデバイスの姿勢 (方向) を推定できるかどうかを尋ねました。

簡単な答え: はい、スケーリングされたジャイロ測定値を合計して、デバイスの回転 (姿勢ではなく実際のラジアン回転) の非常にノイズの多い推定値を取得できますが、複数の軸を回転させるとすぐに失敗します。これは、ほとんどのアプリケーションにとって十分ではありません。

一般的なアドバイス、特定の知識、および以前に使用したサンプルコードを提供します。

まず、プログラムを作成して IMU でテストすることによって、この問題を解決しようとするべきではありません。検証済みのライブラリを使用してシミュレーションを作成することから始め、アルゴリズム/プログラムを検証してから、IMU を使用して実装を試みてください。

次に、 「全範囲 (0 ~ 360 度) からロール、ピッチ、ヨーをカウントする」とします。このことから、外部の静止した North-East-Down (NED) フレームに対するデバイスの姿勢を表すオイラー角を決定できるようにしたいということだと思います。私の知る限り、3 つの角度すべてが 0 ~ 360 の範囲にあるオイラー角の表現は存在しないため、あなたの発言は、あなたが姿勢の表現に慣れていないと思います。

デバイスの姿勢をどのような用途で使用するかが重要になります。オイラー角を使用している場合、ロール軸またはピッチ軸で大きな (約 50 度を超える) 回転が行われると、ジンバル ロックと呼ばれるものが原因で、デバイスの姿勢を正確に追跡できなくなります。このようなモーションの追跡が必要な場合は、姿勢の四元数または方向余弦行列 (DCM) 表現を使用する必要があります。

第三に、あなたが言ったように、加速度計、ジャイロ、および磁力計。C、C#、および MATLAB hereで実装されている、Madgwick によって記述された Complimentary Filter をお勧めします。デバイスの位置を追跡する必要があり、GPS などのセンサーが追加されている場合は、カルマン フィルターのバリアントが必要になります。

加速度計のみを使用してオイラー角のピッチとロールを取得するコードの例については、この他の質問に対する私の回答を参照してください。

于 2015-01-09T10:49:31.757 に答える