MPU-6050データの可視化2018-01-08
前回の記事ではジャイロ・Gセンサー(MPU6050)とPCの通信には成功したものの、高速で数字が流れて来るだけで何がどうなってるか解らなかった。そこで今回はセンサーからのデータを可視化してみたいと思う。
可視化というのは、センサーを動かすとそれに連れて飛行機の3D画像が動くみたいなやつだが、その為にはセンサーから受信したデータで3Dモデルを動かすようなシステムが別途必要な筈。その線で調べて一番簡単そうだったのかこちらのサイト。
Processingを使った可視化
大まかに言うと、先ずArduino IDEでArduinoにスケッチを流し込み、そこからProcessingというソフトにデータを送って3Dアニメを表示するらしい。基本的には上述のページに書かれたとおりにすれば出来たが、表現がやや回りくどいのともう少し簡単にできる部分があったので、僕なりに手順を纏めてみた。
- ArduinoボードとMPU-6050ボードを図のように配線する(前回の配線とは多少違う)。
- 次のライブラリ(ZIPファイルへ直リンク)をダウンロードしArduino IDEにインストールする(libralyフォルダにコピーする)。
MPU 6050 by Jeff Rowberg
I2Cdev - インストールしたMPU6050_DMP6というスケッチをArduino IDEで開き、次の通り修正した上でArduinoボードに送信する。
#define OUTPUT_READABLE_YAWPITCHROLL
の部分をコメントアウトする。
//#define OUTPUT_TEAPOT
の部分のコメントを外す。 - シリアルモニタを開いて接続が成功したかを確認する。下記のようなメッセージが出てくればOK。
Initializing I2C devices...
Testing device connections...
MPU6050 connection successful
Send any character to begin DMP programming and demo: - Processingのページからソフトをダウンロードし、PCにインストールする。
- Processingの画面を開き「ファイル」>「開く」を選択。手順2でインストールしたMPU6050フォルダを選択し、以下Examples > MPU6050_DMP6 > Processing > MPUTeapotを選択。
- 開かれたMPUTeapotのコードを次の通り修正する(Windows環境の場合)。
String portName = “/dev/ttyUSB1”
をコメントアウトする。
//String portName = “COM4”
の行のコメントを外し、”COM4″の部分を自分の環境でArduinoボードが繋がっているポート(Arduino IDEの「ツール」>「シリアルポート」で確認できる)に変更する。 - 「スケッチ」>「ライブラリをインポート」>「ライブラリを追加」を選ぶとライブラリの一覧ウインドが現れるので、その中から「ToxicLib」というのを選択して「install」する。
(参照サイトではToxiライブラリをダウンロードしてProcessingのlibraliesフォルダにコピーするように書いてあるが、実は上記のやり方でOK。)
以上でセットアップは終了。以降、可視化を行う場合は、手順4のMPU6050_DMP6スケッチがArduinoボードに入ったままならArduino IDEは起動する必要はない(もし起動した場合はシリアルモニタは開かないでおく)。
そしてProcessingを起動しMPUTeapotを開いた状態から、ウインド左上の実行ボタンを押す。すると何秒か後に飛行機の3Dイラストが現れ、センサーボードの動きに反応するようになる。
可視化の実演
というわけで僕の環境でシミュレーションを行った際の動画がこちら。
飛行機のピッチとロール(センサーボードのx,y軸周り)はちゃんと反映されているものの、ヨー(Z軸周り)はセンサーを動かさなくても勝手に回転してしまう。
これは多分、Gセンサーが水平を把握してるからピッチとロールには絶対的な基準があるのに対し、ヨーはセンサーが水平のままグルグル回る方向なので(地磁気センサーでもない限り)基準が無く、データのゆらぎ(ドリフト)が累積して回転してしまうのだと思う。ただ複数のサイトに因るとその際の回転速度は1分間に1°程度とあるので、僕のケースは桁違いに大きな誤差が発生していることになる。
ところがその後、何度かシミュレーションの実行と停止を繰り返してみると、開始後十数秒でヨー回転が止まるようになった(下のビデオ)。また開始時のセンサーの向きが同じなら、飛行機は大体同じような向きで静止するようになった。