ロボットの紹介

ロボット本体

201308.jpg

アーム

コース攻略法

robocon2013a.png

初めにボールを取りに行く側

ボールをゴールにシュートする側

プログラムの説明

初めにボールを取りに行く側

#define BLACK_high 36 //一番黒いしきい値
#define BLACK_low 38 //少し黒いしきい値
#define WHITE_low 42 //少し白いしきい値
#define WHITE_high 44 //一番白いしきい値
#define turn_left_senkai OnRev(OUT_A); OnFwd(OUT_C); //左旋回
#define turn_left_kaiten Off(OUT_A); OnFwd(OUT_C); //左前進
#define turn_right_kaiten OnFwd(OUT_A); Off(OUT_C);	 //右前進
#define turn_right_senkai OnFwd(OUT_A); OnRev(OUT_C); //右旋回
#define go_fwd OnFwd(OUT_AC); //前進
#define short_break Off(OUT_AC); Wait(100); //小休止
#define SHOTBALL OnFwd(OUT_B); Wait(500); //ボールを撃つ
#define CATCHBALL OnRev(OUT_B); Wait(500); //ボールを受け取る
#define TURNSTEP 10	 //横のセンサーを使う時の繰り返しの待ち時間
#define time2 10 //シュートしない側が交差点から一回目に前進する時間
#define time3 10 //シュートしない側が交差点から二回目に前進する時間
#define nMAX	300 //交差点と判断する基準
#define STEP 1 //ライントレース時の待ち時間
task main(){
 SetSensor(SENSOR_2,SENSOR_LIGHT);
 int nOnline=0;
 int nCross=0;
ClearTimer(0);
 while(nCross <= 1){
 while(nOnline < nMAX){
   if(SENSOR_1 < BLACK_high){ 
turn_left_senkai ;
nOnline++ ;
  } else if(SENSOR_2 < BLACK_low){
turn_left_kaiten;
  } else if(SENSOR_2 < WHITE_low){
go_fwd;
  } else if(SENSOR_2 < WHITE_high){
turn_right_kaiten;
  } else {
turn_right_senkai;
   } 
 }
 nOnline == 0;
 nCross ++;
 short_break;
 cross_line;
 }
 nCross=0;
 go_fwd;
 Wait(500);
 OnRev(OUT_A);
 OnFwd(OUT_C);
 Wait(100);    //ボールに向く  
 CATCHBALL;
 OnFwd(OUT_AC);
 Wait(200);   //ボールを取る
 until(SENSOR_1 < BLACK_low){
  turn_left_kaiten;
 }                //コースに戻る
 
while(nCross <= 1){ //決まった位置までライントレース
  if(SENSOR_1 < BLACK_high){
turn_left_senkai;
nOnline ++;
  } else if(SENSOR_2 < BLACK_low){
turn_left_kaiten;
  } else if(SENSOR_2 < WHITE_low){
go_fwd;
  } else if(SENSOR_2 < WHITE_high){
turn_right_kaiten;
  } else {
turn_right_senkai;
   } 
 }
 nCross=0;
 turn_left_senkai; //相手の方向を向く
 Wait(70);
 until(FastTimer(1) > 4500); //一回目のパス
 SHOTBALL;
 turn_right_senkai;
 Wait(70);
  while(nCross <= 1){ //決まった位置までライントレース
  if(SENSOR_1 < BLACK_high){
turn_left_senkai;
	nOnline ++;
  } else if(SENSOR_2 < BLACK_low){
turn_left_kaiten;
  } else if(SENSOR_2 < WHITE_low){
	go_fwd;
  } else if(SENSOR_2 < WHITE_high){
turn_right_kaiten;
  } else {
turn_right_senkai;
   } 
  }
  nCross=0; 
  while (FastTimer(0) <= time2){ 
if(SENSOR_1 < BLACK_high) {
 turn_right_senkai;
} else if (SENSOR_1 < BLACK_low) {
 back_turn_right_kaiten;
} else if (SENSOR_1 < WHITE_low) {
 go_fwd;
} else if (SENSOR_1 < WHITE_high) {
 back_turn_left_kaiten;
} else {
 turn_left_senkai;
}
 Wait(STEP);
}
turn_left_senkai; //相手の方向を向く
Wait(70);
until(FastTimer(1) > 6000);//二回目のパス
CATCHBALL;
turn_right_senkai;
Wait(70);
while (nCross < 1){ //決まった位置までライントレース 
while (nOnline < nMAX){
if(SENSOR_1 < BLACK_high){
 turn_right_senkai;
 nOnline++;
} else { 
 if (SENSOR_1 < BLACK_low){
 turn_right_kaiten;
} else if (SENSOR_1 < WHITE_low){
 go_fwd
} else if (SENSOR_1 < WHITE_high){
 turn_left_kaiten;
} else {
 turn_left_senkai;
 }
nOnline==0;
}
Wait(STEP);
}
PlaySound(SOUND_UP);
short_break;
nCross++;
nOnline=0;
}
turn_left_senkai; //相手の方向を向く
Wait(70);
until(FastTimer(1) > 7500); //3回目のパス
SHOTBALL; 
Off(OUT_AC);
}  

ボールをゴールにシュートする側

#define BLACK_high 37 //一番黒いしきい値
#define BLACK_low 39 //少し黒いしきい値
#define WHITE_low 47 //少し白いしきい値
#define WHITE_high 49 //一番黒いしきい値
#define HIPOWER 5
#define LOWPOWER 1
#define TURNSENSOR	40 //サイドセンサーが線を感知するしきい値
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define turn_left_senkai set_power_L; OnRev(OUT_A); OnFwd(OUT_C); //左旋回
#define turn_left_kaiten set_power_L; Off(OUT_A); OnFwd(OUT_C); //左前進
#define turn_right_kaiten set_power_L; OnFwd(OUT_A); Off(OUT_C); //右前進
#define turn_right_senkai set_power_L; OnFwd(OUT_A); OnRev(OUT_C); //右旋回
#define go_fwd set_power_H; OnFwd(OUT_AC); //前進
#define short_break Off(OUT_AC); Wait(100); //小休止
#define back_turn_left_kaiten Off(OUT_A); OnRev(OUT_C); //左後進
#define back_turn_right_kaiten OnRev(OUT_A); Off(OUT_C); //右後進
#define go_rev set_power_H; OnRev(OUT_AC); //後進
#define SHOTBALL OnFwd(OUT_B); Wait(500); //ボールを撃つ
#define CATCHBALL OnRev(OUT_B); Wait(500); //ボールを受け取る
#define TURNSTEP 10	 //横のセンサーを使う時の繰り返しの待ち時間
#define time1 10 //シュートしない側が交差点からバックする時間
#define time2 1000 //シュートしない側が交差点から一回目に前進する時間
#define time3 10 //シュートしない側が交差点から二回目に前進する時間
#define mess1 1 //一回目のパス時に送受信するメッセージ
#define mess2 2 //二回目のパス時に送受信するメッセージ
#define mess3 3 //三回目のパス時に送受信するメッセージ
#define nMAX	5 //交差点と判断する基準
#define STEP 1 //ライントレース時の待ち時間
#define cross_time 30
#define cross_line go_fwd set_power_H; OnFwd(OUT_AC); Wait(cross_time); short_break;

task main(){
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_2,SENSOR_LIGHT);
 int nOnline=0;
 int nCross=0;
 int counter=0;
 ClearTimer(0); 
 ClearTimer(1); 
go_fwd;
Wait(100);
 
while(nCross < 2){ //コースの端まで進む
 while(nOnline < nMAX-1){
  if (SENSOR_2 < BLACK_high){
   turn_left_senkai;
   nOnline++;
  } else {
   if (SENSOR_2 < BLACK_low){
    turn_left_kaiten;
   } else if (SENSOR_2 < WHITE_low){
    go_fwd;
   } else if (SENSOR_2 < WHITE_high){
    turn_right_kaiten;
   } else {
    turn_right_senkai;
   } 
     nOnline=0;
  }
  Wait(STEP);
 }
short_break;
turn_right_senkai; Wait(nMAX*STEP);
cross_line;
PlaySound(SOUND_UP);
nOnline=0;
nCross++;
}

go_fwd;
Wait(20);
Off(OUT_AC);
Wait(50);

OnRev(OUT_A); OnFwd(OUT_C);
Wait(70);
Off(OUT_AC);

SHOTBALL;

until (FastTimer(1) == 4060); //待機
CATCHBALL; //1回目のパス
OnRev(OUT_A); OnFwd(OUT_C);
Wait(70);
Off(OUT_AC);

nCross=0;
while(nCross < 1){ //パスの位置まで進む
 while(nOnline < nMAX+2){
  if (SENSOR_2 < BLACK_high){
   turn_right_senkai;
   nOnline++;
  } else {
   if (SENSOR_2 < BLACK_low){
    turn_right_kaiten;
   } else if (SENSOR_2 < WHITE_low){
    go_fwd;
   } else if (SENSOR_2 < WHITE_high){
    turn_left_kaiten;
    } else {
     turn_left_senkai;
   } 
   nOnline=0;
  }
 Wait(STEP);
 }
 PlaySound(SOUND_UP);
 nOnline=0;
 nCross++;
}

OnRev(OUT_C); OnFwd(OUT_A);
Wait(170);
Off(OUT_AC);

until (FastTimer(1) == 6600); //待機
SHOTBALL; //2回目のパス
OnFwd(OUT_C); OnRev(OUT_A);
Wait(120);
Off(OUT_AC);

nCross=0;
while(nCross < 1){ //コースの端まで進む
while(nOnline < nMAX+2){
 if (SENSOR_2 < BLACK_high){
  turn_right_senkai;
  nOnline++;
 } else {
  if (SENSOR_2 < BLACK_low){
   turn_right_kaiten;
 } else if (SENSOR_2 < WHITE_low){
  go_fwd;
 } else if (SENSOR_2 < WHITE_high){
  turn_left_kaiten;
 } else {
  turn_left_senkai;
 } 
 nOnline=0;
}
Wait(STEP);
}
PlaySound(SOUND_UP);
nOnline=0;
nCross++;
}

go_fwd;
Wait(160);
Off(OUT_AC);
Wait(50);

OnRev(OUT_C); OnFwd(OUT_A);
Wait(60);
Off(OUT_AC);

until (FastTimer(1) == 8050); //待機
CATCHBALL; //3回目のパス

感想


添付ファイル: file201308.jpg 258件 [詳細] file図1.png 246件 [詳細] file2図.png 270件 [詳細] filerobocon2013a.png 260件 [詳細]

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