今回私は黒線で塗られたラインをなぞりながらボールを運び最後に決められたところへシュートするという課題をしました
下の本来センサーを取り付ける場所の端にボールが飛んでいかないように支えをつけ光センサーを左端に取り付けボールをその間に入るようにしアームによってその上にふたになるように棒をいくつかつけボールがどこかへ行かないように上から押えました
#define BLACK 40//40以下は黒
#define WHITE 50//50以上は白と判断させます
#define SPEED 30//スピードを二種類定義しました
#define speed 10
#define go_forward OnFwd(OUT_BC,SPEED);
#define turn_left OnFwd(OUT_B,speed);OnRev(OUT_C,speed);
#define turn_right OnRev(OUT_B,speed);OnFwd(OUT_C,speed);
#define STEP 1
#define nMAX 150
#define crossing OnFwd(OUT_BC,SPEED);Wait(750);
#define short_break Off(OUT_BC);Wait(2000);
#define shoot OnRev(OUT_A,speed);Wait(10);OnRev(OUT_BC,speed);Wait(1000);OnFwd(OUT_A,speed);Wait(10);OnFwd(OUT_BC,speed);Wait(2000);OnRev(OUT_A,SPEED);Wait(50);シュートの動きを定義しました
#define take OnFwd(OUT_BC,speed);Wait(1000);OnFwd(OUT_A,speed);Wait(10);//ボールを掴むために少し全身してから掴む動きを定義しました
task main() {
SetSensorLight(S3); int nOnline=0; if (true) { while(nOnline< nMAX){ if (SENSOR_3 < BLACK) { turn_left;//黒と判断した時は左折させ nOnline++;//黒のときはカウンターをスタートさせ } else if (SENSOR_3 < WHITE) { go_forward;nOnline=0;//白と黒の間のときはまっすぐ進ませカウンターをリセットし } else { turn_right;nOnline=0;//白のときは右折させカウンターもリセット } Wait(STEP); } short_break; turn_left;Wait(nMAX*STEP); take;//黒のカウントが上限に達した時はボールを掴む動きをさせ nOnline=0; } if (true) {//再びライントレースさせ while(nOnline< nMAX){ if (SENSOR_3 < BLACK) { turn_left; nOnline++; } else if (SENSOR_3 < WHITE) { go_forward;nOnline=0; } else { turn_right;nOnline=0; } Wait(STEP); } short_break; turn_left;Wait(nMAX*STEP); crossing;//二回目の交差点を直進させ nOnline=0; } if (true) { while(nOnline< nMAX){ if (SENSOR_3 < BLACK) { turn_left; nOnline++; } else if (SENSOR_3 < WHITE) { go_forward;nOnline=0; } else { turn_right;nOnline=0; } Wait(STEP); } short_break; turn_left;Wait(nMAX*STEP); shoot;//最後はシュートの動きさせました nOnline=0; }
}
まず、私はカウント方式を使いボールを運びました。 光センサーで40以下は黒と判断させ線の外側をトレースさせたので黒と判断するときは左折、50以上で白と判断させその時は右折させ40と50の間の時はまっすぐ進むようにしてライントレースしました。そして一回目交差点に差し掛かった時はボールを捕まえる動きをさせ、そして再びライントレースさせ二回目の交差点のときは前進させ交差点をわたり、さらに最後の交差点B地点を覆っている黒線に差し掛かったらシュートの動きをさせました。
アームを上げボールの抑えを取りロボット本体をバックさせボールだけを残しまたアームを閉じてロボットを前進させボールを押しまたアームを上げボールだけ押し出しました。
スピードを二種類つくり右左交互に曲がるときはゆっくり進ませ前進するときは少し速く進ませできるだけ振動をおさえました。
急なカーブの時に間違えて交差点と反応してしまうことが多々あったりまた、シュートの時にボールがかってに動いてしまいきちんとシュート出来なかったりしてしまうことがあったのでそこの数を少なくすることが課題です。