2006a/A6

課題2:黒い線に沿って動くロボット

ページ作成/編集:A6L ALL member and more...

▽INDEX▽

与えられた課題とは?

黒い線に沿って動くロボットを作成せよ。 そして一つの周回コースを2台のロボットが走行すること想定し、

以下の2種類のプログラムを作成せよ。 前方のロボットに接触したら反転して進む

前方のロボットに接触したらそのロボットを右側から追い抜いて (あるいは避けて通り)、再びライン上に戻って進む

ただし、スピードと確実性をできる限り両立させること。 自由課題1も参考に。光センサは2つ使用してよい。

ライントレースする作品の変遷

34.3KB,ヨ○シーヨ○シー    →      31.1KB,カ○ビー カ○ビィー

変遷した理由

上記の写真ヨ○シーを見てくれればお分かりになると思うのだが、

90度以上のカーブが多く大変曲がりにくいもので特に尻尾の部分が著しく、

ロボットが右往左往するはめになったので、変遷せざるを得なくなった。

変遷後

変遷後は、ヨ○シーに比べてカーブするには難しい曲線の具合を緩くし、

大分ロボットがスムーズに動くようになった。この作品カ○ビィーをライントレース することにしたい。

ロボットの外観

ロボット制作者:カトゥー、ヨコチン

dscn2598_Small.jpgdscn2599_Small.jpg

特徴

見た目はシンプルな形で光センサーを2つ利用したロボット。
ロボットの前にバンパーを着けたことによってタッチセンサーが働きやすい。

工夫&苦労した点

始めは光センサーを1つだけ使ったロボットを作ろうとしたが、ラインから外れると元に戻るのに時間がかかってしまったので
光センサーを2つ使って黒いラインをはさむように工夫することによってロボットがラインから外れないように成功した。
光センサーがあたると始めのプログラムではロボットが少し回転するだけだったのでコーナーになると反応しすぎて時間が
かかってしまっていたので回転に時間を少し加えることによって速さを出来るだけ追求した。
ロボットの前につけたバンパーによってロボットが正面にあるものならどう当たってもタッチセンサーが働くようにした。

問題点と反省

まとめ

物事何をするにしても紆余曲折あり、ということを前回もそうだが、
今回は身にしみて感じた。ロボットやライントレースする作品が完成したからと言って万事OKということでもなく、
そこから問題点・改良しなくてはいけない点などを見つけ、試行錯誤しなくてはいけないことを、このゼミで改めて思い知らされた。

今後の課題に向けて……

今回ロボットの作成にあたってみんなの都合が会う日が少なかったため完成が前日になってしまい本番で使うコースを
走らせるのが発表当日になってしまったので今後はそのようにならないように課題が出されてからできるだけ早い日に
集まるようにしたい

プログラム

全プログラム責任者:まさ

反転

作成・協賛/まさ・ヨコチン

#define THRESHOLD 35   
task main ()
{
   SetSensor(SENSOR_1, SENSOR_LIGHT);    //センサー1を光センサーとする
   SetSensor(SENSOR_2, SENSOR_LIGHT);   //センサー2を光センサーとする
   SetSensor(SENSOR_3, SENSOR_TOUCH);   //センサー3をタッチセンサーとする 
while(true){                          //無限ループ
      if (SENSOR_1< 45){                 //センサー1が45未満なら
        Off(OUT_A+OUT_C);              
        OnFwd(OUT_C);            
        OnRev(OUT_A);
        Wait(15);                          //0.15秒左回転
      }
    
     if (SENSOR_2< 45){                    //センサー2が45未満なら
        Off(OUT_A+OUT_C);                    
        OnFwd(OUT_A);                     
        OnRev(OUT_C);
        Wait(15);                          //0.15秒右回転
      }
    if  ((SENSOR_1> 45)&&(SENSOR_2> 45)){  //センサー1とセンサー2がともに45より大なら
             OnFwd(OUT_A+OUT_C);           //前進
         }      
   if  (SENSOR_3 == 1)                     // センサー3が押されたら
         {     
        OnFwd(OUT_A); 
        OnRev(OUT_C); 
        Wait(174) ;                        //1.74秒右回転
        OnFwd(OUT_A+OUT_C) ;               //前進
         }           
     }
}

追い越し

作成・協賛/J・カトゥー

#define THRESHOLD 35   
task main ()
{
   SetSensor(SENSOR_1, SENSOR_LIGHT);   //センサー1を光センサーと宣言する
   SetSensor(SENSOR_2, SENSOR_LIGHT);      //センサー2を光センサーと宣言する
   SetSensor(SENSOR_3, SENSOR_TOUCH);      //センサー3をタッチセンサーと宣言する
while(true){                               //無限ループ
      if (SENSOR_1< 45){                   //センサー1が45未満なら
        Off(OUT_A+OUT_C);               
        OnFwd(OUT_C);            
        OnRev(OUT_A);  
        Wait(15);                          //0.15秒左回転
      }
    
     if (SENSOR_2< 45){                    //センサー2が45未満なら
        Off(OUT_A+OUT_C);                    
        OnFwd(OUT_A);
        OnRev(OUT_C);
        Wait(15);                          //0.15秒右回転 
      }
   if  ((SENSOR_1> 45)&&(SENSOR_2> 45)){   //センサー1とセンサー2がともに45より大なら
   OnFwd(OUT_A+OUT_C);                     //前進
         }    
     if  (SENSOR_3 == 1)  {                // センサー3が押されたら
   OnFwd(OUT_A);              //ここから追い越し
   OnRev(OUT_C); 
   Wait(95);                               //右折
   OnFwd(OUT_A+OUT_C);
   Wait(90);                               //直進
   OnFwd(OUT_C);
   OnRev(OUT_A); 
   Wait(80);                               //左折
   OnFwd(OUT_A+OUT_C);
   Wait(130);                              //直進
   OnFwd(OUT_C);
   OnRev(OUT_A); 
   Wait(45);                               //左折
   OnFwd(OUT_A+OUT_C);
   Wait(60);                               //直進
    }
   }
  }

A6へのアドバイス



添付ファイル: filedscn2599_Small.jpg 284件 [詳細] filedscn2598_Small.jpg 248件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-21 (金) 14:02:02