[[2012b/Member]]
*メンバー紹介 [#l64445ef]

*プログラム [#ff502915]
**ロボ [#bbb67476]
-動き
++右
++左
ああああ
-tada0 工学部機械システム工学科。ロボは全て彼が設計しました。
-KARINA 工学部土木工学科。楽天的思考でロボゼミを選択したポンコツ。機シスの相方へのハンデとして受講を許可されている。

&ref(2012b/Member/KARINA/Mission1/9.jpg,20%,ロボ);
*ロボットの説明 [#gc94bd1c]

&ref(2012b/Member/KARINA/Mission1/7171.jpg,100%,ロボ);

ロボの前部に取り付けられた装置でピンポン玉をはさみます。パクと呼びます。

&ref(2012b/Member/KARINA/Mission1/6.jpg,100%,ロボ);  &ref(2012b/Member/KARINA/Mission1/8.png,40%,ロボ);

パクはチューブによってモーターBとつながれています。チューブを使うことによりモーターを回しすぎてもよくなり、微妙な調節が必要なくなりました。

&ref(2012b/Member/KARINA/Mission1/7.png,30%,ロボ);

後輪はRUNを押すときよくとれるので困りました。バランスをとるため付けられています。

*プログラムの説明[#ff502915]

 黒線をなぞるプログラム等P30から応用しました。土木工学科が書いたと思ってハードルを下げて読んでいただけると幸です。

 便宜上ロボの前部に取り付けられたピンポン玉を挟む装置をパクと表記する。

 #define THRESHOLD 43  //黒線の上51、白い場所の上37より設定
 #define HIPOWER 7 //強く回す
 #define LOWPOWER 2	//弱く回す
 #define set_power_H SetPower(OUT_AC,HIPOWER);   //モーターACを強く回す
 #define set_power_L SetPower(OUT_AC,LOWPOWER);  //モーターACを弱く回す
 #define go_forward set_power_H; OnFwd(OUT_AC);  //前進
 #define turn_left1 set_power_L;OnFwd(OUT_C); OnRev(OUT_A);  //左折
 #define turn_left0 set_power_L;OnFwd(OUT_A); Off(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  //STEPごとにライトセンサーが判定をだす
 #define set_power_L_p SetPower(OUT_B,1);  //パクが脱輪しないようにモーターを弱くする
 #define pakum(t) set_power_L_p;OnFwd(OUT_B);Wait(t);Off(OUT_B);   //パクがピンポン玉を挟む
 #define pakuu(t) set_power_L_p;OnRev(OUT_B);Wait(t);Off(OUT_B);  //パクがピンポン玉を離す
 #define go(t) OnFwd(OUT_AC);Wait(t);  //前進
 #define back(t) OnRev(OUT_AC);Wait(t);  //後退
 #define left(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);  //左折
 #define right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);  //右折
 #define MUSHI 30 //タイマー1,2,3でライトセンサーが角だと判断する秒数


 task main()
 {
   pakuu(70);  //ピンポン玉をはさみ
   go(50);   //黒線を越えます
   right(20);  //進行方向に向く
&ref(2012b/Member/KARINA/Mission1/1.jpg,100%,1); 
   SetSensor(SENSOR_2,SENSOR_LIGHT);
   ClearTimer(0);  //このタイマーで場所を区切る
   int n=0; //黒線を無視した回数を数える
 黒線を乗り越えた後、急カーブなどで無視してしまうことがあったので回数制限をもうけるためカウンターを使った。 
   while(FastTimer(0) <= 1400){ //14秒以下は下図のように角を無視しない
     if(SENSOR_2 < THRESHOLD -3) {
       turn_left1;
     } else if (SENSOR_2 < THRESHOLD -1) {
       turn_left0;
     } else if (SENSOR_2 < THRESHOLD +2) {
        go_forward;
     } else if (SENSOR_2 < THRESHOLD +5) {
        turn_right0;
     } else {
       turn_right1;
      }
     Wait(STEP);
    } 
 黒線に反応しづらかったため左折のときのしきい値を-5,-2から-3,-1にした。
&ref(2012b/Member/KARINA/Mission1/2.jpg,100%,2);
    while((1400 <= FastTimer(0))&&(FastTimer(0) <= 2000)){ //14秒から20秒の間は下図のように黒線を乗り越える
    if(SENSOR_2 < THRESHOLD -3) {
      turn_left1;
    } else if (SENSOR_2 < THRESHOLD -1) {
      turn_left0;ClearTimer(1);
    } else if (SENSOR_2 < THRESHOLD +2) {
       go_forward;ClearTimer(1);
    } else if (SENSOR_2 < THRESHOLD +5) {
       turn_right0;ClearTimer(1);
    } else {
      turn_right1;ClearTimer(1);
     }
    Wait(STEP);
    if((FastTimer(1) >= MUSHI)&&(n<1)){ //n<1より乗り越えた後、角の判定がでても乗り越えないようにする
      go(20);
      right(5)
      PlaySound(SOUND_UP); //乗り越えたら音を鳴らす
      n++; //乗り越えた回数を数える
      }  
    }
&ref(2012b/Member/KARINA/Mission1/3.jpg,100%,3);
   while((2000 <= FastTimer(0))&&(FastTimer(0) <= 3000)){//20秒から30秒の間は下図のように角をやり過ごす
    if(SENSOR_2 < THRESHOLD -3) {
      turn_left1;
    } else if (SENSOR_2 < THRESHOLD -1) {
      turn_left0;ClearTimer(2);
    } else if (SENSOR_2 < THRESHOLD +2) {
       go_forward;ClearTimer(2);
    } else if (SENSOR_2 < THRESHOLD +5) {
       turn_right0;ClearTimer(2);
    } else {
      turn_right1;ClearTimer(2);
     }
    Wait(STEP);
    if((FastTimer(2) >= MUSHI)&&(2>n>=1)){ //角をやりすごした後、角の判定がでないようにする
      left(50);
      PlaySound(SOUND_UP); //音を鳴らす
      n++; //やりすごした回数を数える
    }
&ref(2012b/Member/KARINA/Mission1/4.jpg,100%,4);
   while(3000 <= FastTimer(0)){ //30秒以上のとき角にぶつかるとシュートする
    if(SENSOR_2 < THRESHOLD -3) {
      turn_left1;
    } else if (SENSOR_2 < THRESHOLD -1) {
      turn_left0;ClearTimer(3);
    } else if (SENSOR_2 < THRESHOLD +2) {
       go_forward;ClearTimer(3);
    } else if (SENSOR_2 < THRESHOLD +5) {
       turn_right0;ClearTimer(3);
    } else {
      turn_right1;ClearTimer(3);
     }
    Wait(STEP);
    if((FastTimer(3) >= MUSHI)&&(n>=2)){
      right(20); //角度の調整
      pakum(100); //パクを開く
      back(80); //後退
      go(80); //シュート!!!!!!!!!!!!!!!!!!
      } 
  }
 }
 }
&ref(2012b/Member/KARINA/Mission1/5.jpg,100%,5);

*感想 [#reb9f1b2]

 黒線が薄くなっていくのにはまいったが、あまりに失敗しすぎて楽しかった。

  
 ( ^o^)<ロボティクス楽しいなー!


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