2013b/Member

今回の課題

 今回の課題はライントレースと障害物の缶を避け、所定のゴールを目指す。

マシンの説明

 私たちのマシンは当初は説明書どおりに設計をしたが、色々と試行錯誤の結果次の点を改良して設計をした。

後輪をひとつにする

小回りのきく小さいタイヤをつける

_S__17784924.jpg

光センサーをなるべく地面の位置に近づける

 以上の点が今回のマシンの特徴である

プログラム

#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 (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);
   }
 }
}

まとめ

結果としてライントレースはうまくできたが障害物を取り除くプログラミングは時間が足りなくできなかった。ライントレースは後輪を一つにすることで小回りがきくようになり、スムーズに動くことができた。

反省

今回は障害物を取り除くことができなかったので今後の課題では、障害物を取り除けるプログラミングを作れるようにがんばりたい。


添付ファイル: file_S__17784924.jpg 229件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-02-06 (木) 15:19:23