光センサー:地面になるべく近い位置になるよう光センサーを装着させる。
線を跨ぐようにセンサーの幅をあけました。両方のセンサーが線を通過しながら直進する動作と線を跨ぎながら直進する動作と2パターンありますが、自分たちは前記のほうを選びました。
タッチセンサー:同じ班のロボ2体に対して、センサーが同じ高さにするように装着しました。これは、高さの違いによってセンサーの空振り?を防ぐための措置です。
また、今回はダブルバンパーでしたがシングルでも良かったと思います。
今回は一度作ったロボを変更することがありませんでした。
task main() #define line 40 { SetSensor(SENSOR_1,SENSOR_LIGHT); //sensor1を光センサーと定義 SetSensor(SENSOR_3,SENSOR_LIGHT); //sensor3を光センサーと定義 SetSensor(SENSOR_2,SENSOR_TOUCH); //sensor2をタッチセンサーに定義 while(true){ //{}内の行動をし続ける if((SENSOR_1>line)&&(SENSOR_3>line)) {OnFwd(OUT_A+OUT_C);} //もしsensor1とsensor3が白い部分に反応していたら直進する if((SENSOR_1>line)&&(SENSOR_3<line)) {OnRev(OUT_C);OnFwd(OUT_A);} //senor3が黒い線に反応したら右旋回する。 if((SENSOR_1<line)&&(SENSOR_3>line)) //sensor1が黒い線に反応したら左旋回する。 {OnRev(OUT_A);OnFwd(OUT_C);} if(SENSOR_2 == 1){ //もし、タッチセンサーに当たったら、 OnRev(OUT_A+OUT_C); Wait(80); //少し戻って OnFwd(OUT_A); OnRev(OUT_C); Wait(150); // 指定の時間分方向転換する。 } }
・ライントレースする線の太さによって、このプログラムの処理では対応できないことに気がついた。自分たちの班は線を跨いで走行するものなので、作り変えるとしたら黒い線を通りながらの動作もやってみたいと思った。
・このプログラムでは、あまりにキツいカーブだと曲がりきれないことがある。光センサーを2つとも後ろにつけて走るプログラムを組もうとしたが、途中で挫折。
task main() #define line 40 { SetSensor(SENSOR_1,SENSOR_LIGHT); //sensor1を光センサーと定義 SetSensor(SENSOR_3,SENSOR_LIGHT); //sensor3を光センサーと定義 SetSensor(SENSOR_2,SENSOR_TOUCH); //sensor2をタッチセンサーに定義 while(true){ //{}内の行動をし続ける if((SENSOR_1>line)&&(SENSOR_3>line)) {OnFwd(OUT_A+OUT_C);} //もしsensor1とsensor3が白い部分に反応していたら直進する if((SENSOR_1>line)&&(SENSOR_3<line)) {OnRev(OUT_C);OnFwd(OUT_A);} //senor3が黒い線に反応したら右旋回する。 if((SENSOR_1<line)&&(SENSOR_3>line)) //sensor1が黒い線に反応したら左旋回する。 {OnRev(OUT_A);OnFwd(OUT_C);} if(SENSOR_2 == 1){ // もし、互いにぶつかったら OnRev(OUT_A+OUT_C); Wait(90); // やや、戻って OnFwd(OUT_A);OnRev(OUT_C); Wait(50); OnFwd(OUT_A+OUT_C); Wait(45); OnFwd(OUT_C);OnRev(OUT_A); Wait(50); } }
課題2−1と違って、一度線から離れるため元の黒線に戻ってきてまた、ライントレースさせるのが難しい。
2体のロボと調整させながらなのでやや苦労した。途中、お互いがぶつかってもなかなか上手くいかないことが多くあったので、プログラムを書き換える必要があると思う。
・ほとんど課題2−1のプログラムと同じなので、プログラムをくむのにそれほど時間はかからなかったが、なかなか上手くいかずプログラムの微調整に時間がかかった。
コメントをお願いします。