目次 #contents *はじめに [#efefdf44] #ref(2016b/Member/ssh/Mission2/2016b-mission2.png) 今回私は、上の図のA地点からスタートしてQ付近の3/4円周上でピンポン玉をつかみ、そのピンポン玉をD地点に置いたゴールにシュートするコースを選択した。 *機体の説明 [#ubda7b3e] **全体像 [#yce6f36d] 機体の本体部分はなるべくコンパクトでシンプルな形にして、小回りしやすくした。そして、ピンポン玉をキャッチするためのパーツを機体の前部に取り付けた。 #ref(2016b/Member/ssh/Mission2/1482125363195.png) **アームパーツ [#q1120e27] プログラムを簡単にするため、また、バッテリーの減少による機体の動作の変化に対応するために、広い範囲でピンポン玉をキャッチできるようにした。 #ref(2016b/Member/ssh/Mission2/DSC_0197.png) シュートするためにピンポン玉を機体で押し込む際に、ピンポン玉がまっすぐ転がらなかった。それを改善するためにピンポン玉が左右に転がっていかないようにするパーツを取り付けた。 #ref(2016b/Member/ssh/Mission2/1482125361765.png) *プログラムの説明 [#w61ced9f] **今回使ったマクロとサブルーチン [#zfc80fab] #define left_turn OnFwd(OUT_C); Off(OUT_A); //左に曲がる動作である。 #define right_turn OnFwd(OUT_A); Off(OUT_C); //右に曲がる動作である。 #define left_senkai OnFwd(OUT_C); OnRev(OUT_A); //左に機体の方向を変える動作である。 #define right_senkai OnFwd(OUT_A); OnRev(OUT_C); //右に機体の方向を変える動作である。 #define go_forward OnFwd(OUT_AC); //まっすぐ進む動作である。 #define TURN_TIME 80 //頻繁に使う時間の値を定義した。 機体が黒線をなぞって進み、また、交差点を判断する動作である。 黒線の左側の境目を判断して進んでいるため、光センサーが最も暗いと判断する黒線の真ん中に来た時に交差点だと判断する。 また、交差点とカーブを見分ける方法は、光センサーは黒線の左側の境目を判断して進んでいるため、光センサーが最も暗いと判断する黒線の真ん中に来た時に交差点だと判断するようにしてある。 sub folow_line() { SetSensor(SENSOR_2,SENSOR_LIGHT); ClearTimer(0); while(FastTimer(0)<30) { if(SENSOR_2>50){right_senkai; ClearTimer(0);} else if(SENSOR_2>47){right_turn; ClearTimer(0);} else if(SENSOR_2>43){go_forward; ClearTimer(0);} else if(SENSOR_2>39){left_turn; ClearTimer(0);} else if(SENSOR_2>35){left_senkai;} } Off(OUT_AC); PlaySound(SOUND_UP); Wait(100); Off(OUT_AC); } 交差点で直進するサブルーチンである。 sub chokusin() { right_turn; Wait(TURN_TIME*2); Off(OUT_AC); } 交差点で右折するサブルーチンである。 sub usetu() { right_turn; Wait(TURN_TIME); Off(OUT_AC); } 交差点で左折するサブルーチンである。 sub sasetu() { left_senkai; Wait(TURN_TIME/2); Off(OUT_AC); } ピンポン玉をキャッチするサブルーチンである。 sub CATCH() { OnRev(OUT_B); Wait(40); Off(OUT_B); } ピンポン玉をゴールに押し込むサブルーチンである。 sub shoot() { OnRev(OUT_AC); Wait(100); Off(OUT_AC); OnFwd(OUT_B); Wait(60); Off(OUT_B); OnFwd(OUT_AC); Wait(70); OnRev(OUT_AC); Wait(100); Off(OUT_AC); } **今回の主要なプログラム [#y3cdd9e5] task main() { folow_line(); //A地点から交差点Pまで進む。 chokusin(); //交差点PからQまで進む。 folow_line(); chokusin(); //3/4演習場でピンポン玉をキャッチして進む。 CATCH(); folow_line(); chokusin(); //交差点QからRまで進む。 folow_line(); usetu(); //交差点RからPまで進む。 folow_line(); chokusin(); //交差点PからSまで進む。 folow_line(); sasetu(); //交差点SからD地点まで進む。 folow_line(); chokusin(); //ピンポン玉をゴールに押し込む。 shoot(); } *まとめ [#a554eec9] 今回の課題はライントレース自体は機体の大きさやアームパーツを工夫することでスムーズにできた。具体的には、アームパーツの構造をシンプルにすることで軽くし、本体に取り付けた時に重心が変わりにくくなるようにした。。しかし、最後のシュートがなかなかうまくいかなかった。機体を走らせる紙を丸めた時の跡があるため、強くピンポン玉を押し出さなければいけないところで、押し込みが足りずピンポン玉が戻ってきてしまった。全体的に見るとうまくいった部分はあったが詰めが甘く、完全な成功に至らなかった。