*ロボットの紹介 [#c5cbaaad]
*コース攻略 [#k6a1f254]
#ref(robocon2013Hiko.png)
ロボコンのフィールド平面図

フィールドの説明

        フィールドは課題1で使用した紙を2枚つなぎ合わせる
        図のように直線を二本加える
        図のように空き缶を配置する(緑色)


*ルール [#ubced72e]

基本ルール

        競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。
        書き足した直線部からスタートする。
        図の上部からスタートしたロボットAがピンポン玉を取りにいく
        直線部までピンポン玉を持ってくる (1)
        直線部に入ってからロボットBへパスを送る (2)
        ロボットBは直線部でパスを受け取る
        ロボットBは直線部でパスを送る (3)
        ロボットAは直線部でパスを受けとる
        ロボットAは直線部でパスを送る (4)
        ロボットBは直線部でパスを受け取る
        ロボットBがゴールの空き缶の近くまでピンポン玉を運んで空き缶に当てる (5) (ただし黒い線で囲まれた空き缶の領域には入ってはいけない)
        ロボットBはシュートをした後もう一つのピンポン玉を取りにいく
        以後は、これまでのAとBの役割を反対にして、パスを繰り返し、最終的にはロボットAがもう一つのゴールにシュートする。
        開始の合図から5秒以内にスタートボタンを押す作業を完了すること。
        競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
        途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。
*プログラムの説明 [#q87c2890]
 #define THRESHOLD 37 // 閾値
 #define HIPOWER 7
 #define LOWPOWER 2
 #define set_power_H SetPower(OUT_AC,HIPOWER); // 直線を走る時のパワー
 #define set_power_L SetPower(OUT_AC,LOWPOWER); // カーブを走る時のパワー
 #define set_power_N SetPower(OUT_B,LOWPOWER); // ボールをつかんだり、パスを出すときのパワー
 #define go_fwd set_power_H; OnFwd(OUT_AC);
 #define arm_fwd set_power_N; OnFwd(OUT_B);Wait(30);Off(OUT_B);
 #define arm_bwd set_power_N; OnRev(OUT_B);Wait(30);Off(OUT_B);
 #define turn_left1 set_power_L ;\
  OnFwd(OUT_C);OnRev(OUT_A);
 #define turn_left0 set_power_L ;\
  OnFwd(OUT_C);Off(OUT_A);
 #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
 #define nMAX 150
 #define short_break Off(OUT_AC); Wait(100);
 #define CROSS_TIME 300
 #define cross_line set_power_L;\
 OnFwd(OUT_A);OnRev(OUT_C);\
   Wait(CROSS_TIME);short_break;
 sub followline_l () {
 int nOnline=0;
 int MOVETIME;
 MOVETIME=0;
 SetSensor(SENSOR_2,SENSOR_LIGHT);

 PlaySound(SOUND_UP);
 MOVETIME=MOVETIME+500;
 while(nOnline < nMAX  && FastTimer(0)<=MOVETIME){
   
   if(SENSOR_2< THRESHOLD -14) {
      turn_left1;
      nOnline++;
   }else{
    if(SENSOR_2< THRESHOLD -10){
     turn_left0;
   }else if(SENSOR_2< THRESHOLD -7){
     go_fwd;
   }else if(SENSOR_2< THRESHOLD -1){
     turn_right0;
   }else{
      turn_right1;
    }
    nOnline=0;    
    }
    Wait(STEP*10);
  }
 }

 sub followline_r () {
 int nOnline=0;
 int MOVETIME;
 MOVETIME=0;
 SetSensor(SENSOR_2,SENSOR_LIGHT);

 MOVETIME=MOVETIME+500;
 PlaySound(SOUND_DOWN);
 
 while(nOnline < nMAX  && FastTimer(0)<=MOVETIME){
   if(SENSOR_2< THRESHOLD -14) {
      turn_right1;
      nOnline++;
   }else{
    if(SENSOR_2< THRESHOLD -10){
     turn_right0;
   }else if(SENSOR_2< THRESHOLD -7){
     go_fwd;
   }else if(SENSOR_2< THRESHOLD -1){
     turn_left0;
   }else{
      turn_left1;
    }
    nOnline=0;
    }
    Wait(STEP*10);
  }	
 }

 sub followline_l1 () {

 int MOVETIME;
 MOVETIME=0;
 SetSensor(SENSOR_2,SENSOR_LIGHT);
 MOVETIME=MOVETIME+500; 
 PlaySound(SOUND_LOW_BEEP);
 
 while(FastTimer(0)<=MOVETIME){
   if(SENSOR_2< THRESHOLD -14) {
      turn_left1;
   }else{
    if(SENSOR_2< THRESHOLD -10){
     turn_left0;
    }else if(SENSOR_2< THRESHOLD -7){
     go_fwd;
    }else if(SENSOR_2< THRESHOLD -1){
     turn_right0;
    }else{
      turn_right1;
     }
    Wait(STEP*10);
    }
 }
 }

 task main () {
 SetSensor(SENSOR_2,SENSOR_LIGHT);
 ClearTimer(0);
 int nOnline;
 int MOVETIME;

 while(FastTimer(0)<=700){
   followline_l();
 }
	Off(OUT_AC);
	Wait(50); 
	PlaySound(SOUND_DOUBLE_BEEP);
	ClearTimer(0);
	
 while(FastTimer(0)<=700){
   followline_l();
 }
	Off(OUT_AC);
	Wait(50); 
	PlaySound(SOUND_DOUBLE_BEEP);
	ClearTimer(0);
	turn_right0;
	Wait(100);
	Off(OUT_AC);
	Wait(50);
	go_fwd;
	Wait(50);
	Off(OUT_AC);
	Wait(50);
	OnFwd(OUT_B);
	Wait(10);
	Off(OUT_B);
	turn_left0;
	Wait(100);
	Off(OUT_AC);
	Wait(50);
	
 while(FastTimer(0)<=700){
   followline_l();
 }
	Off(OUT_AC);
	Wait(50); 
	PlaySound(SOUND_DOUBLE_BEEP);
	ClearTimer(0);
	
 while(FastTimer(0)<=700){
 followline_l1();
 }
	PlaySound(SOUND_DOUBLE_BEEP);
	turn_left1;
	Wait(30);
	ClearTimer(0);
	
 while(FastTimer(0)<=700){
 followline_r();
 }
	Off(OUT_AC);
	Wait(50);
	PlaySound(SOUND_CLICK);
	turn_left1;
	Wait(20);
	ClearTimer(0);	
 while(FastTimer(0)<=700){
 followline_l();
 }
 }
*まとめ [#r36f88f5]
-ロボットにパスをさせるというのは、自分が同じことをするのとはまるで異なり、とても難しく困難を強いられました。パスを通すには一台目が、狙い道理の場所に正確なパスをだし、なおかつ二台目がそのパスの来る場所にあらかじめいて、そのパスをキャッチしなければなりません。最初は、赤外線通信を用いて、ロボットにパスをさせようとしましたが、あまりうまくいかず、一回目の課題に使用したタイマーでロボットを動かすようにしました。そのため、一回目と同じように、電池の消費によるロボットの移動距離・速度の差に悩まされました。
-一回目と同じように、今回もチームのみんなに頼りきりになってしまい、本当に迷惑をかけてしまったことにとても後悔をしています。また機会があったら、今度こそみんなの役に立つ働きをしたいと思っています。
-私自身が、工学部機械システム工学科なこともあり、自分で設計・プログラミングしたロボットを動かし、改良していく作業はきっとこれからの未来に役に立つと思います。とてもいいメンバーに恵まれ、いい経験ができた素晴らしい授業でした。チームのみなさん、本当にありがとうございました。

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