So-net無料ブログ作成

加速度&ジャイロセンサー MPU-6050 の Digital Motion Processor の使い方 [Arduino]

InvenSense の加速度・ジャイロセンサー MPU-6050 には Digital Motion Processor (DMP)が搭載されています。といっても、DMPって何するものかよく分かっていません。(*^.^*)


MPU6050.jpg


データシートを見てもイマイチよく分からないので、グーグル先生に聞いてみるも良い答えがない。ならば、プログラムを見れば分かるだろうと思い、ライブラリとサンプルをダウンロードしてきました。


SNS-1007_MPU-6050_Module.rar
http://wiki.androciti.com/download/SNS-1007/SNS-1007_MPU-6050_Module.rar


解凍すると MPU6050/Examples/MPU6050_DMP/MPU6050_DMP.ino にサンプルがありました。中を読み解くとなんとなく見えてきました。

MPU6050 mpuMPU6050 のクラス
mpu.initialize()MPU6050を初期化
mpu.dmpInitialize()MPU6060 の DMP を初期化 戻り値:0 なら正常
mpu.setDMPEnabled(true)DMP を起動
mpu.getIntStatus()割り込みステータスを取得 0x10:FIFO overflow, 0x02: DMP data ready
mpu.dmpGetFIFOPacketSize()DMPのFIFOのパケットサイズを取得
mpu.getFIFOCount()現在のFIFOのカウントを取得
mpu.resetFIFO()FIFOをリセット
mpu.getFIFOBytes(fifoBuffer, packetSize)FIFOデータを取得
mpu.dmpGetQuaternion(&q, fifoBuffer)取得データからQuaternionデータを取得
mpu.dmpGetEuler(eular, &q)QuaternionデータからEular角を取得
mpu.dmpGetGravity(&g, &q)Quaternionデータから重力値を取得
mpu.dmpGetYawPitchRoll(ypr, &q, &g)Qaternionと重力値からYow Pitch Roll 値を取得
mpu.dmpGetAccel(&aa, fifoBuffer)FIFOデータから加速度データを取得
mpu.dmpGetLinerAccel(&aaReal, &aa, &g)重力の影響を除いた加速度データを取得
mpu.dmpGetLinerAccelInWorld(&aaWorld, &aaReal, &q)3次元空間に変換した加速度データを取得



最後の2つのAPIの違いがよく分からないと思いますが、これはどうやら進行方向に向かっている加速度を3次元へのマッピングする処理のようです。




アルゴリズムをわざわざ考えなくてもよいので、これは楽ですね。なんとなく使い方は分かってきましたので、この週末にでも試してみたいと思います。
(^_^)/~