[[2007b/A1/ロボコン]] [[2007b/A1]] ----- CENTER:COLOR(darkgreen):&size(22){ロボコン}; ----- 目次 #contents #ref() *目的 [#ccc1187e] プログラミングやロボットを1から考案、創意、工夫して課題を克服することで今まで授業の中で培ってきたことを復習し、身につける。 *課題内容 [#ac00bad6] 簡単にいうとテニスボールをスタートからゴールまで運ぶという課題である。 詳しいルールや、フィールドの概要については下記のリンク先を参照のこと。 *ロボット [#pf1e6326] **ロボットの特徴 [#sb417bf6] 我々は2台のロボットを作成し、ボールの受け渡しを行い通信機能を用いることで2台のロボットが連携して動くことが最大の特徴である。 個々のロボットの特徴を見てみよう。 スタート地点から **プログラム [#qee9dba2] 前半のロボットのプログラムは、 #define MOVE 5 //通信機能の値を5に設定 task main() { OnFwd(OUT_A); OnRev(OUT_C); Wait(100); //前進 OnRev(OUT_A); OnFwd(OUT_C); Wait(50); //後退 Off(OUT_A+OUT_C); //停止 OnRev(OUT_B); Wait(100); //扉を上げる OnFwd(OUT_A); OnRev(OUT_C); Wait(200); //前進 OnFwd(OUT_B); Wait(100); //扉を下げる Off(OUT_B); OnRev(OUT_A); OnFwd(OUT_C); Wait(5); //後退 OnFwd(OUT_A+OUT_C); Wait(200); //右へ方向転換 OnFwd(OUT_A); OnRev(OUT_C); Wait(50); //前進 Off(OUT_A+OUT_C); //停止 OnRev(OUT_B); Wait(100); //扉を上げる Off(OUT_B); Wait(50); OnRev(OUT_A); OnFwd(OUT_C); Wait(110); //後退 Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(100); //扉を下げる OnFwd(OUT_A); OnRev(OUT_C); Wait(300); //前進 OnRev(OUT_A); OnFwd(OUT_C); Wait(100); //後退 OnFwd(OUT_A+OUT_C); Wait(150); //右へ方向転換 Off(OUT_A+OUT_C+OUT_B); SendMessage(MOVE); //通信を送る } 後半のロボットのプログラムは、 #define THRESHOLD 40 // 暗い <40 < 明るい→ この定義は光センサーごとに定数を変更してしまったので必要なくなりました。 #define MOVE 5 //MOVE 5 というメッセージを定義 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); //光センサ−1を設置 SetSensor(SENSOR_3, SENSOR_LIGHT); //光センサー3を設置 ClearMessage(); //以前のメッセージを消去 until (Message() == MOVE); //MOVE というメッセージを受け取ってから以下の動きをする。 OnRev(OUT_B);Wait(60);Off(OUT_B); //アームを0.60秒間上げて止める。 while(true) //以下の動作を繰り返す。 { if(SENSOR_1>38) //もしセンサー1(左)が白を感知し、 { if(SENSOR_3>40) //a,センサー3(右)も白を感知した時 { OnFwd(OUT_A+OUT_C); //前進をする。 } if(SENSOR_3<40) //b,センサー3(右)が黒を感知した時 { OnFwd(OUT_A);OnRev(OUT_C); //右に進路を修正する。 } } if(SENSOR_1<38) //もしセンサー1(左)が黒を感知し、 { if(SENSOR_3>40) //a,センサー3(右)が白を感知した時 { OnRev(OUT_A);OnFwd(OUT_C); //左に進路を修正する。 } if(SENSOR_3<40) //b,センサー3(右)も黒を感知した時 { OnFwd(OUT_A+OUT_C);Wait(50); //0.50秒間前進する。 OnFwd(OUT_A);OnRev(OUT_C);Wait(50); //0.50秒間反時計回りに回転する。 OnFwd(OUT_A+OUT_C);Wait(90); //0.90秒間前進する。 OnRev(OUT_C);Wait(50);Off(OUT_C); //さらに0.50秒間反時計回りする。* OnFwd(OUT_A+OUT_C);Wait(200); //2.00秒間前進する。 OnFwd(OUT_B);Wait(60);Off(OUT_B); //アームをあげる。 OnFwd(OUT_A+OUT_C);Wait(150); //1.50秒間前進する。 Off(OUT_A+OUT_C); //停止する。 } } } } * これはより正確にロボット本体がゴールの三角形の枠に入るための調整の役割を果たしている。 *課題を遂行させるにあたって苦労した点•工夫した点 [#abc234f2] *結果 [#fcc7f29b] *感想 [#y6899746]