連載
» 2013年06月03日 09時30分 UPDATE

マイクロマウスで始める組み込み開発入門(14):センサーで壁の有無を判断し、迷路内を自律走行!! (1/3)

市販の組み立てキットで「マイクロマウス」の開発を進めている北上くんとえみちゃん。これまで開発してきたプログラムをベースに、センサーで迷路内の壁の有無を判断しながら、マイクロマウスを自律走行させる。果たしてうまく走ることができるのか!?

[三月兎,MONOist]

前回までのあらすじ

 組み込み技術者に要求される要素が“ギュッ”と詰まった「マイクロマウス」。北上くんと新入社員のえみちゃんは、スキルアップを兼ねてマイクロマウスを開発中です。北上くんの熱血指導の下、えみちゃんもマイコン制御の基礎技術を一つ一つ学んできました。そして、ようやくマイクロマウスが走り始めたのでした……(前回の記事へ)。


本連載の登場人物

ay_mouse01_man1.jpg
北上 篤人(きたがみ あつと)
26歳、男性。次期プロジェクトリーダーとして期待されている(と、本人は思っている)。専門は、ソフトウェア開発。電気回路やハードウェアに苦手意識を持っていて、いつか克服したいと考えている。

ay_mouse01_woman1.jpg
物江 えみ(ものえ えみ)
22歳、女性。この4月に入社したばかりの新入社員。C言語は大学の授業で学んだ程度なので、仕事についていけるかどうか不安を抱えている。性格は明るく、好奇心旺盛。早く一人前になりたいという強い熱意を持っている(ようだ)。



マイクロマウスの走行調整をする

――ピンポーン!(チャイムの音)

えみ

こんにちは〜。


北上

えみちゃん、いらっしゃーい。


えみ

センパ〜イ!! 早速マイクロマウスを走らせましょうよ。ワタシ、迷路内をクルクルと走り回るところを早く見てみたいんです!


北上

そうだねー。その前にもう少しだけ調整しておこうね。


えみ

えぇ〜っ!! ここまでできたら、後はチャチャッとセンサーを見て、自由自在に走るんだと思ってたのに……(ガーン)。


北上

そうなったらいいよねー。そのために、先にやっておいた方がいいことがあるんだよ。


えみ

じゃあ、すぐにやりましょう!


北上

よし! チャチャッとやっちゃおうか!!



 これまでの内容でようやくマイクロマウスの「前進」「旋回」ができるようになりました。えみちゃんは早速、迷路内を走らせるつもりでいたようですが、北上くんが言うように、その前にやるべきことがあります。

 ロボットを正確に動かすためには、「機体性能」「調整」「制御」の3つのポイントを押さえておかなければなりません。本稿では、市販の組み立てキット「Pi:Co Classic」を使用しているので、機体性能は保証されています。残りの調整と制御をしっかりと行えば、ロボットを思い通りに動かせるはずです。

 前回、マイクロマウスが迷路の1区画(180mm)分だけ前進し、90度旋回する動作を確認しました。しかし、現時点では、“微調整”ができていません。今、走行パラメーターに与えているのは、データシートから得た数値です。

 Pi:Co Classicのタイヤの直径は、データシートによると48mmです。この数値には、タイヤの厚みの誤差、タイヤの摩擦や車体の自重によるタイヤのゆがみなどが考慮されていません。そのため、理論上180mm移動するはずでも、数mmの誤差が生じてしまいます。

 センサーで周囲の状況を判断しながら自律走行するのだから、多少の誤差があっても大丈夫! ……という考えは捨てましょう。ここでの調整をおろそかにすると、制御でカバーし切れなくなります。逆に言えば、きっちりと調整してからプログラムで制御することで、速いスピードで迷路内を走れるようになるのです。

 今回の調整に必要なのは、「180mm前進」「90度旋回」の2点です。これは実際に走らせてみて、パラメータを微調整しながら合わせていくしかありません。ここでどこまで調整できるかが、マイクロマウスの性能に影響するので、じっくりと時間をかけて取り組みましょう。

 調整は、(1)前進、(2)旋回の順番で行います。前進のときに必要となるパラメータは、タイヤの直径だけです。旋回では、それに加えてトレッド幅も必要です。前進のパラメータが旋回にも影響するので、この順番を守ります。

 調整にはいろいろなやり方や考え方があります。例えば、筆者のチームでは、前進を調整する際は、スタート地点を一定にし、なるべく長い距離を走らせて調整するようにしています。

 旋回は、90度回転しただけでは誤差の測定が困難です。そこで、90度旋回を16回行います。つまり、4回転させて“ズレ”を計ります。

 それでは、調整前後の様子を動画1で確認してみてください。


 調整の結果、パラメータは下記のようになりました(ソースコード1)。先ほどの動画1を見てお分かりの通り、タイヤの直径は大きな誤差がなかったので微調整で済みましたが、トレッド幅はかなりの修正が必要でした。

//Pi:Coの物理的なパラメータ
#define TIRE_DIAMETER    48.5          //タイヤの直径(mm)=48.0mm
 
#define TREAD_WIDTH      68.7          //トレッド幅(mm)=64.0mm
ソースコード1 「ctrl.h」の物理的パラメータを修正。コメントはデータシートの情報を記述

センサー値を取得して、壁の有無を判断するプログラム

えみ

機械って、必ずしもデータシート通りに動くわけじゃないんですね。


北上

そうなんだよ。いろいろな物理的条件が加わるからね。


えみ

センサーを搭載しているんだから、ちょっとくらいズレても大丈夫だと思ってました。


北上

人間にとって数mmは“ちょっとの違い”でも、マイコンにとっては“大きな違い”ってことだよ。


えみ

マイコンの気持ちになることが大事なんですね! 自分で作ってみて、初めて分かりました。


北上

その通り! 実際にモノを作って動かすっていう経験は大切なんだ。

それじゃあ、走りながらセンサー値を取得して、壁の有無をチェックしてみようか。


えみ

はいっ!!



       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.