[[2009a]]

*目次 [#i268889c]
#contents
*課題 [#o9dbc396]
**課題2:黒い線に沿って動くロボット † [#xe0c86ff]
各チームで作成したコースを3周するロボットを製作せよ。交差点のうちの一つには500mlの空の紙パックをおき、次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)

1,紙パックを迂回する、あるいは紙パックをもとの位置に戻したのちコースに戻って進む (交差点を通過後、紙パックが元の位置にあればよい) 
~2,紙パックを次の交差点まで運んで行き、その交差点に紙パックを残してさらに黒い線に沿って進む 
~3,最初の交差点では左折、次の交差点では右折、その次は左折、というように交差点一つごとに左折・右折を繰り替えして進む (紙パックはコース外に押し出してよい)
ただし、

速さと正確さを追求すること 
コースを3周したら自動的に止まること
余力のあるチームはさらに以下の機能を追加せよ。

交差点で2台のロボットが遭遇した場合には後から交差点入ったロボットが、一時停止してもう一方のロボットが行き過ぎるのを待つこと 
前方にあるもう一台のロボットに接触した場合には停止して距離が十分離れるのを待つこと
注意:コースラインの幅は15〜25mm*くらい*としてますが,あまり太くしない限り制限はしていません.ちなみに過去のロボコンコースレイアウトは25mm幅で制作してきました.
~~ロボティクス入門ゼミTop / 2009a / 練習問題 / 課題2より抜粋~

*ロボット [#xe0e2b26]
**コンセプト [#fdc2eaa4]
**変遷 [#s9e87b96]
**車体 [#kc26b6fa]
**足回り [#yc6bd90c]
**タッチセンサー [#j25473b7]
**はさむor運ぶ!? [#ec16b4e4]
*課題への取り組み [#m58c9ede]
**コース紹介 [#i9a0b015]
当初、Hauntは鈴鹿サーキットをもとにコースレイアウトを行ったが、途中で挫折…
~Fe2+に任すもいまいちの出来にリナ様もご立腹。。悩んだ結果、コースが完成!
~なんと…所要時間3時間!!!交差点は4つ!!!!!
#ref(course1.png)

**課題の選択 [#i565a5d5]
今回Hauntは課題2-2、Fe2+は課題2-1に取り組んだ。
**紙パックの対処方法 [#t686d42e]
***Haunt [#se850cab]

***Fe2+ [#h24f797a]

*プログラム [#qa7573b1]

***Hauntのプログラム [#cb187384]
 #define T 40
 #define Run_time 200
 #define T 40//閾値を40に設定
 #define a OUT_A                   
 #define c OUT_C                  
 #define s1 SENSOR_1
 #define s2 SENSOR_2
 #define s3 SENSOR_3
 int flag = 0;
 int t = 0;
 int d = 0;
 #define fwd(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
 #define rev(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
 #define w(t) Wait(t);


 task main()
   {
    SetSensor(SENSOR_2,SENSOR_TOUCH); 
    SetSensor(s1,SENSOR_LIGHT);  
    SetSensor(s3,SENSOR_LIGHT);
    start light;                      
    while(true){
    if((s2 == 1)&&(FastTimer(0)<400)){
    while(t == 1){      
    if(s1>T){                    
    if(s3>T){
    OnFwd(c);
    OnFwd(a);
              }
    else{
    if(s1>T){                    
    OnFwd(a);
    OnRev(c);
    w(5);
    Off(OUT_C+OUT_A);
              }
   }
              }
    else{
    if(s3>T){                   
    OnFwd(c);
    OnRev(a);
    w(5);
    Off(a+c);
              }
   }
    else{
    t++;
   }
   }
    if(t == 1){
    OnRev(a+c);
    w(50);
    OnFwd(OUT_A);
    OnRev(OUT_C);
    w(160);}
    else{ 
    if(SENSOR_2 == 1){               
    stop light;
    ClearTimer(0);                       
    Off(OUT_A+OUT_C);Wait(50);        
    OnRev(OUT_A+OUT_C); Wait(100);   
    Off(OUT_A+OUT_C);Wait(50);         
    start light;
    }                       
    }
    } 
    }

    task light()
    {
    OnFwd(OUT_A+OUT_C);                              
 
    SetSensor(s1,SENSOR_LIGHT);  
    SetSensor(s3,SENSOR_LIGHT);
    ClearTimer(0);
    while(flag < 13){      
    if(s1>T){                    
    if(s3>T){
    OnFwd(c);
    OnFwd(a); 
   }
    else{
    if(s1>T){                    
    OnFwd(a);
    OnRev(c);
    Wait(5);
    Off(OUT_C+OUT_A);
   }
   }
   }
    else{
    if(s3>T){                   
    OnFwd(c);
    OnRev(a);
    Wait(5);
    Off(a+c);
   }
   }
   }
    else{
    flag++;
    Off(a);                      
    Off(c);
    Wait(0);
    OnFwd(c);
    OnFwd(a);
    Wait(50);
   }
   }
   }
   while (true) {if (s1 < T) 
  {
   if(s3 < T)
  {
   Off(a + c);
   Wait(50);
   OnFwd(a+c);
  }
   else {
   Off(a); 
   OnFwd(c);
  }
  }
  }
  }
***Fe2+のプログラム [#j381207a]
 #define T 40
 #define Run_time 200
 #define T 40閾値を40に設定
 #define a OUT_A                   
 #define c OUT_C                  
 #define s1 SENSOR_1
 #define s2 SENSOR_2
 #define s3 SENSOR_3
 int flag = 0;
 #define fwd(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
 #define rev(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
 #define w(t) Wait(t);
 
 task main()
 {
     SetSensor(SENSOR_2,SENSOR_TOUCH); 
     start light;                      
     while(true){
     if((s2 == 1)&&(FastTimer(0)<400)){
     stop light;
     rev(50);
     OnFwd(a);
     OnRev(c);
     w(45);
     fwd(65);
     OnFwd(c);
     OnRev(a);
     w(25);
     fwd(20);
     start light;}
     else{ 
     if(SENSOR_2 == 1){               
     stop light;
     ClearTimer(0);
     flag++;                       
     Off(OUT_A+OUT_C);Wait(50);        
     OnRev(OUT_A+OUT_C); Wait(100);   
     Off(OUT_A+OUT_C);Wait(50);        
     start light;
    }                      
    }  
    }
    }
     task light()
    {
     OnFwd(OUT_A+OUT_C);                              
     SetSensor(s1,SENSOR_LIGHT);  
     SetSensor(s3,SENSOR_LIGHT);
     ClearTimer(0);
     while(flag < 13){      
     if(s1>T){                    
     if(s3>T){
     OnFwd(c);
     OnFwd(a);
    }
     else{
     if(s1>T){                    
     OnFwd(a);
     OnRev(c);
     Wait(5);
     Off(OUT_C+OUT_A);
    }
    }
    }
     else{
     if(s3>T){                   
     OnFwd(c);
     OnRev(a);
     Wait(5);
     Off(a+c);
    }
     else{
     Off(a);                      
     Off(c);
     Wait(100);
     OnFwd(c);
     OnFwd(a);
     Wait(50);
    }
    }
    }
     while (true) {if (s1 < T) {
     if(s3 < T){
     Off(a + c);
     Wait(50);
     OnFwd(a+c);
    }
     else {
     Off(a); 
     OnFwd(c);
    }
    }
    }
    }
*まとめ [#u54360ab]
**Haunt [#g5bc9be4]
**Fe2+ [#ne3037dd]
#comment
コメントをお願いします。


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