今回の課題は、ライントレースロボットの作成。
自分たちでコースを作成し、出来るだけ早くコース上を正確にライントレースする。
そしてサブルーチンを使用して、出来るだけプログラミングを簡潔に書く。
今回の自分のミッションは、
◦A地点 → P直進 → Q直進 → Q直進 →R左折 → B地点 この区間をライントレースして
交差点では毎回止まる、である。
今回のロボットは、取り付けた部品がライントレースに必要な部品のみ
しか取り付けていないのでとてもシンプルに仕上げることが出来た。
ロボットの組み立てが簡単であった分、色の明るさを調節するためにその部品を設置する高さを
何回も調整した。
課題1での反省を活かして定義を上手く使い、また、ロボットの動きを 細かく定義した。
#define THRESHOLD 45//光センサーのしきい値 #define SPEED_H 30//直進する時のスピード #define SPEED_L 15//カーブや旋回する時のスピード #define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL); #define go_forward OnRL(SPEED_H, SPEED_H); #define turn_left1 OnRL(SPEED_L, -SPEED_L); #define turn_left0 OnRL(SPEED_L, 0); #define turn_right0 OnRL(0, SPEED_L); #define turn_right1 OnRL(-SPEED_L, SPEED_L); #define STEP 1//一回の動作にかける時間 #define nMAX 150//通常のカーブとして許容できる繰り返しの最大値 #define short_break Off(OUT_BC); Wait(1000); // 小休止 #define CROSS_TIME 70//交差点通過にかかる時間 #define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break;
課題1では使用しなかったサブルーチンでプログラムをまとめる。
sub tyokushinn() { SetSensorLight(S3); int nOnline=0; //続けて黒になった回数(これ以降カウンタとする)
//黒を続けてnMAX回繰り返さない間、通常のライントレースをする while (nOnline < nMAX) { if (SENSOR_3 < THRESHOLD-15) { turn_left1; nOnline++; // カウンタを増やす } else { if (SENSOR_3 < THRESHOLD-7) { turn_left0; } else if (SENSOR_3 < THRESHOLD+7) { go_forward; } else if (SENSOR_3 < THRESHOLD+15) { turn_right0; } else { turn_right1; } nOnline=0; // カウンタをリセット } Wait(STEP); } short_break; // 小休止
PlaySound(SOUND_UP); Wait(1000);//交差点で止まったら1秒間音を鳴らす }
task main() {
tyokushinn();//1つ目の交差点まで進む OnFwd(OUT_BC,50); Wait(250); Off(OUT_BC); OnFwd(OUT_B,30); Wait(200); Off(OUT_B);
tyokushinn();//2つ目の交差点まで進む OnFwd(OUT_BC,50); Wait(100); Wait(OUT_BC);
tyokushinn();//3つ目の交差点まで進む OnFwd(OUT_BC,50); Wait(100); Off(OUT_BC);
tyokushinn();4つ目の交差点まで進む OnFwd(OUT_BC,50); Wait(200); Off(OUT_BC); OnFwd(OUT_B,30); Wait(300); Off(OUT_B);
}
今回の自分のミッションである、A地点からB地点までの移動にかかった時間は
約1分45秒でした。目標時間が1分30秒を切ることだったので残念でした。
もう少し直進とカーブ・旋回する時のスピードを調整したかったです。
それと図で示した場所でロボットが何度も交差点と判断しないことがあった
ので改善したかった。
今回は、ロボットの組み立て、プログラミングの両方ともシンプルにできたと思います。
サブルーチンも自分なりには使いこなせていたと思います。しかし、ミッションの成功率が
8割がた成功したものの2割は失敗していました。
到達時間もかかりすぎてしまったのでもう少し改善したかった。
この反省を次に生かしたい。