[[2010b]]

#contents

*課題の内容 [#m26ee999]

-交差点 2箇所以上
-直角コーナー 左右1箇所以上
-近道を点線 2箇所以上
-スタートは横5cmの目印
-線の幅 15−25mm
-2周 ゴールはスタート地点の30cm手前

*メンバー [#x00aca54]
-植田みるく
-仁野陽日

*コース [#q430104e]

&ref(2010b/A2/課題2右/line.JPG);

規定のルールに最低限従った簡単なコースにしたつもりです。

*製作したロボット [#x5ef946e]
***工夫したところ [#j9fd8770]
-タイヤを四輪から二輪と補助輪にして動きをスムーズにした。
-光センサの間隔が、規定の線の幅に合うように取り付けた。

最初、前の課題で作ったロボットの土台をそのまま使う事を考えていたが、黒線をトレー
ースするときに、四輪だとカーブや直角の際に

苦労しそうだと思ったので、思いきってRCXを横倒しではなく立てて設置し、二輪プラス補助輪という形のロボットにしてみた。

これで、四輪の時に比べて、動きがスムーズになったと思う。

また、光センサの間隔もちょうどよく取り付けられたので、黒線の上を走るだけなら、割
とシンプルなプログラムで作動してくれた。

&ref(2010b/A2/課題2右/robo1.jpg);
&ref(2010b/A2/課題2右/robo2.jpg);

左が正面から見たロボットで、右が横から見たロボットです。


***問題点とその解決 [#f285edb5]
最初、タイヤ部分の補強がうまくいっておらず、何度も動かすとタイヤ回りの部品がとれ
る事があったので、補強の仕方を変えた。

最初のロボットでは頑丈にしようと、やけにいろいろな部品をつけ足していたのが逆によくなかったようだったので、できるだけシンプルに補強した。

&ref(2010b/A2/課題2右/robo3.jpg);

赤い丸で囲った部分がシンプルにした後の補強です。これだけで全然大丈夫です。



*プログラム [#xc2e718b]
**みるくのプログラム [#ef083d2a]
**仁野のプログラム [#k80c27c9]
 #define START OnRev(OUT_A+OUT_C);                // 前進
 #define BACK OnFwd(OUT_A+OUT_C);                 // 後退
 #define STOP Off(OUT_A+OUT_C);                   // 停止
 #define TURN_R OnFwd(OUT_C);OnRev(OUT_A);        // 右折
 #define TURN_L OnFwd(OUT_A);OnRev(OUT_C);        // 左折
 #define L1 39                                    // 閾値を39と定義
 
 task main()
 {
 
    SetSensor(SENSOR_1, SENSOR_LIGHT);                  // センサー1を光センサーと設定
    SetSensor(SENSOR_2, SENSOR_ROTATION);               // センサー2を回転センサーと設定
    SetSensor(SENSOR_3, SENSOR_LIGHT);                  // センサー3を光センサーと設定
 
    int round=0;                                        // roundを定数とする
  
 
    while (round <2)                                    // roundが2以下の時
    {
 
       int cross=0;                                     // crossを定数とする
 
       while (cross < 2)                   // 近道の入口までは
         {if (SENSOR_1 > L1)                            // 1が白のときに
             {if (SENSOR_3 > L1) {START;}               // 3も白のときは直進
              else {TURN_R;}                            // 3が黒のときは右折
                }
          else {                                        // 1が黒のときに
                if (SENSOR_3 > L1) {TURN_L;}            // 3が白のときは左折
                else {STOP;Wait(10);                    // 3が黒のときは一度停止し
                      START;Wait(10);                   // 線を越えるまで前進
                      PlaySound(SOUND_CLICK);           // 1度音を鳴らす
                      cross++;                          // crossに1を足す
                           }
                   }
           }
 
       while (cross < 4)                   //近道を通るときは
         {if (SENSOR_1 > L1)                            // 1が白のときに
             {if (SENSOR_3 > L1) {START;}               // 3も白のときは直進
              else {TURN_R;}                            // 3が黒のときは右折
                }
          else {                                        // 1が黒のときに
                if (SENSOR_3 > L1) {TURN_L;}            // 3が白のときは左折
                else {STOP;Wait(10);                    // 3が黒のときは一度停止し
                      TURN_L;Wait(30);                  // 0.3秒左折し
                      START;Wait(10);                   // 線を越えるまで前進
                      PlaySound(SOUND_DOUBLE_BEEP);     // 2回音を鳴らす
                      cross++;                          // crossに1を足す
                           }
                   }
           }
 
       while (cross < 6)                                //cross < 2 の時と同じ
         {if (SENSOR_1 > L1)
             {if (SENSOR_3 > L1) {START;}
              else {TURN_R;}
                }
          else {if (SENSOR_3 > L1) {TURN_L;}
                else {STOP;Wait(10);
                      START;Wait(10);
                      PlaySound(SOUND_CLICK);
                      cross++;
                          }
                   }
           }
 
       while (cross < 8)                                //cross < 4 の時と同じ
         {if (SENSOR_1 > L1)
             {if (SENSOR_3 > L1) {START;}
              else {TURN_R;}
                }
          else {if (SENSOR_3 > L1) {TURN_L;}
                else {STOP;Wait(10);
                      TURN_L;Wait(30);
                      START;Wait(10);
                      PlaySound(SOUND_DOUBLE_BEEP);
                      cross++;
                           }
                   }
           }
 
       while (cross < 9)                                //cross < 2 の時と同じ
         {if (SENSOR_1 > L1)
             {if (SENSOR_3 > L1) {START;}
              else {TURN_R;}
                }
          else {if (SENSOR_3 > L1) {TURN_L;}
                else {STOP;Wait(10);
                      START;Wait(10);
                      PlaySound(SOUND_CLICK);
                      cross++;
                      round++;                          //roundに1を足す
                           }
                   }
           }
 
     }
 
    START;Wait(80);                                     //スタートラインまで直進し
    STOP;                                               //停止
 
 }
 


*反省・感想 [#j919c3bb]
***みるく [#n9d1078e]
***仁野 [#f8ed645e]

*コメント [#b8b11ec4]

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS