- 追加された行はこの色です。
- 削除された行はこの色です。
[[2015a/MemberOnly]]
*使用したロボ [#p88956df]
**使用したロボ [#s04c709e]
基本的なライントレースのロボをベースとしてピンポン玉を保持するためのアームを付加した。
#ref(2015a/Member/swimy/Mission2/R6_5641.jpg,50%,使用したロボット)
**光センサー [#d56fd507]
車体の底の中心より少し前に光センサーを設置した。
#ref(2015a/Member/swimy/Mission2/R6_5035.jpg,50%,裏)
**アーム [#n096c1c0]
車体前方に取り付けたアームはBにつなげたモーターを前転させると閉じる仕組みとなっている
#ref(2015a/Member/swimy/Mission2/R6_3844.jpg,50%,アーム)
*プログラム [#v178b2cc]
今回はラインの右端をトレースするようにしてみた。
このプログラムはBからAに進むものである。
#define THRESHOLD 46//光センサーの値の中心を決める
#define go_forward OnFwd(OUT_AC);//直進
#define turn_left0 OnFwd(OUT_C);//左旋回
#define turn_left1 OnFwd(OUT_C);OnRev(OUT_A);//左折
#define turn_right1 OnFwd(OUT_A);OnRev(OUT_C);//右折
#define turn_right0 OnFwd(OUT_A);//右旋回
#define nMAX 7//判断の最高回数を設定
#define short_break Off(OUT_AC);Wait(100);//小休止
#define CROSS_TIME 30//横断の時間
#define cross_line go_forward;Wait(CROSS_TIME);short_break;//交差点の横断
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
int nOnline=0;//変数nを定義、0にする
int pOnline=0;//変数pを定義、0にする
int nOnline=0;//変数nを交差点判断のために定義、0にする
int pOnline=0;//変数pをボールをつかみ、シュートするタイミングをとるために定義、0にする
while(true){
while (nOnline < nMAX){//nがnMAX未満の時に繰り返す
if(SENSOR_2 < THRESHOLD-7){
turn_right1;
nOnline++;//明度が基準ー7未満の時(はっきりと黒いとき)右折しnのカウントを1増やす
} else {
if(SENSOR_2 <THRESHOLD-3){
turn_right0;//明度が基準ー3未満、−7以上の時(黒っぽいとき)右旋回
} else if(SENSOR_2 <THRESHOLD+3){
go_forward;//明度が基準+3未満、−3以上の時(白と黒の境界付近)直進
} else if(SENSOR_2 <THRESHOLD+7){
turn_left0;//明度が基準+7未満、+3以上の時(白っぽいとき)左旋回
} else {
turn_left1;//明度が基準+7以上の時(はっきり白いとき)左折
} else if(SENSOR_2 <THRESHOLD+3){
go_forward;//明度が基準+3未満、−3以上の時(白と黒の境界付近)直進
} else if(SENSOR_2 <THRESHOLD+7){
turn_left0;//明度が基準+7未満、+3以上の時(白っぽいとき)左旋回
} else {
turn_left1;//明度が基準+7以上の時(はっきり白いとき)左折
}
nOnline=0;//変数nを0に戻す
}
Wait(1);//判断時間
}
pOnline++;//交差点の数を数える
if(pOnline < 2){
OnFwd(OUT_B);Wait(7);
}//1つ目の交差点でボールキャッチ
short_break;
turn_left1; Wait(nMAX*1);
cross_line;//交差点を横断
if(pOnline > 1){
OnRev(OUT_B);Wait(7);
}//2つ目の交差点でアームを開く
cross_line;//2つ目の交差点の時はこれがシュートになる
nOnline=0;
pOnline++;//pを増やすことで交差点の数を数える
if(pOnline < 2){
if(pOnline >0){
OnFwd(OUT_B);Wait(7);//pが1の時アームを閉じる
}
}
}
}
}
}
*反省 [#ifa0622b]
ライントレースはできた。そこで交差点の数で判断してピンポン玉をキャッチ、シュートすればいいのだはないかと考え、組み込んでみた。
一度は時間を計ってシュートの判断をしなければならないと固まった思考にとらわれていたが、ゴール前のT字も交差点カウントで考えたらうまくいった。思考の柔軟性が必要だと感じた。
現に一つ目の交差点上においてあるピンポン玉をキャッチすることはできた。しかし、シュート付近には交差点もなく手詰まりになっていまった。
二つ目の交差点でアームを開いてゴールまでもっていこうとも考えたがなかなかうまく決まらなかった。
おそらく時間によってアームをコントロールすればよいのだろうと思うのだが、ついに完成させることはできなかった。
もっと柔軟な発想をしていくことを次回以降の課題としていきたい。