2008b

課題 ライントレースロボットの作成

内容

チームで作成したコースに沿って動くロボットを作成

注意点

  • 速さと正確さを追求すること
  • 交差点で優先側を走っていない場合には、一時停止すること
  • 前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つこと
  • コースを2周したら自動的に止まること

目次

コース

コースは変則的にカーブを織り交ぜ、交差点が4つあるコースを作った。

コース

特に考えずに書いてみたら交差点のうち3つが一か所に集中してしまったので難易度が高くなった。

ロボット製作

全景.JPG

コンセプト

今回の課題では、二台のロボットが入り組んだコースを走るため、次のようなコンセプトのロボットを制作した。

・素早い 
・シンプル

ベース

今回のベースはドライブベースをもとに製作した。

前回の課題で、四輪タイヤではカーブでの摩擦が大きいことを学んだため、今回の課題も二輪+キャスターによる機構に決定した。

ベース.JPG

センサー

今回の課題では、二台のライントレースロボットを同時に走らせるので、光センサーとタッチセンサーを使用した。

ダブルバンパー.JPG

光センサー

当初このロボットは、コースの黒線に光センサーが入るように作成した。 しかし、もう一つのグループのロボットがコースの黒線を光センサーが挟むように作られており、コースもそのロボット用に作られていたので我々のロボットもそのような仕様に変更した。 つまり、下図のようになる。

#ref(): Usage:([pagename/]attached-file-name[,parameters, ... ][,title])

タッチセンサー

タッチセンサーは、前回の授業で作りかけだったダブルバンパーに設置し、車体前方に取り付けた。 タッチセンサー自体は二個使用したが、コードは一か所に接続し機能的にはシングルバンパーとして使用した。

プログラム

光センサーが黒線を挟んでいるため、プログラムは黒線を感知したら方向修正を加えるように作った。 具体的には、右のセンサーが黒を感知したら右へ、左なら左へ方向修正できるようにした。

今回のプログラム

#define THRESHOLD 50 int move_count; task main () {

   SetSensor(SENSOR_1, SENSOR_LIGHT);    //センサー1は光センサー
   SetSensor(SENSOR_3, SENSOR_LIGHT);  //センサー3は光センサー
   SetSensor(SENSOR_2, SENSOR_TOUCH);   //センサー2はタッチセンサー
   SetPower(OUT_A,4);           //モーターAの出力を4に
   SetPower(OUT_C,7);          //モーターCの出力を7に 
   move_count = 0;            //move_countの値を0に
   while (move_count <= 8) {       //move_countが8以下の時下を繰り返す
        if(SENSOR_2==0){         //タッチセンサーが働いていない時
       if (SENSOR_1 > THRESHOLD) {     //右の光センサーが白のとき
           if (SENSOR_3 > THRESHOLD) {   //左の光センサーが白の時
             OnFwd(OUT_A+OUT_C);     //前進
          } else {                       //左の光センサーが黒の時
           Off(OUT_A);          //左に方向転換
           OnFwd(OUT_C);
           }
       } else {             //右の光センサーが黒の時
       if(SENSOR_3 > THRESHOLD) {      //左の光センサーが白の時
         Off(OUT_C);            //右に方向転換
         OnFwd(OUT_A);
       } else {              //左の光センサーが黒の時
       Off(OUT_A+OUT_C);         //停止
       Wait(100); 
       OnFwd(OUT_A+OUT_C);        //前進
       Wait(70);             //交差点を超える
       Off(OUT_A+OUT_C); 
       (move_count); 
       move_count = move_count +1;       //move_countに1を足す 
                
          
          
          
          
          }
         } 
    }
    
    if(SENSOR_2==1){          //タッチセンサーが押されたとき
    OnRev(OUT_A+OUT_C); Wait(80);    //後退
    Off(OUT_A+OUT_C);          //停止
    Wait(20); 
    OnFwd(OUT_C);            //90°方向転換
    OnRev(OUT_A);  
    Wait(50); 
    OnRev(OUT_A+OUT_C);         //後退
    Wait(100); 
    Off(OUT_A+OUT_C); Wait(400);     //停止しもう一台のロボが通過するを  
                      待つ
    OnFwd(OUT_A+OUT_C);  
    Wait(100); 
    Off(OUT_A+OUT_C); 
    Wait(35); 
    OnFwd(OUT_A); 
    OnRev(OUT_C);  
    Wait(50);             //元の位置へ戻る 
    
  
   
   
}
}Off(OUT_A+OUT_C); }          //停止

プログラムの工夫点

ロボットを二周で止めるのには変数を使用した。交差点で一時停止するように黒線を横に引いた。ロボが二つのセンサーで黒を感知、つまり黒の横線の上に着いたら、変数の値を+1して、値が8を超えると停止するように設定した。

二台のロボットをお互いに逆方向を向いてライントレースさせるために、もう一台のロボットをよけるプログラムを作った。 簡単なコースではうまくいったが我々のチームのコースのように交差点が集まっている複雑なコースでは成功率は低かった。

発表を終えて

発表前に何度もリハーサルしたので、発表では一発で成功した。 衝突した時の動きがあまりうまくいかなかったのが残念だった。 A8右はひとりで制作したため、バンパーを無意味なダブルバンパーのままでやるなど、少し雑になってしまった。また、プログラムももう少し工夫すればよかったと思う。

コメントをどうぞ

  • 書くべきことをきちんと押さえていて良いと思います。 -- FI? 2009-02-14 (土) 17:30:53


添付ファイル: fileベース.JPG 235件 [詳細] fileキャスター.JPG 146件 [詳細] fileダブルバンパー.JPG 227件 [詳細] file全景.JPG 244件 [詳細] fileライントレース.gif 129件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-02-14 (土) 17:30:53 (3838d)