#contents
*課題 [#o2867f0d]
黒い線をロボットでライントレースをして途中のボールをゴールまで運ぶ
#ref(./2015a-mission25.png,50%)
コースは3種類
-A地点からB地点
-B地点からA地点
-C地点からA地点

私はA地点からB地点のライントレースを行いました。
*ロボットの説明 [#q71e49a1]
**車体 [#s23b8b5a]
&ref(./DSC_0002.jpg,8%);
&ref(./DSC_0001.jpg,8%);
&ref(./DSC_0003.jpg,8%);



ロボットの車体を周りから見た写真です。
写真のようにセンサーの位置を最初とは異なるところに取り付けました。
**ハンド [#d6416755]
#ref(./_28504.jpg,30%)
写真では、小さく見えますが実際は大きいです。
ロボットを動かすときに取り付けブルドーザーのようにしてボールを運びます。
ゴールはロボットの動きを止めボールを転がすように入れるのでうまく入ってくれることを願います。
*プログラムの説明 [#gc92c7da]
**定義文 [#o53f57bb]
 #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
**作成したプログラム [#ue3e3656]
 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;  //カウンタをリセット
    }

*問題点 [#vcfb2e19]
-説明書どおりの方法でロボットを組み立てるとセンサーの位置がロボットの本体から遠すぎてうまくライントレースができない。
-ボールをボールを運ぶときにアームが小さすぎてうまく運べなかったりうまくボールをつかむことができなかった。
-ロボットが動くと紙が動いてしまう。
*解決法 [#y22901c9]
-センサーの位置をロボットのしたに設置した。ロボットのちょうど真ん中につけてしまうとその場で回り続けてしまったので少し前の方につけた。
-センサーの位置をロボットのすぐ前に設置した。初めはセンサーをロボットの裏のちょうど真ん中のところに設置しようと考えたがそこにつけてしまうとその場で回転を続けてしまうのでロボットのすぐ前にしました。
-単純にボールを覆うハンドの大きさを大きくした。少し大きすぎかと思ったが意外にもちょうどよかった。
-紙をテープではり固定した。
*まとめ・感想 [#y82288bc]
わからないことがとても苦戦しましたが、ほかの班の人に教えてもらったり、先生のところに直接聞きに行ったりなどをして最終的に何とか完成することができてよかった。
次の課題にも今回得た知識を活かして完成させたいです。


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