[[2012b/Member]]

*ライントレースを応用してボールを運んでシュート!をする。(ロボティクス入門ゼミ2012後期課題1)[#top]
**課題 [#l5ef10d6]
図のようなコースを各自で作成した上で、次のような動作をするロボットを作成せよ。

<1人目>
+スタート地点から出発し、スタート地点外のすぐ近くに置かれたピンポン玉をつかむ。
+ピンポン玉をつかんだら速やかにスタート地点の境界の黒線に戻り、そこから黒線に沿って動いてゴール地点を目指す。ただしT字路では、直進、右折、左折を正しく判断させること。また、曲線部中央の障害物に接触しないようにすること。
+ゴール地点に到達したら、ゴールエリア外からピンポン玉をゴールにシュートする。ただし、どうしてもエリア外からのシュートが難しい場合は、エリア内からシュートした後、エリアから出てもよい。
<2人目>
+上の動作でスタートとゴールを逆にして同様の動きをするプログラムを作成せよ。ロボット本体は共通のものを使うとする。
 
**プログラム [#x668c00a]
使用したプログラム

 #define BLACK 35 // 定義 BLACK=35ということを示す
 #define u_turn  OnRev(OUT_A); OnFwd(OUT_C); // 定義 Aを逆回転、Cを前回転 つまり左に曲がる
 #define go_forward OnFwd(OUT_AC); // 定義 ACともに前回転 つまり直進
 #define turn_left OnRev(OUT_A); OnFwd(OUT_C); //  定義 Aを逆回転、Cを前回転 つまり左に曲がる
 #define turn_right OnFwd(OUT_A); OnRev(OUT_C); // 定義 Cを逆回転、Aを前回転 つまり右に曲がる
 #define n_turn OnFwd(OUT_A); OnRev(OUT_C); // 定義 Cを逆回転、Aを前回転 つまり右に曲がる
 #define STEP 1
 task main()
 {
   SetSensor(SENSOR_3, SENSOR_LIGHT); // 光センサーを入れる。
     ClearTimer(3); // 3のタイマーを切る(以下同様)
     OnFwd(OUT_B); // 前回転(以下同様) この場合Bの位置に接続されているモーター
     Wait(20); // 時間調節(以下同様) この場合20秒
     OnFwd(OUT_AC);  
     Wait(90); 
     Off(OUT_B); // 停止(以下同様) この場合Bを停止する。
     Off(OUT_AC); 
     Wait(70);
     OnFwd(OUT_AC);
     Wait(30);
     ClearTimer(3); 
   while (FastTimer(3) <=100){ // 条件 タイマー3が1秒以内のとき
     if (SENSOR_3 <= BLACK){ // 条件 センサー3がBLACKよりも低いとき(以下同様)
        Off(OUT_AC);
        Wait(50);
   } else if(SENSOR_3 > BLACK && FastTimer(3) <=40){ // 条件 タイマー3がBLACKより大きいかつタイマー3が0.4秒以下のとき
        OnFwd(OUT_AC);
        Wait(5);
   } else if(SENSOR_3 > BLACK && FastTimer(3) >40){ // 条件 タイマー3がBLACKより大きいかつタイマー3が0.4秒より大きいとき
        OnRev(OUT_AC);
        Wait(5);
   }
  }
     ClearTimer(3); 
   while (FastTimer(3) <=600){ // 条件 タイマーが6秒以内のとき
     if (SENSOR_3 <= BLACK){ // 
        go_forward;
        Wait(10);
        turn_right;
        Wait(10);
        ClearTimer(0); 
   } else if(FastTimer(0) >=100){ // 条件 タイマー0が1秒以上のとき
        u_turn;
        ClearTimer(0);
   } else if(FastTimer(0) >40){ // 条件 タイマー0が0.4秒より大きいとき
        turn_right;              
   } else if(SENSOR_3 > BLACK){  // 条件 センサー3がBLACKより低いとき
        turn_left;       
   }
  }  
     Off(OUT_AC);
     Wait(5);
     u_turn;
     Wait(40);
     ClearTimer(3);
   while (FastTimer(3) <=100){
     if (SENSOR_3 <= BLACK){
        Off(OUT_AC);
        Wait(50);
   } else if(SENSOR_3 > BLACK){
        u_turn;
        Wait(10);
   }
  }
     Off(OUT_AC);
     Wait(10);
     ClearTimer(3);
   while (FastTimer(3) <=1400){
     if (SENSOR_3 < BLACK ){
        go_forward;  
        ClearTimer(0);
   } else if(SENSOR_3 > BLACK && FastTimer(0) >=70){
        u_turn;
        ClearTimer(0);
   } else if(SENSOR_3 > BLACK && FastTimer(0) >=30){
        turn_left;        
   } else if(SENSOR_3 > BLACK ){
        turn_right;
   }  
  }
     Off(OUT_AC);
     Wait(5);
     ClearTimer(0);
     ClearTimer(1);
     ClearTimer(3);
   while (FastTimer(3) <=800){
     if (SENSOR_3 < BLACK ){
        go_forward;           
        ClearTimer(1);
        ClearTimer(0);
   } else if( FastTimer(1) >=10){
        u_turn;
   } else if( FastTimer(0) >=70){
        turn_right;  
   } else if(SENSOR_3 > BLACK ){                 
        turn_left;
   }   
  }
     Off(OUT_AC);
     Wait(50);
     ClearTimer(3);
     ClearTimer(0);
     ClearTimer(1);
   while (FastTimer(3) <= 750){
     if (SENSOR_3 < BLACK){
        go_forward;
        Wait(10);
        ClearTimer(0);
        ClearTimer(1);
   } else if(SENSOR_3 > BLACK && FastTimer(0) >=40){
        n_turn;            
   } else if(SENSOR_3 > BLACK && FastTimer(1) >=10){
        turn_left;  
   } else if(SENSOR_3 > BLACK){
        turn_right;
   }  
  }
     Off(OUT_AC);
     Wait(100);
     OnRev(OUT_AC);
     Wait(60);
     Off(OUT_AC);
     turn_right;
     Wait(42);
     OnFwd(OUT_B);
     Wait(20);
     Off(OUT_B);
     Off(OUT_AC);
 }


***説明 [#wb47742e]
&#9332;l1~l7
 以降に使用する言葉であったり数値を定義し、後に省略して記述出来るようにしている。

-アメリ
-イギリス
-スイス
-イタリア
++ヴェネチア
++ローマ
---バチカン
++ナポリ

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