2015a/Member

課題

2015a-mission2.png

B地点からA地点へ(Q交差点では直進、P三叉路では直進)黒い線にそって動くロボットを作成する。途中(P地点とQ地点)の間においたボールを目的地まで運んで、ゴールに入れる。その途中、三叉路および交差点では2秒間停止する。

ロボットの説明

プログラム

アームは上げた状態でスタート。 ボールを扱う前後は小休止をはさむことで安定性を増した。

#define BLACK 40 //以下は黒

#define WHITE 45 //以上は白

#define go_forward OnFwd(OUT_AC); //直進

#define turn_right OnRev(OUT_C); OnFwd(OUT_A); //右旋回

#define turn_left OnFwd(OUT_C); OnRev(OUT_A); //左旋回

#define STEP 1 // 一回の判定で進む時間

#define short_break Off(OUT_AC); Wait(200); // 小休止

#define CROSS_TIME 20 // 交差点通過にかかる時間

#define cross_line go_forward;Wait(CROSS_TIME);short_break; //交差点を渡る

#define nMAX 8 //通常のカーブとして許容できる繰り返しの最大値

#define DOWN OnFwd(OUT_B);Wait(40);Off(OUT_B); //アームを下ろす

#define UP OnRev(OUT_B);Wait(40);Off(OUT_B); //アームを上げる

#define shot go_forward;Wait(100); //シュート

task main() {

 SetSensor(SENSOR_2, SENSOR_LIGHT);
 int nOnline=0; // 続けて黒になった回数

A地点→Q地点

if (true) //黒を続けてnMAX回繰り返さない間、通常のライントレースをする
    {	
        while (nOnline <nMAX) 
           {
               if (SENSOR_2 < BLACK)  // 線上なら
                   {  
                        turn_left;                // 左へ
                        nOnline++;		//カウンタ増やす
                    } else {
                         if (SENSOR_2 < WHITE        )// 境界付近なら
                         {                    
                                go_forward;          // 直進
                          } else { 		//線から外れれば
                             turn_right;	//右へ
                          }
                             nOnline=0;		//カウンタリセット
                          }			
                             Wait(STEP);
                          }
                             nOnline=0;		//カウンタリセット
    }
 if (true) 	//黒を続けてnMAX回繰り返さない間、通常のライントレースをする
     {
         while (nOnline <nMAX) 
             {
                 if (SENSOR_2 < BLACK)  // 線上なら
                 {
                         turn_left;                // 左へ
                         nOnline++;		//カウンタ増やす
                 } else {
                     if (SENSOR_2 < WHITE)                    // 境界付近なら
                     {  
                         go_forward;               // 直進
                      } else { 		//線から外れれば
	                  turn_right;	//右へ
                      }
                         nOnline=0;		//カウンタリセット
                      }			
                         Wait(STEP);
     }

交差点、ボール捕球

 
 short_break;	   //小休止
 turn_right;Wait(35); //方向修正
 short_break;      //小休止  
 DOWN;          //アームを下げ捕球
 turn_left;Wait(30); //方向修正
 short_break;     //小休止
 cross_line;		//交差点を渡る
 nOnline=0;		//カウンタリセット

Q地点→P地点→A地点

 if (true) //黒を続けてnMAX回繰り返さない間、通常のライントレースをする
      {	
          while (nOnline <nMAX) 
             {
                 if (SENSOR_2 < BLACK)  // 線上なら
                     {  
                          turn_left;                // 左へ
                          nOnline++;		//カウンタ増やす
                      } else {
                           if (SENSOR_2 < WHITE        )// 境界付近なら
                           {                    
                                  go_forward;          // 直進
                            } else { 		//線から外れれば
                               turn_right;	//右へ
                            }
                               nOnline=0;		//カウンタリセット
                            }			
                               Wait(STEP);
                            }
                               nOnline=0;		//カウンタリセット
     }

B地点、シュート

 short_break;		//小休止
 turn_right;Wait(35); 	//方向修正
 short_break;       //小休止
 UP;             //アームを上げる
 shot;           //車体でボールを押し、シュート
 Off(OUT_AC);	//停止
 nOnline=0;		//カウンタをリセット
}

}

苦労した点

反省


添付ファイル: fileIMG_1751.jpg 225件 [詳細] fileIMG_1748.jpg 227件 [詳細] fileIMG_1747.jpg 204件 [詳細] file2015a-mission2.png 203件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-08-16 (日) 02:47:03