にほんブログ村 その他趣味ブログ 電子工作へ

2010年08月22日

Wii モーションプラスとArduino で方位検出

モッパーです。

「お父さんだって夏休みの自由研究がしたい!」第二弾です。もうやんないとか言っておきながら、やってしまいました。RCJ 夏合宿は家族が皆バラバラなところに行ってしまって参加出来なかったので、今日は一人で悶々とたまりにたまった個人的課題をこなしてました。これはそのなかの一つです。例によって長文ですみません。


RCJ サッカーでは磁気による方位センサーを使用して相手ゴール方向を判別するチームが多くありますが、会場によっては磁気環境が悪くて磁気センサーが役に立たないことがよくあります。このような場合にジャイロセンサーにより方位を検知出来れば有効であり、既に使用しているチームもあるようです。一般的に精度の高いジャイロセンサーは高価ですが、Wii モーションプラスに採用されている3軸ジャイロセンサーが流用できればとても廉価(実売価格 \1500 以下)で実現出来るため、トライしてみました。

  • ジャイロセンサーに関する前提知識

以下は今までジャイロについては素人の私がやっつけで学習したネタなので自信ありません。間違っている部分があれば是非ご指摘下さい!!!
現在廉価で手に入るジャイロセンサはほぼ全てレイトジャイロと呼ばれる、方位ではなく角速度(ロボットがどの程度の速さで回っているか)を出力するものです。このため方位を算出するためには角速度を積分処理する必要があります。誤解を恐れず簡単に言うと方位の精度を上げるためには出来る限り速い速度でジャイロが出力する値を読み取り、読み取った値の足し算をしていく必要があります。さらに角速度の 0 点(センサーが静止している状態での読み取り値)が温度等により変動するという問題、角速度の正方向と負方向での不均一性、G(加速度)の影響、アナログノイズによる影響といった色々な要因によって積分演算にエラーが蓄積して絶対角度がドリフトする(絶対角度が勝手に動いていく)という問題があります。簡単に言うと単純に角速度を足し算して求めた方位は必ずズレていきますので、それをどうやって防止するか・補正するかというのがレイトジャイロで方位を得るために必須な処理となります。適用したい対象(例えばレスキューとサッカーではロボットの速度も違うし衝撃や上下動があるかないかも違いますよね)によってドリフトの特性やドリフトに対する許容度が変わるので、それに合わせて異なる補正の手段が必要になることが難しいところです。


  • Wii モーションプラスについて
 Wii モーションプラスはなんといっても他のジャイロセンサーに比べて格段に安いことが利点です。秋月の村田製作所製 圧電振動ジャイロ(ジャイロスター)を使用したキットには価格面で負けます。ただし、秋月のキットは以前ちょっと実験してみたことがありますがアナログ的な LPF と HPF が入っている関係かドリフトをどうしても押さえ込むことが出来ませんでした。ロボカップジュニアサッカーに適用するためには、多分ジャイロスターを単体で使って回路設計しないと無理というのが当時の私の結論でした。今回の結論から言うと Wii モーションプラスではアナログ回路的な配慮は必要無く、ソフトウェア処理だけで RCJ サッカーに必要とされる精度の補正が出来そうです。(すんません。私はソフト屋なので...アナログ回路に詳しく積分回路とフィルター回路作れるならジャイロスターでも同等の精度が出せるかも知れません)
  • Wii モーションプラスと Arduino
Wii モーションプラスと Arduino の接続については、ネット上に豊富な実績があります。こちらのサイトは分解の仕方や結線方法も載っていてお勧めです。注意しないといけないのはネットで公開されている Wii モーションプラスを Arduino で処理するスケッチには間違っているものがよくあることです。 Pitch と Row を間違えていたり、Wii モーションプラスの FAST モードを考慮していないとか...私が調べた範囲ではこちらのサイトの情報が最も正しいようですので、これをじっくり読んで自分でスケッチ起こしたほうが速いかも知れません。また、公開されているスケッチより 0 点のキャリブレーションサイクルをもっと長めにとって慎重に初期化処理したほうが RCJ 用途では良いように思います。

  • 結果
で、実際やってみた結果ですが yaw 方向については Arduino でウェイト無しで I2C 経由のサンプリングぶんまわすと演算処理を含めても 0.5ms 程度の周期で精度の高い積算値のサンプリングが出来、さらにソフトウェアでごく単純な LPF を入れればまずまずの精度でドリフトが抑えられました。pitch と roll に関しては yaw 方向とは別のセンサーが用いられていることからか、yaw 方向とは異なった補正処理が必要となりそうでした。Wii リモコンには加速度センサーが既に入っており、それに対する補正と考えると yaw 方向の回転精度が最も必要とされるため yaw 方向のみ高精度なジャイロセンサーを選択したのかもしれません。
ともかく、Wii モーションプラスジャイロセンサーの yaw 方向はかなり簡単な補正処理で RCJ サッカーにとって有用なレベルの方位検出が出来そうです。もちろん、前述の通りロボットの運動能力や制御方法によって「使える/使えない」の判断や補正方法が大きく変わりそうなセンサなので、各チームで実際トライ&エラーしてみないと答えは出ないと思います。
また、Arduino 単体で他の色々な処理をしながら読み取って精度出すのは難しいかも...??? 読み取った結果を I2C 液晶に出力(10msくらい?)するだけでも精度落ちましたから。

  • その他
本題と関係ないですが、廉価なジャイロセンサーは「コリオリの力」を使っているものが多いようです。非常に小さな振動子に対するコリオリの力を検出して角速度を検出するとのこと。コリオリの力って、私は恥ずかしいことに「フーコーの振り子」とか北半球と南半球で台風の渦の向きが違うとか、移動している物体が地球の自転により受ける影響のことだと約30年間思い続けてきましたが、そうではなくて地球の自転以外の移動体に対する影響のことも含めたことなんですね。とても勉強になりました。
posted by モッパー at 20:49| Comment(7) | TrackBack(0) | センサー
この記事へのコメント
モッパー様

Reverse父です。夏合宿から帰ってきました。3日間スタッフと帰りの運転でぐったりです。

「お父さんだって夏休みの自由研究がしたい!」第2弾,来ましたね。やっぱりジャイロですね。いい情報ありがとうございます。

夏合宿でReverse姉がシニアの先生に「磁場が悪いときに何とかならないか」と質問しましたが,答えはやはりジャイロでした。
やはりジュニアでは価格的に手頃なジャイロスターかモーションプラスでなんとかしたいところですね。そう思って,こんなところを参考にうちでもいくつか試してました。

http://moyane.blog25.fc2.com/blog-entry-295.html

http://jr1wfhbbs.at.webry.info/

ジャイロ2つ貼り合わせは効果ありそうですが,価格的にNGです。ジャイロスターのHPFのコンデンサバイパスはやりましたが,ドリフト補正は相当難しそうです(1〜2分くらいならなんとかなるので,ゴール毎に方向リセットすればなんとかなるかな,というくらいです)。時々コンパスで補正を入れるとか,工夫が必要ですね。

モーションプラスは次のネタとしてブツは仕入れたところでした。そこそこ使えそうということでぜひ(本人に)やってもらおうと思います。ArduinoのI2Cは100kなので,ちょっといじって400kにした方がいいかもしれませんね。あと,ジャイロ専用にマイコン積んだ方が良さそうですね。
Posted by Reverse父 at 2010年08月23日 12:30
モッパー様

夏合宿の思い出はまたの機会に(^^)

さて、ここまでくると小学生の初心者レベルからは遠く離れるのですが、非常に興味あります。

姿勢制御の大切さは、ちょっとRCJJをかじったものであれば容易にわかりますし、磁気検出型の欠点もありますし・・・

ただ、私の浅い知識ではサンプリングが間に合わないからダメだろうと勝手に思い込んでいましたが、使えそうなのですね。

そうなるとまた面白いことになりますね。

大人リーグ開催時にはジャイロ搭載したマシーンが登場することを期待します。

Posted by union12の父 at 2010年08月24日 14:55
Reverse父様、union12の父様

モッパーです。

他の方々も含めて夏合宿大変お疲れ様でした。あちこちのサイトにコメント書き込もうかと思いましたが時間的に無理だったので、この場を借りて申し上げます。夏合宿でのスタッフ/メンター各位の献身的なご活躍には全く脱帽しております。私も機会があれば是非参加したいと思います。是非とも今回の合宿の情報公開をお願いします...

モーションプラスの件、記事書いた後もちょっと評価続けてますが、現時点の結果では 0点キャリブレーション結果(=角速度原点)の変動が結構あることと、さらにその後もゆったりと変動していく DC 成分がドリフトに繋がる主要因のようなので、変な周波数フィルター入れるよりは 0 点キャリブレーション の精度アップ と DC 成分のキャンセルがキモのようです。

ただし、私はロボットが常に相手ゴールに正対しようとするタイプである前提のテストしかしてませんのでグリングリン回るタイプでどうなるかは分かりません。また、実際にロボットに搭載した時間は少なく、後はほとんど「手でセンサーグリグリ」でのシュミレーション結果なので、やってみて出来なくても怒らないで下さいね !!!

出だしの精度は磁気センサよりはるかに高いので、Reverse父様 のおっしゃる通りなるべく頻繁に他の手段を使って絶対方位の補正が出来ればベストです。大量得点出来そうな相手にはジャイロだけで対応し、スレスレの戦いは磁気 + ジャイロとかそういう戦略もアリかも知れません。

ジャイロは動作原理の理解から始まって訳の分からない検出誤差の分析と克服とか、実際に技術系社会人の実務に直結するネタが満載です。例え結果的に失敗したとしても中学生〜高校生あたりにやってもらうには絶好の課題だと感じました。
変なフィルタ入れなければやること自体は大変単純(足し算だけ)なので、小学生でも出来そうに思います。サッカーの相手ゴール正対タイプは倒立振子とほとんど同じ制御ですし。

私は、明日からやっと家族全員揃っての夏休みで通信環境の全く無いところに数日行ってきます。やたっ、たまには会社業務の通信に追われない環境にいないと精神的に死にそうですから...リフレッシュしてきまーす !!!
Posted by モッパー at 2010年08月24日 20:51
モッパー様

Wii モーションプラスの情報をありがとうございます。
 二足歩行用のジャイロやNXT用のジャイロは使用中ですが、Wiiは盲点でした。
 早速、購入してみるつもりです。

 RCヘリ用のAVCSジャイロ(FUTABA等)もなかなか使えると思いますが...
Posted by チームS工 at 2010年08月30日 01:09
チームS工様、こんばんは。

今回、AVCS ジャイロも検討はしてみたのですが、日本製のものはお値段から諦めました。国産をパクった某国製らしき安物も出回っており、お値段的にはまずまず OK でしたが、品質と長期安定供給に対する不安があって見送りました。
ちなみにNXTのジャイロ(HiTechnicのやつですよね ?)にも大変興味あります。使いものになっているか、もし良ければ教えて頂けますでしょうか ?
Posted by モッパー at 2010年08月31日 22:48
モッパー様、こんばんは。
返答ありがとうございます。
HiTechnicのジャイロですが、とりあえず3つ購入してみたのですが、個体差(ドリフト)がやや大きいようです。

 効用のほうは...センサ素子自体の応答速度が関係するためでしょうが、方位センサより使えると感じています。
 NXT-Gで使用したのですが、希望する角度に旋回する場合、方位センサはモーターのパワーを50%程度にしないとセンサの反応が追いつかずにグルグルと回り続けてしまいますが、ジャイロだと100%でもピタリと止まってくれます。
 サッカーの場合は車体に衝撃があるので、
方位センサによる定期的補正をいれられればより精度がますのではないでしょうか。
Posted by チームS工 at 2010年09月01日 21:54
チームS工様

私の不躾な問いにお答え頂き大変ありがとうございます。
ご指摘頂いたセンサ個体差の問題、G(衝撃) の問題等を克服し、方位センサ等による補正も含めて精度アップしないといけないものの、色々な問題を苦労して克服していく価値のあるセンサのようですね。
Posted by モッパー at 2010年09月02日 22:18
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/40317825
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
にほんブログ村 その他趣味ブログ 電子工作へ