ある日、突然ひらめきました。
NXTのロボットで壁を検知するためには、タッチセンサーを使うのが一番確実です。
でも、タッチセンサーを使わずに、それを検知できるのではないか・・・と。
勿論、超音波センサーなどの測距センサーを使う・・・というオチではないです。
さらに、光センサーとか・・・カラーセンサーも使いません。
もっと正確に書くと、入力ポート(センサーポート)には何も接続しません。
出力ポート(モーターポート)には、NXTのサーボモータを2個接続します。
もう、ここまで書けば判っちゃいますね。
Mindstorms NXTのサーボモーターには、回転センサー(角度センサー)が格納されています。
だから、モーターがどれくらい回転したかを知ることができます。
もし、ロボットが壁にぶつかって、車輪が回転しなくなれば、それを検知して「壁にぶつかった」という判断ができるのではないでしょうか。
サンプルのプログラムを掲載しようと思ったのですが・・・
(皆さんに考えて欲しいので、やめました。)
ヒントは
MotorTachoCount( OUT_A );
MotorTachoCount( OUT_C );
で、それぞれのモーターの回転角度がわかります・・・
一定時間のモーターの回転数(回転角)が変わっていなければ、車輪が停止(=モーターが停止)と考えて壁に当たったと判断します。
壁に当たった瞬間、モーターがうなるのが精神衛生上良くないですが・・・目的の動作はします。
(壁に当たってもタイヤが空転したら、この方式は使えませんけど・・・)
実用的なテクニックなのかどうかわかりませんが・・・
実際にやってみると・・・
センサーポートに何も接続していないのに、何かにぶつかったら止まるロボットって・・・不思議!
この方式を使うと、前進だけでなく後進でも検知できるので、ロボットの前後のタッチセンサーを省略できますねぇ。
NXTのセンサーポートは数が限られていますので、
こうやって感知出来ればすごいなと思いました。
親子で頭を捻りながら考えてみます♪
さっそく反応してくださって、大変うれしいです。(笑)
自分では「世紀の大発見」と考えています。(大笑)
このアイディアは誰でもが使えるのではないかと思っています。(本当かいな?)
いろいろやれるようになると、NXTの4個しかないポート数がネックになりますよね。
でもこの実験をして、改めてNXTの素晴しさを実感しました。
このアイディアは思いつくのですが
タイヤやキャタピラが空回りしてしまうので使ってません。
まぁそこまでしてセンサーポートが足りないことはないですけど。
今ぼくはセンサーの重ね技を考えてます。
本文にも書いてあるとおり、駆動輪が空転してしまうとこの技?は使えません。
特に、クローラでは空転してしまうでしょうね。
センサーの重ね技を研究中とのこと、頑張ってください。
M&Yにも秘密裏に研究した重ね技があります。
(まあ、重ね技というか・・・・)
これもいつか発表したいと思います。(てへっ)
重ね技の研究頑張って下さい。
答えが出たら教えてください。
それまではM&Y父にブログでは発表させないようにします。
早くしないと・・・・
ロボット杉並21の説明会で説明しちゃうかも・・・><
このアイディアは・・・M&Y父としては世紀の大発見と思っていたのですが・・・
NXTソフトウェアに(サンプルとして?)既に存在していたようです。
「モーターバンパー」という名前らしいです。
それを聞いたときには、ガックシだったのですが・・・
アイディア自体は公知でしたが、自分で考え出したことが大切なんだ、気が付きました。(てへっ)