[[2008b]]

*課題 ライントレースロボットの作成 [#a7cd55b7]
**内容 [#v4633c8e]
チームで作成したコースに沿って動くロボットを作成
**注意点 [#j6efedd9]
- 速さと正確さを追求すること
- 交差点で優先側を走っていない場合には、一時停止すること
- 前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つこと
- コースを2周したら自動的に止まること

*目次 [#g44cdeb3]

#contents
*コース [#e6826e93]
コースは変則的にカーブを織り交ぜ、交差点が4つあるコースを作った。
#ref(2008b/A8/課題2左/IMGP0145.JPG,20%,コース)
特に考えずに書いてみたら交差点のうち3つが一か所に集中してしまったので難易度が高くなった。
*ロボット製作 [#u15ec97c]
#ref(2008b/A8/課題2左/IMGP0155.JPG,20%,)
**コンセプト [#hcaa1a4b]
今回の課題では、二台のロボットが入り組んだコースを走るため、次のようなコンセプトのロボットを制作した。
 ・素早い 
 ・シンプル
**ベース [#c98b8d27]
今回のベースはドライブベースをもとに製作した。

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

#ref(2008b/A8/課題2左/IMGP0154.JPG,20%)

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

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

**タッチセンサー [#u0892d86]
タッチセンサーは、前回の授業で作りかけだったダブルバンパーに設置し、車体前方に取り付けた。
タッチセンサー自体は二個使用したが、コードは一か所に接続し機能的にはシングルバンパーとして使用した。
#ref(2008b/A8/課題2左/IMGP0153.JPG,20%,)

*プログラム [#vc43ed1c]
光センサーが黒線を挟んでいるため、プログラムは黒線を感知したら方向修正を加えるように作った。
具体的には、右のセンサーが黒を感知したら右へ、左なら左へ方向修正できるようにした。
**今回のプログラム [#ab3fc642]
#define THRESHOLD 50
int move_count; 
task main ()
{
    SetSensor(SENSOR_1, SENSOR_LIGHT);
    SetSensor(SENSOR_3, SENSOR_LIGHT);
    SetSensor(SENSOR_2, SENSOR_TOUCH); 
    SetPower(OUT_A,4); 
    SetPower(OUT_C,7);
    move_count = 0;

    while (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;        
                 
           
           
           
           
           }
          } 
     }
     
     if(SENSOR_2==1){
     OnRev(OUT_A+OUT_C); Wait(80); 
     Off(OUT_A+OUT_C); 
     Wait(20); 
     OnFwd(OUT_C); 
     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); } 
**プログラムの工夫点 [#q44ab613]
ロボットを二周で止めるのには変数を使用した。交差点で一時停止するように黒線を横に引いた。ロボが二つのセンサーで黒を感知、つまり黒の横線の上に着いたら、変数の値を+1して、値が8を超えると停止するように設定した。

*発表を終えて [#hf93795f]
最初は何度ロボを走らせても必ず失敗していて、全く完走しなかった。しかし、コースを逆に走らせてみると、とてもすんなりと完走することができた。発表の時はうまく相手のロボをよけてくれるかが心配だったが、なんとか成功することができた。しかしその後、別のことを試しているときにロボが机から落ちて大破するという事件が起こってしまった。しかし基本的には大きなミスもなく、グループのロボが二台とも完走できたのでよかった。

*コメントをどうぞ [#k6619f8c]
#comment

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