2006a/A2/課題2左

ライントレースをするロボット

A2左メンバー たろう、ゆういち、けんろう 


課題2内容

課題2:黒い線に沿って動くロボット~ † 黒い線に沿って動くロボットを作成せよ。
そして一つの周回コースを2台のロボットが走行すること想定し、以下の2種類のプログラムを作成せよ。

1.前方のロボットに接触したら反転して進む~ 2.前方のロボットに接触したらそのロボットを右側から避けて通り、再びライン上に戻って進む
ただし、スピードと確実性をできる限り両立させること。自由課題1も参考に。光センサは2つ使用してよい。

 

プログラム


 ライントレース
 制作 たろう ゆういち
 #define THRESHOLD 40   // 閾値
 task main ()

 {

 SetSensor(SENSOR_1, SENSOR_LIGHT);
 SetSensor(SENSOR_3, SENSOR_LIGHT);
 while (true) {
 if (SENSOR_1 < THRESHOLD) {   // 黒線上にいるとき
           OnFwd(OUT_A);
           Off(OUT_C);
       } else {                      // 黒線から外れたとき
           Off(OUT_A);
           OnFwd(OUT_C);
       }
   }
 while (true) {
 
     if (SENSOR_3 < THRESHOLD) {   // 黒線上にいるとき
           OnFwd(OUT_C);
           Off(OUT_A);
       } else {                      // 黒線から外れたとき
           Off(OUT_C);
           OnFwd(OUT_A);
       }
   }
 }
 
 課題2−1
 ぶつかったら反転するロボット
 制作 たろう ゆういち
 
 task main() 
 {
 SetSensor(SENSOR_1,SENSOR_LIGHT) //センサー1を光センサーに設定
 SetSensor(SENSOR_2,SENSOR_TOUCH) //センサー2をタッチセンサーに設定
 SetSensor(SENSOR_3,SENSOR_LIGHT) //センサー3を光センサーに設定
 while(true) //ライントレースのプログラム
{
  if((SENSOR_1>40)&&(SENSOR_3>40))  //通常時の行動
   {
     OnFwd(OUT_A+OUT_C); //前進
   }
  if((SENSOR_1>40)&&(SENSOR_3<40))  //左のセンサーが線上に来たときの行動
   {
     OnFwd(OUT_A);Off(OUT_C); //左センサーが線から出るまで右に旋回
   }
  if((SENSOR_1<40)&&(SENSOR_3>40))  //右のセンサーが線上に来たときの行動を設定
   {
     OnFwd(OUT_C);Off(OUT_A); //右センサーが線から出るまで左に旋回
   }
  if(SENSOR_2==1)  //タッチセンサー反応したときの行動を設定     {
     OnRev(OUT_A+OUT_C);Wait(100); //障害物に当たらないようにバック
     OnFwd(OUT_A);OnRev(OUT_C);Wait(180); //反転
   }
 }
}
 課題2−2
 ぶつかったら右によけるロボット


 制作 たろう
 
 task main()
 {
 SetSensor(SENSOR_1, SENSOR_LIGHT);  //左の光センサーを設定
 SetSensor(SENSOR_3, SENSOR_LIGHT);  //右の光センサーを設定 
 while(true)
   {
    if(SENSOR_1<40)    //左センサーがラインに乗ったら右折
     { OnFwd(OUT_C);OnRev(OUT_A);}
    if(SENSOR_3<40)    //右センサ−がラインに乗ったら左折
     {OnFwd(OUT_A);OnRev(OUT_C);}
    if((SENSOR_1>40)&&(SENSOR_3>40))  //どちらのセンサーもラインに乗らなかったら
     {OnFwd(OUT_A+OUT_C);if(SENSOR_2==1)    //タッチセンサーがぶつかったら
      {
       OnRev(OUT_A+OUT_C);  //バック
       Wait(40);
       OnFwd(OUT_A) ;OnRev(OUT_C);  //右折
       Wait(60);
       OnFwd(OUT_A+OUT_C);      //前進
       Wait(120);
       OnRev(OUT_A);OnFwd(OUT_C);   //左折 
       Wait(60);
       OnFwd(OUT_A+OUT_C);  //前進
       Wait(120);
       OnRev(OUT_A);OnFwd(OUT_C);   //左折
       Wait(60);
        }

    }
  }
 }


苦労したところ

ロボットは比較的簡単に出来上がったが、プログラムでつまづいた。このチームではプログラムを組み立てるのが得意なメンバーがいなかったため、チーム内であれこれと試してなんとかまともに動いてくれるプログラムを作ることができた。

工夫した点


 ・光センサーを2つ使ってライントレースできるようにした。
 ・光センサーの取り付け位置。
 ・地面と近すぎず遠すぎずのちょうどいい位置を模索。
 ・センサーを取り付けるため、タッチセンサーのときに作ったバンパーからヒントを得て、光センサーバンパーを作った。
 ・タッチセンサーのバンパーと光センサーのバンパーを換装可能にした点。
 ・バンパーを2つ一緒につけられるようにした。
 ・マシンがコースから外れないようにした。光センサーを線を挟めるように取り付けた。




反省・感想

 今回は本体を分解しなかったから、比較的スムーズに作業を進められた。
 2つのバンパーを同時に取り付けられるようにしたところが気に入った。
 いろいろなブロックの使い方を製作段階で試行錯誤できたところも良かった。
 けれども、まだまだプログラムを組み立てるのがつらい。
 メンバー同士で分かるところは教えあうように、協力し合っていきたい。
 光センサーの性質がいまいち把握しきれていない感が残った。
 だからもっと研究しなければ後が大変そう。
 たとえば、センサーがどのくらいまでなら反応するのか、どれくらいの値まで判断できるのかといったこと。
 今後の課題としては、それぞれのセンサーの特徴を理解して、それがどんなときにどんなことに使えるのかを考えること。
 次回の課題に活かせるようにがんばりたい。




頼むからホームページ更新を私にまかせっきりにしないでくれ…
byたろう

コメントをどうぞ



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