黒い線をロボットでライントレースをして途中のボールをゴールまで運ぶ
コースは3種類
私はA地点からB地点のライントレースを行いました。
ロボットの車体を周りから見た写真です。 写真のようにセンサーの位置を最初とは異なるところに取り付けました。
写真では、小さく見えますが実際は大きいです。 ロボットを動かすときに取り付けブルドーザーのようにしてボールを運びます。 ゴールはロボットの動きを止めボールを転がすように入れるのでうまく入ってくれることを願います。
#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; //カウンタをリセット }
わからないことがとても苦戦しましたが、ほかの班の人に教えてもらったり、先生のところに直接聞きに行ったりなどをして最終的に何とか完成することができてよかった。 次の課題にも今回得た知識を活かして完成させたいです。