課題:ライン・トレース・ロボット

<目次>

課題条件

2カ所以上の交差点のあるレースをA0版の紙に描き、そのコースに沿って3周するロボット(2台)の作成

・速さと正確さの追求

・優先道路での走行は、優先側はそのまま直進して、優先でない側では一時停止をすること

・接触した場合は、3秒間待つか、そ0の場で360度旋回か、5秒間コースを逆走する

コース紹介

コース.jpg

3つの交差点を作り、直線はあまりないが、カーブが多めのコースである。

交差点の近くにもカーブがあり、そこでコースを外れてしまう為、工夫を要した。

交差点には2つのロボットが衝突しないように一時停止をするようになっている。

ロボット紹介

タッチセンサーの位置

タッチセンサー.jpg初期     →            banpar.jpg改良後

はじめは、左図のようなバンパーであった。しかし、バンパーの上や下にもう一方のロボットが接触した場合に反応しない場合があった。そのため、右図の様な構造を取り入れて、反応する範囲を広げた。すると、感度がよく、幅が広いため多少ぶつかる位置がずれても反応するようになった。

光センサーの位置

071206_1747~02.JPG zentaizu.jpg

はじめの光センサーの位置はもっと前で設置していたが、このコースを

見ての通りカーブが多数あるので、小回りが出来るだけきくように

タイヤにできるだけ近づけた。

プログラム紹介

 #define THRESHOLD 35          //  明るさ設定
 #define RUN_TIME 1800            //  3周の時間 (接触なしの場合)  

task main ()
{
    SetSensor(SENSOR_1,SENSOR_LIGHT);    //  センサー1は左の光センサー   
    SetSensor(SENSOR_2,SENSOR_TOUCH);  //  センサー2は中央タッチセンサー
    SetSensor(SENSOR_3,SENSOR_LIGHT);    //  センサー3は右の光センサー

    ClearTimer ( 0 ) ;              //  ストップウォッチ スタート

    while  (  Timer (0)  <=  RUN_TIME  ) {

      if  ( SENSOR_2  ==  0 ) {             //  タッチセンサー反応なしの場合

         if  ( SENSOR_1 >  THRESHOLD ) {
                   if ( SENSOR_3 > THRESHOLD ) {      //  白白で直進
                            OnFwd ( OUT_C+OUT_A ) ;
                   }   else  {                        //  コース修正
                            OnFwd ( OUT_A ) ; 
                            OnRev ( OUT_C ) ;
                   }
         }  else  {
                   if ( SENSOR_3 < THRESHOLD ) {      //  黒黒で一時停止
                            Off ( OUT_C+OUT_A ) ;
                            Wait ( 45 ) ;
                            OnFwd ( OUT_C+OUT_A ) ;
                            Wait ( 95 ) ;
                   }  else  {                         //  コース修正
                            OnFwd ( OUT_C ) ;
                            OnRev ( OUT_A ) ;
                   }
         }
    }

         else {            //  タッチセンサー反応    
            OnRev ( OUT_C+OUT_A ) ;       //  バック
            Wait ( 120 ) ;
            Off ( OUT_C+OUT_A ) ;
            Wait ( 100 ) ;
            OnFwd  ( OUT_C+OUT_A ) ;
            Wait ( 120 ) ;
   }
 }
}

このプログラムでは、まず光の明るさを設定する(#define THRESHOLD 35)ことにより、センサーが白と黒を 判断できるようにする。光センサーは写真に載っているようにラインの幅よりも少し広めにして、左右に置かれている。この2つの光センサーが両方とも白を探知した時、真っすぐに進む。そして右の光センサーが黒を探知したら、右に曲がり、逆に左の光センサーが黒を探知したら、左に曲がるようになっている。 両方とも黒を探知したら、一時停止をして、もう一方のロボットの進行を妨げないようにしている。 そして、もう一方のロボットにぶつかったら、バックするプログラムになっている。 タイマー(#define RUN_TIME 1800)は3周する時間を設定して、終わったら止まるようになっている。

工夫

・光センサーと本体をできる限り近づけ、小回りが効くようにした。

・もう一台のLEGOとぶつかったとき、反応がよくなるようバンパーを変えた。

・プログラムをif,elseを使うことにより明瞭にした。

感想

プログラムが思ったように作れず、苦戦した。かっこを多用したところ、複雑になってしまいどこが間違っているのかわからなくなることもあった。本体はうまく作れたが、LEGOのテキストにはあくまで基礎的なことしか載っていないので最初はどのような作りにすればよいかと惑った。 

コメントをどうぞ
  • 初めて見た人でも、どういう仕組みでラインとレースが行われているかのかがわかるような説明を加えましょう。 -- まいける(TA) 2008-01-23 (水) 15:30:54
  • 機構の説明が不足しています。 -- クノ? 2008-01-31 (木) 22:20:14


添付ファイル: fileコース.odg 153件 [詳細] filezentaizu.jpg 209件 [詳細] filebanpar.jpg 214件 [詳細] file071206_1747~02.JPG 226件 [詳細] file071206_1747~01.JPG 115件 [詳細] fileタッチセンサー.jpg 211件 [詳細] fileコース.jpg 214件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-02-11 (月) 09:13:28 (4205d)