[[2013b/Member]]
#define BLACK1 34 //閾値の設定
#define BLACK2 40
#define WHITE1 46 
#define WHITE2 49
#define HIPOWER 5 //ハイパワーでのモーターの強さ
#define LOWPOWER 2 //ローパワーでのモーターの強さ
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define go_forward set_power_H; OnFwd(OUT_AC); //直進を定義
#define turn_left1 set_power_H;\
  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_H;\
  OnFwd(OUT_A); OnRev(OUT_C); //急な右折の定義
#define STEP 1 //一回の判定で進む時間を定義
#define nMAX 35 //交差点判断の基準値の定義
#define short_break Off(OUT_AC); Wait(100);
#define cross_line go_forward set_power_H;\
  OnFwd(OUT_AC); Wait(20); short_break; //交差点時の動きの定義
#define go_forward1 OnFwd(OUT_AC); Wait(50);
#define go_back OnRev(OUT_AC); Wait(50);
*今回の課題 [#ca6d72e0]
 今回の課題はライントレース、障害物の缶を避けてゴールするというもの。
 
 ルール

 ・缶は交差点から10cm以上離さなければならない。
 ・黒線に沿って動いてゴール手間の好きなところでで空き缶を置く。
 ・交差点では正しく判断させて直進させる。 
http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&page=2013a%2FMission1&src=robotics-2013a-mission1.jpg
*マシンの説明 [#x86300a9]
 3輪にすることで、ライントレースをよりスムーズに行うことができるようにした。
 また、光センサーをできるだけ地面に近づけることでスムーズな明度判定を行えるようにした。
 ロボはできるだけ軽量化することでよりスムーズにできるようにした。

task main()
{
  SetSensor(SENSOR_1,SENSOR_LIGHT);
    
    ClearTimer(1);


  while (FastTimer(1) <= 1000) {
      if (SENSOR_2 < BLACK1) {
        turn_left1;
      } else {
        if (SENSOR_2 < BLACK2) {
          turn_left0;
        } else if (SENSOR_2 < WHITE1) {
          go_forward; 
        } else if (SENSOR_2 < WHITE2) {
          turn_right0;
        } else {
          turn_right1;
         }
      Wait(STEP);  
  }  
*プログラム [#ledaee65]
 #define BLACK1 34 //閾値の設定
 #define BLACK2 40
 #define WHITE1 46 
 #define WHITE2 49
 #define HIPOWER 5 //ハイパワーでのモーターの強さ
 #define LOWPOWER 2 //ローパワーでのモーターの強さ
 #define set_power_H SetPower(OUT_AC,HIPOWER);
 #define set_power_L SetPower(OUT_AC,LOWPOWER);
 #define go_forward set_power_H; OnFwd(OUT_AC); //直進を定義
 #define turn_left1 set_power_H;\
   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_H;\
   OnFwd(OUT_A); OnRev(OUT_C); //急な右折の定義
 #define STEP 1 //一回の判定で進む時間を定義
 #define nMAX 35 //交差点判断の基準値の定義
 #define short_break Off(OUT_AC); Wait(100);
 #define cross_line go_forward set_power_H;\
   OnFwd(OUT_AC); Wait(20); short_break; //交差点時の動きの定義
 #define go_forward1 OnFwd(OUT_AC); Wait(50);
 #define go_back OnRev(OUT_AC); Wait(50);  
 task main()
 {
   SetSensor(SENSOR_1,SENSOR_LIGHT);    
     ClearTimer(1); 
   while (FastTimer(1) <= 1000) {
       if (SENSOR_2 < BLACK1) {
         turn_left1;
       } else {
         if (SENSOR_2 < BLACK2) {
           turn_left0;
         } else if (SENSOR_2 < WHITE1) {
           go_forward; 
         } else if (SENSOR_2 < WHITE2) {
           turn_right0;
         } else {
           turn_right1;
          }
       Wait(STEP);  
   }  
  } 
   ClearTimer(0);
   ClearTimer(1); 
   while (FastTimer(1) <= 4500) { //45秒間以下の行動を続ける
     while (FastTimer(0) < nMAX) { 
       if (SENSOR_2 < BLACK1) {
       turn_left1;
       } else {
         if (SENSOR_2 < BLACK2) {
           turn_left0;
       } else if (SENSOR_2 < WHITE1) {
           go_forward;
       } else if (SENSOR_2 < WHITE2) {
           turn_right0;
       } else {
           turn_right1;
        }
       ClearTimer(0);
      }
     Wait(STEP);
     }
     turn_right1; Wait(nMAX*STEP);
     cross_line;
     ClearTimer(0);
 }

  ClearTimer(0);
  ClearTimer(1);

  while (FastTimer(1) <= 4500) { //45秒間以下の行動を続ける
    while (FastTimer(0) < nMAX) { 
      if (SENSOR_2 < BLACK1) {
      turn_left1;
      } else {
        if (SENSOR_2 < BLACK2) {
          turn_left0;
      } else if (SENSOR_2 < WHITE1) {
          go_forward;
      } else if (SENSOR_2 < WHITE2) {
          turn_right0;
      } else {
          turn_right1;
     ClearTimer(0);
     ClearTimer(1); 
   while (true) {
     if (SENSOR_2 < BLACK1) {
       turn_left1;
       } else {
         if (SENSOR_2 < BLACK2) {
           turn_left0;
       } else if (SENSOR_2 < WHITE1) {
           go_forward;
       } else if (SENSOR_2 < WHITE2) {
           turn_right0;
       } else {
           turn_right1;
       }
      ClearTimer(0);
     Wait(STEP);
     }
    Wait(STEP);
    }
    turn_right1; Wait(nMAX*STEP);
    cross_line;
    ClearTimer(0);
}
    ClearTimer(0);
    ClearTimer(1);
   }
 }
**工夫したこと [#se7e44c8]
ハイパワーとロウパワーをうまく組み合わせることでスムーズなライントレースを可能とした。
*結果 [#o6fbe835]
交差点の部分をこえることがなかなかできなくて手間取ってしまった。

  while (true) {
    if (SENSOR_2 < BLACK1) {
      turn_left1;
      } else {
        if (SENSOR_2 < BLACK2) {
          turn_left0;
      } else if (SENSOR_2 < WHITE1) {
          go_forward;
      } else if (SENSOR_2 < WHITE2) {
          turn_right0;
      } else {
          turn_right1;
       }
    Wait(STEP);
    }
  }
}


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