[[2015a/Member]] #contents *ロボット本体の説明 [#mad047d8] **ロボットの紹介 [#e6b27aac] -全体像…アームを左右二本ずつにすることでよりボールを離しにくくした。 また、1つのモーターで左右のアームを動かすことが出来る。 #ref(./gbgfbd.jpg) -裏側から見た写真…センサーをできるだけ本体の中心に近づけることで、より小回りがよくなるようにした。 #ref(./grgwerfw.jpg) **アーム部分とセンサー部分 [#s2ec782d] #ref(./htergref.jpg) *本体の制作において [#nb07a091] **工夫した点 [#cda40afd] -できる限りセンサーをロボットの中心に近づけることで小回りをよくした点 -1つのモーターで左右のアームを同時に操作できる構造のアームを作った点 **反省点 [#nbea7ffe] -アーム部分がボールに前にあるボールに当たり、ボールをうまく掴むことができなかったため、ボールを線の外に配置せざるを得なかった点 *プログラムの説明 [#p47e8be0] **ルートとボールの配置 [#y9bba3d6] #ref(./unnamed.jpg) **プログラム紹介 [#n5c6116b] /* 数字及びしきい値、動作時間を設定する */ #define gostr OnFwd(OUT_A+OUT_C); #define goback OnRev(OUT_A+OUT_C); #define gori OnFwd(OUT_A); OnRev(OUT_C); #define gole OnFwd(OUT_C); OnRev(OUT_A); #define THRESHOLD 40 #define runtimeone 95 #define armtimer 200 #define STEP 300 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); gostr; ClearTimer(0); ClearTimer(1); /* 黒の部分と白い部分の境界をトレースする */ while(Timer(0) < runtimeone){ if(SENSOR_1 < THRESHOLD){ gori; until(SENSOR_1 > THRESHOLD); gostr; }else{ gole; until(SENSOR_1 < THRESHOLD); gostr; } } /* 一回目の交差点で停止 */ Off(OUT_A+OUT_C); Wait(STEP); gostr; Wait(30); Off(OUT_A+OUT_C); /* 黒の部分と白い部分の境界をトレースする */ while(Timer(1) < armtimer){ if(SENSOR_1 < THRESHOLD){ gori; until(SENSOR_1 > THRESHOLD); gostr; }else{ gole; until(SENSOR_1 < THRESHOLD); gostr; } } /* ボールを掴む動作 */ Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(10); Off(OUT_B); gostr; Wait(30); Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(10); Off(OUT_B); goback(OUT_A+OUT_C); Wait(40); Off(OUT_A+OUT_C); Wait(30); ClearTimer(0); /* 黒の部分と白い部分の境界をトレースする */ while(Timer(0) < 100){ if(SENSOR_1 < THRESHOLD){ gori; until(SENSOR_1 > THRESHOLD); gostr; }else{ gole; until(SENSOR_1 < THRESHOLD); gostr; } } /* 二回目の交差点で停止 */ Off(OUT_A+OUT_C); Wait(STEP); gostr; Wait(30); Off(OUT_A+OUT_C); ClearTimer(0); /* 黒の部分と白い部分の境界をトレースする */ while(Timer(0) < 190){ if(SENSOR_1 < THRESHOLD){ gori; until(SENSOR_1 > THRESHOLD); gostr; }else{ gole; until(SENSOR_1 < THRESHOLD); gostr; } } /* ボールをシュートする */ Off(OUT_A+OUT_C); Wait(30); gostr; Wait(100); Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(10); Off(OUT_B); goback; Wait(100); Off(OUT_A+OUT_C);; } *プログラムの制作において [#f02621ba] **工夫した点 [#jae10a02] **反省点 [#je989337] -交差点をうまく認識させることができず、すべて時間に選る制御に頼ってしまった点 -プログラムを綺麗にまとめることができず、長大化してしまった点 *実際の動作と感想 [#q9162f10]