Arduino(Genuino)101の6軸センサーから角度を算出してProcessingで可視化してみました。公式サイトの「Curie IMU Orientation Visualizer」というチュートリアルを参考にしてます。
Genuino101の6軸センサーの取得値をMadgwickのフィルタリングアルゴリズムを通して角度算出します。その角度からProcessingで可視化しているものです。
使い方は簡単です。チュートリアルにあるスケッチをそのまま使用するだけです。ただチュートリアルにあるスケッチをそのまま使用してみましたが動きの追従があまりよくなかったです。Genuino側スケッチのセンサー感度やサンプリング周波数等を調整しました。Processing側のスケッチはほぼそのまま使用してます。
▲調整後の動画です。いい感じで動きが追従してます。ただ暫く動かしていると、yaw軸(z軸)方向のずれが発生するのと、素早い動きでおかしな動きが発生しました。
外付け部品いっさい無しでここまでできるのはうれしいです。
▼その他のレポート記事はこちらから▼
・Genuino101の加速度センサーを試してみる
・Genuino101のジャイロスコープを試してみる
・Genuino101の内蔵6軸センサーをMadgwickライブラリから試してみました
コメント
Genuino側スケッチのセンサー感度やサンプリング周波数等を調整しました。
と書かれておられますが、いろいろやってみたんですが
思うように追随しないです
もし、よろしければ、センサー感度、サンプリング周波数をどんな値にすればよいか、ご教示いただけると
ありがたいです
よろしくお願いいたします
としさん。こんにちは。コメント有難う御座います。
修正した箇所ですが、
・シリアル通信のボーレートはSerial.begin(9600)に設定。
を”115200″(processing側も)にあげる。・感度 int factor を
“6000”“7500”にする。・サンプリングは加速度、ジャイロをそれぞれ
CurieIMU.setAccelerometerRate(1600);//1600Hz
CurieIMU.setGyroRate(3200);//3200Hz
にして、追記してます。
投稿内の動画は記憶曖昧ですが、確かこの設定で行ってます。
ありがとうございます。
参考にさせていただきます。
こんにちは。修正した数値ですがすみません。
気になって確かめたところ違っておりました。
修正しましたので再度確認下さい。少しは追随がましだと思います
参考ですが、Curieライブラリのmadgwickフィルターは動作がいまいちで
結局私はカルマンフィルター使用して姿勢検出してます。
修正のご連絡ありがとうございます
もう一つ質問させてください
各センサーのレンジは、以下でよろしいので
しょうか?
CurieIMU.setGyroRange(250);
CurieIMU.setAccelerometerRange(2);
よろしくお願いいたします
各センサーのレンジは
CurieIMU.setGyroRange(250);
CurieIMU.setAccelerometerRange(2);
で問題ないと思います。
ただデフォルトでこの設定かと思いますので
私はスケッチで記述はしていないです。
Curieライブラリのmadgwickフィルターはいろいろ癖がありそうです。
がんばって下さい。
お返事ありがとうございます
Curieライブラリのmadgwickフィルターを使って
いろいろやってみていますが
yaw pitch rollの値が想定している値より
20分の1くらいの小さな値しか得られず
しかも、yawのドリフトが大きく
使い物になりません
このライブラリを全く使わずに、カルマンフィルター
のライブラリのみで、yaw pitch rollの値を得ることが
できますでしょうか?
よろしくお願いいたします
私も最初madgwickフィルターライブラリをいろいろ弄っておりましたが
ライブラリの中身が私には難解で断念しております。
またyaw軸ですが6軸センサー(ジャイロ、加速度)ではドリフト補正は恐らく困難かと思います。
別途、地磁気センサー等の補正が恐らく必要かと思います。
madgwickライブラリは使用せずにroll、pitch、yawの値を取得するのは可能です。
説明が長くなってしまうため、下記にスケッチをアップしておきます。
roll、pitch軸のみをprosessingでビジュアル化してます、
CurieIMUのみで実現してます。yawの値も取得はしてますが補正していないためドリフトがすごいです。
roll、pitchのドリフト補正はカルマンフィルターを使用してます。
ダウンロード頂き中身をご確認下さい。prosessingスケッチのポートはご自身のポートへ合わせて下さい。
prosessingスケッチですが私の環境では微妙にレスポンスが悪いです。
「再生」後、一度「停止」、再度「再生」するとレスポンスよくなります。
コメント失礼します.
いつも参考にさせていただいております.
今回,madgwickライブラリは使用せずにroll、pitch、yawの値を取得しようとがんばっているのですが,うまく角度の算出がされません.
もしよければ,madgwickライブラリを使用していないスケッチがまだあれば再度アップしていただけないでしょうか.
また,同時にprosessingスケッチもお願いしたいです.
よろしくお願い致します.
コメント有難う御座います。
会社勤めしているため返信が遅くなりました。
ソースを下記にアップしておきますので確認してみて下さい。暫くupしておきます。
yaw軸(z軸)の値はジャイロから算出はしてますが補正はしていないためドリフトはすごいです。ビジュアル化はしてません。
Processingの3D表示がうまくいかない場合は
void settings() {
size(1200, 720, P3D);
}
void setting()内に記載してあるsize()をvoid setup()内に移動してみて下さい。
お忙しい中,ご丁寧にありがとうございます.
参考にさせていただき,解決するよう頑張ります.
今後とも記事の更新楽しみにしています.
本当にありがとうございました.
ありがとうございます
丁寧に、ソースまでアップいただき
本当にありがとうございます
参考にさせていただいて、頑張ってみます
ちなみにgenuinoにMPU6050を接続して
DMPのデータを使うとうまくいくのですが
途中で6050からデータが出なくなって
断念しました
スケッチを試させていただきました
ありがとうございます
roll、pitchが、角度としてドリフトせずに
得られました
ありがとうございます
yawの値は、いろいろ調べると
yaw = atan2(ax,ay)*180/M_PI
と書いてあったり
複雑なsin cosの関数だったりするのですが
axとayの関数じゃないかと思うのですが
よくわかりません
yawを求める式の参考になるサイトは、
ありますでしょうか?
お忙しいところすみません
お手すきの時間がございましたら
ご教授いただけると、ありがたいです
よろしくお願いいたします
無事にroll、pitchが取得できたようですね。
yawに関して、
加速度センサーから水平面とのなす角は計算できると思います。
ただyaw軸廻りの回転角ではないため恐らく目的の内容ではないかと思います。
ジャイロからは積分計算でyaw += gz * dt;で回転角が算出できますが
ドリフト補正が6軸センサー(加速度、ジャイロ)では困難かと思います。
Genuino101のみでは困難ではないでしょうか。
加速度センサーからの角度計算は
http://www.analog.com/media/jp/technical-documentation/application-notes/AN-1057_jp.pdf
http://garchiving.com/angle-from-acceleration/
この辺りを参考にしてはどうでしょうか。
yaw軸廻り角に関しての補正は一度断念しております。
もう少し自分でもやってみようと思います。
うまくできましたら記事に投稿させて頂きます。