[[2013b/Member]]
*ロボットについて [#e3f487db]
-課題内容を聞いてかなり屈曲したコースだっったので車幅を小さくしてロボットの移動をコンパクト化することが必要だと思った。初期の設計では車幅が大きかったので歯車を縦に並べる設計になった。それと同時に二輪になったのでカーブに強くなった。そして駆動輪が前輪になったので動きがスムーズなったと思う。
センサーについてはロボットのボディーとなるべく近づけることによってロボットの通った道を正確に伝えることが必要だと知ったので、車輪のすぐ前に取り付けられる設計になった。

*課題内容 [#w649b3fa]
&ref(2013b/Member/trtr/Mission1/IMG_1527.jpg,400*300,ロボット内部);
←ロボットの内部

+モーターを縦に取り付けて、歯車をつなぎ前輪に動力を伝えた。←スムーズに曲がるために車幅を狭くとるため。
+凸型の部品をロボットの裏に取り付けた。←ロボットや床が傷つかないようにするため。&動きがスムーズになるため。[後輪の役割]

*課題の難所 [#w649b3fa]
&ref(2013b/Member/trtr/Mission1/robotics-2013a-mission1_3.jpg,371*345,コース図);

-交差点をきちんと認識し、正しく判断して通過できるようにする。
-確実に一周できるようにする。スタート地点から出発して元にもどるようにする。
-青くマークしたところのカーブは急なので、ロボットがコースを見失わないようにすることが必要。
-空き缶を交差点から10cm以上離した線上に起き、それを一旦どけて再び元の位置にもどすように改良する。
-1個の空き缶でうまくいったら、2個の空き缶でやってみる。


*プログラミングについて [#cb56ff11]
 #define THRESHOLD 45
 #define HP 7
 #define MP 4
 #define LP 2
 #define set_power_H SetPower(OUT_AC,HP);//両輪高速のマクロ
 #define set_power_L SetPower(OUT_AC,LP);//両輪低速のマクロ
 #define short_break Off(OUT_AC);Wait(200);
 #define CROSS_TIME 800//光センサが交点を横断するのに必要な時間
 #define STEP 1//一回の判断で待つ時間
 #define B_COUNTER 5//黒が続く回数の基準
 #define W_COUNTER 5//白が続く回数の基準
 #define TIMER0 800//標準モードから特殊モードに切り替わるための時間

 sub crossing()//交差点を渡るサブルーチン
 {SetPower(OUT_AC,HP);OnFwd(OUT_AC);Wait(CROSS_TIME);}
 sub turn_left2()//標準左回転サブルーチン
 {SetPower(OUT_C,HP);SetPower(OUT_A,LP);OnFwd(OUT_C);OnRev(OUT_A);}
 sub turn_right2()//標準右回転サブルーチン
 {SetPower(OUT_A,HP);SetPower(OUT_C,LP);OnFwd(OUT_A);OnRev(OUT_C);}
 sub turn_left1()//標準左折サブルーチン
 {SetPower(OUT_C,HP);OnFwd(OUT_C);}
 sub turn_right1()//標準右折サブルーチン
 {SetPower(OUT_A,HP);OnFwd(OUT_A);}
 sub go_forward()//標準直進サブルーチン
 {SetPower(OUT_AC,HP);OnFwd(OUT_AC);}
 sub turn_left0()//特殊時左折サブルーチン
 {SetPower(OUT_C,LP);OnFwd(OUT_C);}
 sub turn_right0()//特殊時右折サブルーチン
 {SetPower(OUT_A,LP);OnFwd(OUT_A);}
 sub turn_left-1()//特殊時左回転サブルーチン
 {SetPower(OUT_C,MP);SetPower(OUT_A,LP);OnFwd(OUT_C);OnRev(OUT_A);}
 sub turn_right-1()//特殊時右回転サブルーチン
 {SetPower(OUT_A,MP);SetPower(OUT_C,LP);OnFwd(OUT_A);OnRev(OUT_C);}

 task main()
 {//0
 SetSensor(SENSOR_1, SENSOR_TOUCH);
 SetSensor(SENSOR_2,SENSOR_LIGHT);
 int N=0;
 int Nbkc=0;//何回黒が続いたかを計るカウンタ(number black counter)
 int Nwhc=0;//何回白が続いたかを計るカウンタ(number white counter)
 int Ncros=0;//交差点を通った回数を数えるカウンタ(number cross)
 while(true)//カッコの後の数はそのカッコが区切る階数
  {//1
  while(SENSOR_1=0)
    {//2
    while(N=0)//標準(緩やかなカーブに対応)
      {//3
      if (SENSOR_2<THRESHOLD-8){//4
        turn_right2();
        Nwhc=0;
      }else if(SENSOR_2<THRESHOLD-3){//4
        turn_right1();
        Nwhc=0;
      }else if(SENSOR_2<THRESHOLD){//4
        go_forward();
        Nwhc=0;
      }else if(SENSOR_2<THRESHOLD+3){//4
        turn_left1();
        Nwhc=0;
      }else{//4
        turn_left2();
        Nwhc++;
         if(Nwhc>W_COUNTER){//5
          ClearTimer(0);
             }//5
        }//4
      Wait(STEP);
      }//3
 while (FastTimer(0)>TIMER0)//特殊(急なカーブにも対応)
      {//3
      N=1;
      while(Nbkc<B_COUNTER)
        {//4
        if(SENSOR_2<THRESHOLD-8){//5
          turn_right-1();
          Nbkc++;
          }else{//5
            if(SENSOR_2<THRESHOLD-3){//6
              trun_right0();
            }else if(SENSOR_2<THRESHOLD+3){//6
              turn_left0();
            }else{//6
              turn_left-1();
              }//6
          Nbkc=0;
            }//5
        Wait(STEP);
        }//4
      short_break;
      turn_left-1();
      Wait(B_COUNTER*STEP);
      crossing();
      Nbkc=0;
      Ncros++

 if(Ncros=2){//3.5
       TIMER0= 200;//必入力
       Cleartimer0;
       N=0;
      }//3.5
      }//3 while(FastTimer(0)>TIMER0)
    }//2 while(SENSOR_1=0)
  SetPower(OUT_AC,MP);
 OnRev(OUT_AC);
 Wait(BACK_TIME);
 OnFwd(OUT_A);
 Wait(TURN_TIME1);
 SetPower(OUT_C,HP); 
 OnFwd(OUT_AC);
 Wait(TURN_TIME2);
 SetPower(OUT_A,MP);
 OnRev(OUT_C);
 Wait(TURN_TIME1);
 }//1 while(true)
 }//0 task main


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