- 追加された行はこの色です。
- 削除された行はこの色です。
[[2016b/Member]]
*目次 [#r714926f]
#contents
*課題 [#sec56fbe]
次のコースをトレースし、シュートまで決める。
#ref(2016b/Member/gazet/Mission2/2016b-mission2_kosu.png,10.5kb,)
B地点をスタートしてQ付近の3/4円周上でピンポン玉をつかみ、そのピンポン玉をC地点においたゴールへシュートする
◦Bスタート → R直進 → P右折 → Q直進 → (ピンポン玉をキャッチ) → Q直進 → R右折 → P直進 → S右折 → Cへシュート
*機体の説明 [#r602f42d]
**機体全体 [#l6cbf83b]
#ref(2016b/Member/gazet/Mission2/robothi.jpg,11.9kb,)
今回の課題に挑む機体。もろい部分はあるが、しっかり点検してから走らせれば問題なし。
**車部分 [#r9e50c11]
機体
車体はできるだけ小さく作った。小回りが利くようにするためだ。三輪のうち1つはキャスターにしてある。摩擦の少ないパーツを引きずるよりもバックがスムーズになった。
#ref(2016b/Member/gazet/Mission2/ue.jpg,7.34kb,)
#ref(2016b/Member/gazet/Mission2/ura.jpg,12.9kb,)
**アーム部分 [#if9a124f]
黄色い部品で挟みむ。光センサーもアーム部分につけた。モーターもつけたため、重く、しっかり取り付けないと走行中にとれてしまうのが欠点。
#ref(2016b/Member/gazet/Mission2/kuwagata.jpg,7.91kb,)
*プログラムの説明 [#x51f6632]
#define go_go OnFwd(OUT_AC); //前に進む
#define turn_right OnFwd(OUT_C);Off(OUT_A); //右に曲がる
#define turn_left OnFwd(OUT_A);Off(OUT_C); //左に曲がる
#define kyu_turn_r OnFwd(OUT_C);OnRev(OUT_A); //右旋回
#define kyu_turn_l OnFwd(OUT_A);OnRev(OUT_C); //左旋回
#define right_cross turn_right;Wait(110);//交差点右折
#define straight_cross kyu_turn_r;Wait(10);go_go;Wait(30); //交差点直進
#define BLACK_a 44 //これらは色を判断するために使う光センサーの値
#define BLACK_b 48
#define WHITE_a 52
#define WHITE_b 58
#define MOVE_TIME 18
#define ball_get go_go;Wait(20);Off(OUT_AC);OnFwd(OUT_B);Wait(20);Off(OUT_B); //ボールをとる
#define shoot OnRev(OUT_AC); Wait(110);Off(OUT_AC);kyu_turn_l;Wait(80);Off(OUT_AC);Wait(40);kyu_turn_r;Wait(30);OnRev(OUT_B);Wait(20);Off(OUT_ABC); //ボールをゴールへ入れる 回りながら投げる動きに挑戦した。
ライントレースするサブルーチン
黒い線の左側をトレースする
光センサーの値によって5段階の動きをプログラミングした。
黒い線の左側をトレースする
光センサーの値によって5段階の動きをプログラミングした。光センサーの値が低い順に、左旋回、左へ曲がる、直進、右へ曲がる、右旋回と動く。つまり、真黒なところ、真っ白なところでは旋回し、ほとんど黒、ほとんど白いところは曲がる。ちょうど間のところでは直進する。 このようにして黒と白のを行ったり来たりしながら前に進む。黒い線上で旋回する際にかかる時間がMOVE_TIMEより長くなると交差点と認識して止まることになっている。
sub line_trace()
{ ClearTimer(0);
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(FastTimer(0)<=MOVE_TIME){
if(SENSOR_2<BLACK_a){
kyu_turn_l;
}
else if(SENSOR_2<BLACK_b){
turn_left;
ClearTimer(0);
}
else if(SENSOR_2<WHITE_a){
go_go;
ClearTimer(0);
}
else if(SENSOR_2<WHITE_b){
turn_right;
ClearTimer(0);
}
else {
kyu_turn_r;
ClearTimer(0);
}
}
Off(OUT_AC);
Wait(100);
}
ミッションを遂行するプログラム
交差点を判断した後、コース通り進むように右折や直進を行う。
task main()
{
line_trace();
right_cross;
line_trace();
straight_cross;
ball_get;
line_trace();
straight_cross;
line_trace();
right_cross;
line_trace();
straight_cross;
line_trace();
right_cross;
line_trace();
shoot;
}
*感想 [#q33037a9]
折り目に引っかかってしまうので、コースの紙は折りたたまない方がよかった。他の人の紙を借りてプログラムを修正していったので光センサーの値が自分たちの紙と異なっていて、自分たちの紙ではうまくライントレースできなかった。人の紙ではシュートまでうまくできていたので悔しかった。もっとちゃんと考えればよかったと反省している。機体はアーム・光センサーの部分が重くて取れやすかった。モーターを車体上につけるような設計のほうが良かったかもしれない。