[[2016b/Member]]
*目次 [#hcc3fd94]
#contents
*課題 [#eb200637]
**コース [#ve445b5b]
#ref(2016b/Member/GORI/Mission2/2016b-mission2.png,100,全体部分)

**ミッション [#mf7b1822]
A地点をスタートしてQ付近の3/4円周上でピンポン玉をつかみ、そのピンポン玉をD地点においたゴールへシュートする (一人目)~
Aスタート → P直進 → Q直進 → (ピンポン玉をキャッチ) → Q直進 → R右折 → P直進 → S左折 → Dへシュート~
ただし~
・なるべく速く正確に動くロボットになるように工夫して、交差点では1秒間停止すること~
・ピンポン玉はQ近くの3/4円周上ならどこにおいてもよい~
・可能であればC,Dのゴールエリアライン上からシュートする~
*ロボットの説明 [#p0f2dcd8]

**ロボット本体の説明 [#l47437eb]
左右や真っ直ぐ進むように、本体の左右に一個ずつタイヤをつけて、~
後ろの部分に丸い球状の部分をつけて、三点で進むようにした。~
光センサーは、本体の前の中央部分につけて、ロボットの回転軸にできるだけ~
近づけられるところにつけた。
#ref(2016b/Member/GORI/Mission2/IMG_7205.JPG,100,全体部分)


**アームの説明 [#c515e565]
** [#m1ea5293]
アームにギアをかまして、上下に動かせるようにした。
アームを上から下げて、左右にあるブロックの壁と、光センサーの四点でピンポン玉を~
固定するようにした。

#ref(2016b/Member/GORI/Mission2/IMG_7203.JPG,100,全体部分)


*ライントレースの進み方 [#i854d703]
光センサーで線上にいるかどうかを判別して、線上にいるならロボットを左に動かして、~
線上にいないなら、右に動かして、境界線上をじぐざくしながら、進んでいく。~
また、交差点は何秒間まがっているかで、交差点かどうかを判断する。

*プログラミング説明 [#f9865c02]
 #define go_forward OnFwd(OUT_AC);
 #define turn_left1 Off(OUT_A);OnFwd(OUT_C);
 #define turn_left2 OnRev(OUT_A);OnFwd(OUT_C);
 #define turn_right1 Off(OUT_C);OnFwd(OUT_A);
 #define turn_right2 OnRev(OUT_C);OnFwd(OUT_A);
 #define MAX_TIME 22
 #define MAX_TIME2 20
 sub crossing_stop()

二回目のP点では、ロボットが交差点と判断するときと、しない時があったので~
基準値を二種類作り、二回目のP点のときは、基準値の小さいほうを適応させた。
 #define go_forward OnFwd(OUT_AC);//前に進む
 #define turn_left1 Off(OUT_A);OnFwd(OUT_C);//小さく左に曲がる
 #define turn_left2 OnRev(OUT_A);OnFwd(OUT_C);//大きく左に曲がる
 #define turn_right1 Off(OUT_C);OnFwd(OUT_A);//小さく右に曲がる
 #define turn_right2 OnRev(OUT_C);OnFwd(OUT_A);//大きく右に曲がる
 #define MAX_TIME 22//二回目のP点以外での基準値
 #define MAX_TIME2 20//二回目のP点での基準値

 sub crossing_stop1()  //交差点に入って止まる
 {
 ClearTimer(0);
 while(FastTimer(0)<MAX_TIME){
 while(FastTimer(0)<MAX_TIME){//タイマーが基準値以下のときに実行される
 if(SENSOR_2<35){
    turn_left2;
    turn_left2;//しきい値が35以下のところで大きく左に曲がる
 }else if(SENSOR_2<40){
    turn_left1;ClearTimer(0);
    turn_left1;ClearTimer(0);//しきい値が40以下のところで小さく左に曲がる
 }else if(SENSOR_2<43){
    go_forward;ClearTimer(0);
    go_forward;ClearTimer(0);//しきい値が43以下のところで直進する
 }else if(SENSOR_2<47){
    turn_right1;ClearTimer(0);
    turn_right1;ClearTimer(0);//しきい値が47以下のところで小さく右に曲がる
 }else{
    turn_right2;ClearTimer(0);
    turn_right2;ClearTimer(0);//しきい値が48以上のところで大きく右に曲がる
 }
 }
 Off(OUT_AC);Wait(100);OnRev(OUT_AC);Wait(20);
 Off(OUT_AC);Wait(100);
 OnRev(OUT_AC);Wait(20);//タイマーが基準値を上回ったとき、一時停止して、後退する
 }
 sub crossing_stop2()

 sub crossing_stop2()//交差点に入って止まる
 {
 ClearTimer(0);
 while(FastTimer(0)<MAX_TIME2){
 if(SENSOR_2<35){
    turn_left2;
 }else if(SENSOR_2<40){
    turn_left1;ClearTimer(0);
 }else if(SENSOR_2<43){
    go_forward;ClearTimer(0);
 }else if(SENSOR_2<47){
    turn_right1;ClearTimer(0);
 }else{
    turn_right2;ClearTimer(0);
 }
 }
 Off(OUT_AC);Wait(100);OnRev(OUT_AC);Wait(20);
 }
 sub crossing_fwd()

 sub crossing_fwd()//交差点で止まってから、前に進みだす
 {
  go_forward;
  Wait(50);
 }
 sub crossing_right()

 sub crossing_right()//T字路で止まってから、右に曲がる
 {
   turn_right1;
   Wait(100);
 }
 sub crossing_left()

 sub crossing_left()//T字路で止まってから、左に曲がる
 {
   turn_left1;
   Wait(100);
 }
 sub arm_down()

 sub arm_down()//アームを下げる
 {
    OnRev(OUT_B);Wait(20);Off(OUT_B);
 }
 sub arm_up()

 sub arm_up()//アームを上げる
 {
    OnFwd(OUT_B);Wait(20);Off(OUT_B);
 }

 task main()
 {
 SetSensor(SENSOR_2,SENSOR_LIGHT);
 crossing_stop();
 crossing_stop();//P点まで進む
 crossing_fwd();
 crossing_stop();
 crossing_stop();//Q点まで進む
 OnFwd(OUT_A);OnRev(OUT_C);Wait(10);
 crossing_fwd();
 arm_down();
 crossing_stop();
 arm_down();//アームを下げる
 crossing_stop();//Q点まで進む
 crossing_fwd();
 crossing_stop();
 crossing_stop();//R点まで進む
 crossing_right();
 crossing_stop();
 crossing_stop();//P点まで進む
 OnRev(OUT_C);Off(OUT_A);Wait(10);
 OnFwd(OUT_AC);Wait(80);
 crossing_stop();
 crossing_stop();//S点まで進む
 crossing_left();
 crossing_stop();
 arm_up();
 OnFwd(OUT_AC);Wait(100);
 crossing_stop();//D点まで進む
 arm_up();//アームを上げる
 OnFwd(OUT_AC);Wait(100);//ピンポン球を押して、シュートする
 Off(OUT_AC);

 }

*まとめ [#j64ead1c]
練習の時には、プログラミング通りにいかなくて、なかなか苦戦した。でも、本体やプログラミングを修正していくたびに、徐々に良くなっていくところが、すごく楽しかった。~
今回の経験を、最後の課題にむけて活かしていきたい。



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS