課題

黒い線をロボットでライントレースをして途中のボールをゴールまで運ぶ

2015a-mission25.png

コースは3種類

私はA地点からB地点のライントレースを行いました。

ロボットの説明

車体

DSC_0002.jpg DSC_0001.jpg DSC_0003.jpg

ロボットの車体を周りから見た写真です。 写真のようにセンサーの位置を最初とは異なるところに取り付けました。

ハンド

_28504.jpg

写真では、小さく見えますが実際は大きいです。 ロボットを動かすときに取り付けブルドーザーのようにしてボールを運びます。 ゴールはロボットの動きを止めボールを転がすように入れるのでうまく入ってくれることを願います。

プログラムの説明

定義文

#define BLACK 40  //以下は黒
#define WHITE 50  //以下は白
#define go_forward OnFwd(OUT_AC);  //直進
#define turn_right OnRev(OUT_C); OnFwd(OUT_A);  //右
#define turn_left OnFwd(OUT_C); OnRev(OUT_A);  //左
#define STEP 1  //判定で進む時間
#define short_break Off(OUT_AC); Wait(100);  //小停止
#define CROSS_TIME 30  //交差点を渡る時間
#define cross_line go_forward;Wait(CROSS_TIME);short_break;  //交差点通過
#define FIX_TIME 25
#define nMAX 8

作成したプログラム

task main()
{
 SetSensor(SENSOR_2, SENSOR_LIGHT);
 int nOnline=0;  //続けて黒になった回数
 if (true) {  //黒を続けてnMAX回繰り返さない間、通常のライントレースを行う
  while (nOnline <nMAX) {
      if (SENSOR_2 < BLACK){  //線上なら
      turn_left;  //左
      nOnline++;  //カウンタを増やす
      } else {
        if (SENSOR_2 < WHITE){  //境界付近ならば
        go_forward;  //直進
        } else {  //線から外れれば
         turn_right;  //右
         }
       nOnline=0;  //カウンタをリセット
        }
        Wait(STEP);
       }
      short_break;  //小停止
      go_forward;wait(CROSS_TIME)  //前進
      nOnline=0;  //カウンタをリセット
     }
 if (true) {  //黒を続けてnMAX回繰り返さない間、通常のライントレースを行う
  while (nOnline <nMAX) {
      if (SENSOR_2 < BLACK){  //線上ならば
      turn_left;  //左
      nOnline++;  //カウンタを増やす
     } else {
     if (SENSOR_2 < WHITE){  //境界付近ならば
      go_forward;  //直進
      } else {  //線から外れれば
     turn_right;  //右へ
      }
     nOnline=0;  //カウンタをリセット
      }
     Wait(STEP);
    }
   short_break;  //小停止
   turn_right;Wait(FIX_TIME);  //方向修正
   cross_line;  //交差点を渡る
   nOnline=0;  //カウンタをリセット
}
 if (true) {  //黒を続けてnMAX回繰り返さない間、通常のライントレースを行う
   while (nOnline <nMAX) {
       if (SENSOR_2 < BLACK){  //線上ならば
      turn_left;  //左
       nOnline++;  //カウンタを増やす
      } else {
      if (SENSOR_2 < WHITE){  //境界付近ならば
     go_forward;  //直進
     } else {  //線から外れれば
       turn_right;  //右へ
      }
     nOnline=0;  //カウンタをリセット
     }
     Wait(STEP);
    }
    short_break; //小停止
   OnFwd(OUT_A);OnRev(OUT_C);Wait(FIX_TIME);Off(OUT_AC)  //方向修正
   Wait(20);
     nOnline=0;  //カウンタをリセット
   }

問題点

解決法

まとめ・感想

わからないことがとても苦戦しましたが、ほかの班の人に教えてもらったり、先生のところに直接聞きに行ったりなどをして最終的に何とか完成することができてよかった。 次の課題にも今回得た知識を活かして完成させたいです。


添付ファイル: file_28504.jpg 236件 [詳細] file2015a-mission25.png 237件 [詳細] fileDSC_0003.jpg 221件 [詳細] fileDSC_0002.jpg 236件 [詳細] fileDSC_0001.jpg 222件 [詳細] file2015a-mission2.png 114件 [詳細]

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