[[2014a/MemberOnly/進行状況]] 目次 #contents * 課題の説明 [#a26960c6] 図のようなコースを各自で作成した上で、次のような動作をするロボットを作成せよ。 (下の図において、黒い線の太さは20mmで、線の中央までの距離がcm表示されている)。 1.スタート地点から出発し、黒い線をトレースしていく。 2.一つ目の十字の交差点と二つめの十字の交差点の間に置かれたピンポン玉をつかむ。 3.さらに黒線をトレースしていきゴール地点を目指す。 4.ゴールに向けてピンポン玉をシュートする。 ただしT字路では、直進、右折、左折を正しく判断させること。また二人または三人一組で同じロボットを使用し、ロボット本体は共通のものを使うとする。 &ref(2014a/Member/sugaken/Mission1/2014a-mission1.png); * ロボット本体 [#xf1a24b1] &ref(2014a/Member/sugaken/Mission1/IMG_0345[1].JPG,30%); ** ドライブベース [#ucd7af01] 私たちが使用したロボットは、八の字のライントレースをしたときに使った4輪の基本的な形をしたロボットです。アームを取り付けることが初期のままだと困難だったので、光センサーを本体に近づけて設置しました。本体に近づけたことでトレースの誤差を小さくできているとおもいます。 ** アーム [#afe90714] はじめはモーターを一つ追加して前後に動く力をアームの上げ下げに利用するような構造にしていましたが、アームを動かすよりも前にライントレースをすることがうまくできていなかったので、アームはクワガタのツノような形をしたものに変更しました。 * プログラム [#af3f957e] #define BLACK 40 //閾値 #define turn_right OnFwd(OUT_A);OnRev(OUT_C); //右折 #define turn_left OnFwd(OUT_C);OnRev(OUT_A); //左折 #define search_time 50 //右回りに回ってラインを探す。 #define MOVE_TIME 2000 //スタートからシュートする場所までにかかる時間。 task main() { if (SENSOR_1 < BLACK) { OnFwd(OUT_AC);} //黒線上なら直進 else if (SENSOR_1 > BLACK) { turn_right; //白のところになったら、右に回って黒線を探す。 ClearTimer(0); while (FastTimer(0) <= search_time){ //ある程度右回りに探してなかったら止まる。 if (SENSOR_1 < BLACK) { Wait(15); Off(OUT_AC); } } turn_left; until (SENSOR_1 < BLACK); //右回りして見つからなかったら、左回りをして黒線を探す。 Float(OUT_AC);} ClearTimer(1); while (FastTimer(1) <= MOVE_TIME) { //シュート位置までの時間を測っておいて時間がきたら直 OnFwd(OUT_AC); 進後に停車した勢いでシュートする。 Wait(200); Off(OUT_AC);} } * まとめ [#t95da382] 黒線の上を直進させるようにすることで、プログラムをかなり短くすることができた。しかし、まだまだ閾値の設定がうまく行かずライントレースが必ず成功するわけでわない、そのためスタートからシュート位置につくまでの時間が定まらずスタートからシュートを決めるまで行く事がなかなかできなかった。 今回は期限までに完璧に仕上げることができなっかので次回の課題はより成功率が高くなるようなプログラムやロボットをつくっていきたい。