明日は、待ちに待った高専ロボコン関東甲信越地区大会の日です。
都立産技高専のHPを見ていたら・・・ロボコンの大会チラシのPDFが掲載されていましたので、リンクしておきます。
明日は、待ちに待った高専ロボコン関東甲信越地区大会の日です。
都立産技高専のHPを見ていたら・・・ロボコンの大会チラシのPDFが掲載されていましたので、リンクしておきます。
ある日、突然ひらめきました。
NXTのロボットで壁を検知するためには、タッチセンサーを使うのが一番確実です。
でも、タッチセンサーを使わずに、それを検知できるのではないか・・・と。
勿論、超音波センサーなどの測距センサーを使う・・・というオチではないです。
さらに、光センサーとか・・・カラーセンサーも使いません。
もっと正確に書くと、入力ポート(センサーポート)には何も接続しません。
出力ポート(モーターポート)には、NXTのサーボモータを2個接続します。
もう、ここまで書けば判っちゃいますね。
Mindstorms NXTのサーボモーターには、回転センサー(角度センサー)が格納されています。
だから、モーターがどれくらい回転したかを知ることができます。
もし、ロボットが壁にぶつかって、車輪が回転しなくなれば、それを検知して「壁にぶつかった」という判断ができるのではないでしょうか。
サンプルのプログラムを掲載しようと思ったのですが・・・
(皆さんに考えて欲しいので、やめました。)
ヒントは
MotorTachoCount( OUT_A );
MotorTachoCount( OUT_C );
で、それぞれのモーターの回転角度がわかります・・・
一定時間のモーターの回転数(回転角)が変わっていなければ、車輪が停止(=モーターが停止)と考えて壁に当たったと判断します。
壁に当たった瞬間、モーターがうなるのが精神衛生上良くないですが・・・目的の動作はします。
(壁に当たってもタイヤが空転したら、この方式は使えませんけど・・・)
実用的なテクニックなのかどうかわかりませんが・・・
実際にやってみると・・・
センサーポートに何も接続していないのに、何かにぶつかったら止まるロボットって・・・不思議!
この方式を使うと、前進だけでなく後進でも検知できるので、ロボットの前後のタッチセンサーを省略できますねぇ。