問題タブ [imu]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
3d - Madgwick IMU アルゴリズム、360 度の自由変数を取得する方法は?
私は私IMU
のプロジェクトでさまざまな方法を実装しており、現在、有名なMadgwickによるMayhonyのAHRSアルゴリズムの実装(MahonyAHRS.c)を試しています。
これまでのところ、ベクトルの回転と実行中の平均センサーフュージョン (補完と呼ばれることが多い) に基づいた自己実装のものと同じくらいうまく機能します。
ただし、360 度の自由度を取得したいと考えており、現在この機能を使用しています。
ただし、その結果、90 度の問題が発生します。私が望むのは、ピッチとロールを 0 ~ 359 度の形で受け取ることです。
matlab - 3 軸 IMU 重力補正
3 軸 IMU からの加速度 (x、y、z) とロール、ピッチ、方向のデータがあります。ジャイロで計測した角度(r,p,h)をもとに加速度データを補正したい。たとえば、IMU が平らで静止している場合 (z 軸が上)、加速度は [ax,ay,az]=[0,0,-1] となります。IMU が平らで静止している場合 (x 軸が上)、加速度は [ax,ay,az]=[-1,0,0] を読み取ります。最後に、IMU が平らで静止している場合 (y 軸が上)、加速度は [ax,ay,az]=[0,-1,0] を読み取ります。
データは IMUが完全に平らで水平ではない状態で収集されたため、加速度データから g 成分を除去する必要があります。
以下は、g コンポーネントを削除する最初のパスです。データ ファイルのサイズが大きくなると、これは計算集約的であることがすでにわかっているため、使用できる別のアプローチは何ですか。
linux - MPU9250 IMU 加速度センサーとジャイロのデータ形式
MPU9250
データシートから、 の 6 つの出力チャネルのそれぞれが 2 バイトと 16 ビットの分解能を持っていることがわかります。16 ビットのバイナリ値について疑問に思っていましたが、それらは 2 の補数の形式ですか? または、センサーが静止している場合、たとえば x 軸に沿った加速度がゼロの場合、2 バイトの組み合わせ2^16/2
で 、つまり、可能な最大数の半分が得られますか? (オフセットがないと仮定)
arduino - MPU9250 が WOM を使用して ESP8266 でリセット ループに陥る
私は、ESP8266 wifi チップと MPU9250 IMU の両方のスリープ オプションを試してきました。ESP にはディープ スリープ コマンドがあり、ESP の GPIO16 または外部割り込みによって RESET ピンがローに引き下げられるまで、リアルタイム クロックとは別にチップをシャットダウンします。
MPU9250 は、この割り込みを WOM (Wake On Motion) 機能の形で提供します。これにより、内蔵の加速度計でモーションが検出されるまで、チップの機能が最小限に抑えられます。モーションが検出されると、その INT ピンがハイに引き上げられます (私はこれを取り付けました)。ピンを ESP の RESET ピンと GND の間の NMOS トランジスタのゲートに接続して、割り込みを反転します)。
ただし、セットアップして次のコードを使用すると、セットアップがリセット ループに入ります。両方の印刷ステートメントが実行されますが、ESP が実際に DeepSleep コマンドを実行する時間があるかどうかはわかりません。これは、「Got here」が印刷されるとすぐにリセットされ、モーションを待機しないためです。
ただし、プログラムの実行中にNMOSからINT接続を切断して再接続すると、一時的に動作し、動きを検出するまでスリープ状態になり、その時点でリセットループが再び開始されます(移動後にMPU9250が完全に静止していても)。これは、WOM 機能が動作していることを意味しますが、何らかの原因で INT ピンが高くなってはならず、何が問題なのかわかりません。問題が何であるかを知っている人はいますか?コードだけで修正できるものですか?
メインコード (loop() は空です):
別のファイルで:
arduino - MadgwickアルゴリズムとMPU9250センサーのドリフト?
私のプロジェクトでは、ロケットの正しい向きを決定する方法が必要です。
ここからMadgwickフィルターのコードを取得しました
データを収集するために、Arduino Nano + MPU9250センサーを使用しました。このセットアップは、シリアル経由で 12 ミリ秒ごとにパケットを PC に送信します。
一連の測定値によって作成された、軸の原点と球の中心を「整列」するバイアスを計算することにより、磁力計を較正しました。
次に、blender: 3D 軸で座標軸を描画 し、そのためのスクリプトをコーディングしました。シリアルから値を読み取り、フィルターにフィードしてから、四元数回転モードを使用して軸オブジェクトを回転させるだけです。
X 軸の向きを少し間違えたので、ボードを時計回りに回転させると、画面上の軸が反時計回りに回転します。すべての X コンポーネントの符号を反転したところ、問題なく動作しました。
この画像によると、MPU i の軸は、X 軸と Y 軸、および Z 軸の符号を反転させて、磁力計の軸をジャイロスコープ + 加速度計に合わせました。
そして、それは1つの小さな例外を除いてほとんど機能します-「安定化」の後、つまりX軸を下に傾けると(またはY軸は関係ありません)、この軸はグローバルXY平面に向かってドリフトし始めます。軸を上に傾けると、残りの軸はグローバル OZ 軸の周りをドリフトし始めます。このように、 X 軸は下向き、 X 軸は上向きになります。
そのドリフトの速度は、Madgwick フィルターのベータに依存します。ベータが多いほど、ドリフトが大きくなります。
そこで何ができるでしょうか?
android - デバイスの加速度計を使用して、動きの増加と突然の停止を検出するにはどうすればよいですか?
2 台の電話を互いにぶつけたときに発生するモーションを検出しようとしています。
私の質問は、加速度計はこれに適したセンサーですか?
もしそうなら、どのように実装しますか?
それ以外の場合、どのセンサーを使用し、どのように使用すればよいですか?
https://developer.android.com/guide/topics/sensors/sensors_overviewのガイドによると、TYPE_LINEAR_ACCELERATION
使用するのに適しているようですが、使用方法がわかりません。