2014a/Member

 メンバー紹介

課題の内容

課題コース

ロボット紹介

シュートとドリブル

アーム1 アーム2 アーム3

光センサー

光センサー

全体図

全体図

プログラム説明

プログラム用課題コース
#define THRESHOLD 44    //しきい値
#define LOWPOWER 1       //早すぎるため全て遅くする
#define set_power_L SetPower(OUT_AC,LOWPOWER);    //力
#define go_forward set_power_L; OnFwd(OUT_AC);                 //直進
#define turn_left1 set_power_L; OnRev(OUT_A); OnFwd(OUT_C);    //左旋回
#define turn_left0 set_power_L; Off(OUT_A); OnFwd(OUT_C);      //左折
#define turn_right0 set_power_L; OnFwd(OUT_A); Off(OUT_C);     //右折
#define turn_right1 set_power_L; OnFwd(OUT_A); OnRev(OUT_C);   //右旋回
#define STEP 1        //1回の判断で動作させる時間(これは1/100秒)
#define n0MAX 15      //通常のカーブとして許容できる繰り返しの最大値
#define n1AMAX 2      //コース前半の急なカーブと判断される回数
#define n1BMAX 4      //コース後半の急なカーブと判断される回数 
#define short_break Off(OUT_AC); Wait(100);                    //小休止
#define CROSS_TIME 20                                          //交差点を渡る時間
#define first_time 400                                         //交差点を認識する時間
#define dribble set_power_L; OnFwd(OUT_B); Wait(47);           //ボールをつかむ
#define shoot set_power_L; OnRev(OUT_B); Wait(47);             //ボールをシュート  
task main()
   {
   SetSensor(SENSOR_2, SENSOR_LIGHT);  //光センサーをセット
   int n0nline=0;                      //続けて黒になった回数(カウンタ)
   int n1nline=0;                      //急カーブの回数
       while(n1nline < n1AMAX)         //急なカーブが2回あるまで{}の中を繰り返す(n1AMAXは2なので)
       {
	    while(n0nline < n0MAX)//急なカーブがあるまで繰り返す
           {
	    if (SENSOR_2 < THRESHOLD -8){ turn_left1; n0nline++;} //より暗いとき左旋回してカウンタを1増やす
	    else if (SENSOR_2 < THRESHOLD -4){ turn_left0; }      //暗いとき左折
	    else if (SENSOR_2 < THRESHOLD +1){ go_forward; }      //中間のとき直進
	    else if (SENSOR_2 < THRESHOLD +12){ turn_right0; }    //明るいとき右折
	    else { turn_right1; }                                 //より明るいとき右旋回
	    Wait(STEP);
           }
       PlaySound(SOUND_UP);  //急なカーブの度に高い音を1回鳴らす 
	n0nline=0;            //カウンタをリセット 
	n1nline++;            //急なカーブの数をカウント
       }
   n1nline=0;
   ClearTimer(0);                        //タイマーをリセットして開始
       while(FastTimer(0) <= first_time) //交差点を渡りきるまで繰り返す
       {
	    while(n0nline < n0MAX)
           {
	    if (SENSOR_2 < THRESHOLD -8){ turn_left1; n0nline++; }
           else if (SENSOR_2 < THRESHOLD -4){ turn_left0; }
	    else if (SENSOR_2 < THRESHOLD +1){ go_forward; }
	    else if (SENSOR_2 < THRESHOLD +12){ turn_right0; }
	    else { turn_right1; }
	    Wait(STEP);
	    }
       short_break;          //小休止
	turn_right1; Wait(n0MAX*STEP); //進行方向修正
	cross_line;                    //交差点を渡る
	n0nline=0;                     //カウンタをリセット
       }
   n0nline=0;
       while((FastTimer(0) > first_time)&&(n1nline <n1BMAX)) //急なカーブが4回あるまで(最後のT字路を含む)繰り返す
       {
	    while(n0nline < n0MAX)
           {
	    if (SENSOR_2 < THRESHOLD -8){ turn_left1; n0nline++; }
	    else if (SENSOR_2 < THRESHOLD -4){ turn_left0; }
	    else if (SENSOR_2 < THRESHOLD +1){ go_forward; }
	    else if (SENSOR_2 < THRESHOLD +12){ turn_right0; }
	    else { turn_right1; }
	    Wait(STEP);
	    }
	 n1nline++;
	 n0nline=0;
	 PlaySound(SOUND_DOWN);  //急なカーブがある度に低い音を鳴らす
       }
    }

感想と反省

ロボット本体の小回りやアームなどを考えるのに時間がかかりすぎた、またプログラムではアームのおろすタイミングなどが難しく苦戦した。


添付ファイル: file2014a-mission1.png 242件 [詳細] fileimage5.jpeg 289件 [詳細] fileimage4.jpeg 290件 [詳細] fileimage3.jpeg 276件 [詳細] fileimage2.jpeg 277件 [詳細] fileimage1.jpeg 265件 [詳細] file2014a-mission1.2.png 263件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-07-11 (金) 16:29:42