ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

arduinoコミュのMPU-9150について

  • mixiチェック
  • このエントリーをはてなブックマークに追加
arduino初心者のものです。
モーションセンサーのMPU-9150を使って、モノの移動情報を取ろうとしております。
例えば上に10cm上げた場合、静止状態から10cm上げて再び静止状態になったと言うような情報を取りたいと考えています。
スケッチをMPU6050_DMP6のOUTPUT_READABLE_REALACCELを利用してx,y,zの移動量を取りました。
ただ、卓上に置いているだけで取得できる値にブレがでます。

静止状態でブレのない情報を取得したいのですが、何か良い方法はありますでしょうか?

どなたかこの辺りに詳しい方はいらっしゃいますでしょうか?

コメント(9)

できません。

MPU-9150が検出しているのは角速度(ジャイロ)、加速度、地磁気です。
仮に10cmの移動距離を測りたいならば、距離計(超音波や光の反射)を使ってください。

昔の地対地ミサイルなどはこの3つのセンサーを使って、読み取り値を積分して位置を判断していましたが、かなり高度な補正処理を行っても誤差が多かったです。現在はGPS(の軍用データ)を使って精度は格段に高くなっています。

このセンサーとArduinoならば、1秒に50cm程度の誤差に抑えられたら大成功だと思います。

ちなみにこの様なセンサーを使ってマルチコプターの姿勢制御をしたりしますが、位置の維持や経路制御にはGPSを使います。(高度制御には気圧計や超音波距離計を使ったりします)
まぁ、やってみる事に意義があるかと…

センサ出力のブレ(ノイズ)を除去するためには、よく使われるのは移動平均フィルタかメジアンフィルタでしょうか。
いずれも、センサから得たデータを過去数回〜数十回くらい保存しておいて、移動平均はその平均値を、メジアンはその中央値を取り出します。

移動平均フィルタのほうが処理が簡単ですが、メジアンフィルタは急峻な変化に対しても反応が良く、突発的なノイズも除去できる等のメリットがあり、加速度センサのように短時間で値が変化するセンサーの出力処理には効果的なので、試してみる価値はあると思います。
あとは実際のブレの状況と出力の状況を見ながら、これらをうまく組み合わせるとか、過去のサンプル数を変えてみる(多いほどノイズは除去できるが応答が悪くなる)事でしょうか。このあたりのカットアンドトライがセンサ活用の面白い所でもあるかと思います。

次の問題はその結果から位置情報をどれだけの精度で計算できるかという事になるかと思いますが、まずはそれもやってみる事かと思います。
詳しい方、って書き込みだったので、実際にやってみた経験から冷たく書きました。

まぁ、やってみるのが無駄とは思いませんが、Arduino初心者が時間を無駄にするのもどうかと思ったので。

10cmの精度が出せたら是非教えてください。
色々お教えいただきましてありがとうございます。
実際経験された方の意見も大変ありがたいです。
基本的に難しいと言うことが分かっていれば、その前提で考えていく事ができます。

意見を下さった方々、ありがとうございました。
諦めも含め結論が出た時にご報告させていただこうと思います。
>>[5]
実は僕も似たような事をやってみた事があり、満足した結果が得られなかったという経験があります。
ただ、それがデバイスの精度から原理的に不可能なのか、それとも単に自分の技術力の無さ故なのか、そこまでは確認してません。でもいろいろ試行錯誤した上で作ったプログラムの一部はその後も役立ってます。ってことで#3のような書き方をさせて頂きました。
あとは、きちんと処理するだけでなく、いかに誤魔化すか…でしょうかね。結果オーライになるためのアイデアを盛り込む事も楽しいです。
では、私も少し自分の経験から...
最近のIMUセンサーは物凄く優秀です。少し前ならば、アナログで出力される計測値をアンプで増幅してからA/D変換して・・・って大変な努力が必要でしたが、今はアナログ部分は全てオンチップで処理され、補正なども実施している物がほとんどです。
でも、中身は超高精度センサーであることは忘れずに、取り扱ってください。

2年ほど前に、こちらの10DOF(私のは既にディスコン)
http://www.drotek.fr/shop/en/165-imu-10dof
で気圧センサーのMS5611で高度処理していたときのことですが、カタログデータでは10cmの精度があるはずなのに、データは3m程度、上下して不良品だとクレームしました。しかし、再度送られてきたセンサーでもほとんど違いなし。
確かに10cmの高度差を気圧で見るのは大変な事ですが、センサーの穴をふさいで気圧差が発生しない様にしても、結果は変わらず、あきらめかけていたのですが、ふと、電源を強化する事を思いついて、別電源にしたら、かなり改善。(50cm程度)
そこでオンボードの電源を無視して自分で安定化電源を実装しなおしたら、本当に10cm以下の5〜6cmの精度が出ました。

結局、いくらI2Cで出力していてもチップの中はアナログです。電源や周囲温度、電磁ノイズで測定精度が落ちるのを防ぐ努力は必要です。

MPU6050の加速度センサーも温度依存は結構ありますね。この様なチップも電源投入後、チップ自身の発熱安定するまでは測定がふらつくので、この辺りも考慮してください。
Y.Mitaさん
jtakaoさん

再度、大変貴重な経験談をありがとうございます。
電源なども重要なファクターなんですね。
ただ私は電源まで手は出ないかもしれません。

まずは現状でどの程度までできるかやってみようと思います。
ありがとうございました。
昨年は色々アドバイスをいただきましてありがとうございました。
方向性に結論が出ましたので報告させていただきます。

その後、色々試してみましたが時間的余裕がなくなってきたので、別のセンサーも試してみました。
要件として一定範囲内での動き(移動量)を取得できればよかった為、LeapMotionという赤外線カメラを使ったセンサーを使うことにしました。
このセンサーは2つの赤外線画像を解析して移動量を測定するもので、指や鉛筆のような物体も感知することができます。
今回は物体を感知する事で移動データを取得することができました。

やはりご指摘のように加速度センサー等は経験や知識が必要なのだなと感じました。
考慮すべきファクターも想像以上で、ちょっと現段階で私には扱いきれませんでした。
今回の件では利用を諦めましたが、少しずつでも研究をしてきたいと思います。

Y.Mitaさん、jtakaoさん アドバイスをありがとうございました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

arduino 更新情報

arduinoのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。