ページ作成/編集:A6L ALL member and more...
▽INDEX▽
黒い線に沿って動くロボットを作成せよ。 そして一つの周回コースを2台のロボットが走行すること想定し、
以下の2種類のプログラムを作成せよ。 前方のロボットに接触したら反転して進む
前方のロボットに接触したらそのロボットを右側から追い抜いて (あるいは避けて通り)、再びライン上に戻って進む
ただし、スピードと確実性をできる限り両立させること。 自由課題1も参考に。光センサは2つ使用してよい。
上記の写真ヨ○シーを見てくれればお分かりになると思うのだが、
90度以上のカーブが多く大変曲がりにくいもので特に尻尾の部分が著しく、
ロボットが右往左往するはめになったので、変遷せざるを得なくなった。
変遷後は、ヨ○シーに比べてカーブするには難しい曲線の具合を緩くし、
大分ロボットがスムーズに動くようになった。この作品カ○ビィーをライントレース することにしたい。
ロボット制作者:カトゥー、ヨコチン
見た目はシンプルな形で光センサーを2つ利用したロボット。 ロボットの前にバンパーを着けたことによってタッチセンサーが働きやすい。
始めは光センサーを1つだけ使ったロボットを作ろうとしたが、ラインから外れると元に戻るのに時間がかかってしまったので 光センサーを2つ使って黒いラインをはさむように工夫することによってロボットがラインから外れないように成功した。 光センサーがあたると始めのプログラムではロボットが少し回転するだけだったのでコーナーになると反応しすぎて時間が かかってしまっていたので回転に時間を少し加えることによって速さを出来るだけ追求した。 ロボットの前につけたバンパーによってロボットが正面にあるものならどう当たってもタッチセンサーが働くようにした。
物事何をするにしても紆余曲折あり、ということを前回もそうだが、 今回は身にしみて感じた。ロボットやライントレースする作品が完成したからと言って万事OKということでもなく、 そこから問題点・改良しなくてはいけない点などを見つけ、試行錯誤しなくてはいけないことを、このゼミで改めて思い知らされた。
今回ロボットの作成にあたってみんなの都合が会う日が少なかったため完成が前日になってしまい本番で使うコースを 走らせるのが発表当日になってしまったので今後はそのようにならないように課題が出されてからできるだけ早い日に 集まるようにしたい
全プログラム責任者:まさ
作成・協賛/まさ・ヨコチン
#define THRESHOLD 35 task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1を光センサーとする SetSensor(SENSOR_2, SENSOR_LIGHT); //センサー2を光センサーとする SetSensor(SENSOR_3, SENSOR_TOUCH); //センサー3をタッチセンサーとする while(true){ //無限ループ if (SENSOR_1< 45){ //センサー1が45未満なら Off(OUT_A+OUT_C); OnFwd(OUT_C); OnRev(OUT_A); Wait(15); //0.15秒左回転 } if (SENSOR_2< 45){ //センサー2が45未満なら Off(OUT_A+OUT_C); OnFwd(OUT_A); OnRev(OUT_C); Wait(15); //0.15秒右回転 } if ((SENSOR_1> 45)&&(SENSOR_2> 45)){ //センサー1とセンサー2がともに45より大なら OnFwd(OUT_A+OUT_C); //前進 } if (SENSOR_3 == 1) // センサー3が押されたら { OnFwd(OUT_A); OnRev(OUT_C); Wait(174) ; //1.74秒右回転 OnFwd(OUT_A+OUT_C) ; //前進 } } }
作成・協賛/J・カトゥー
#define THRESHOLD 35 task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1を光センサーと宣言する SetSensor(SENSOR_2, SENSOR_LIGHT); //センサー2を光センサーと宣言する SetSensor(SENSOR_3, SENSOR_TOUCH); //センサー3をタッチセンサーと宣言する while(true){ //無限ループ if (SENSOR_1< 45){ //センサー1が45未満なら Off(OUT_A+OUT_C); OnFwd(OUT_C); OnRev(OUT_A); Wait(15); //0.15秒左回転 } if (SENSOR_2< 45){ //センサー2が45未満なら Off(OUT_A+OUT_C); OnFwd(OUT_A); OnRev(OUT_C); Wait(15); //0.15秒右回転 } if ((SENSOR_1> 45)&&(SENSOR_2> 45)){ //センサー1とセンサー2がともに45より大なら OnFwd(OUT_A+OUT_C); //前進 } if (SENSOR_3 == 1) { // センサー3が押されたら OnFwd(OUT_A); //ここから追い越し OnRev(OUT_C); Wait(95); //右折 OnFwd(OUT_A+OUT_C); Wait(90); //直進 OnFwd(OUT_C); OnRev(OUT_A); Wait(80); //左折 OnFwd(OUT_A+OUT_C); Wait(130); //直進 OnFwd(OUT_C); OnRev(OUT_A); Wait(45); //左折 OnFwd(OUT_A+OUT_C); Wait(60); //直進 } } }