*ロボットの紹介 [#ka0eb18a] +1台目のロボット #ref(2013a/Member/Sho/Mission2/DSC_0008.jpg,10%) #ref(2013a/Member/Sho/Mission2/DSC_0009.jpg,10%) #ref(2013a/Member/Sho/Mission2/DSC_0010.jpg,10%) #ref(2013a/Member/Sho/Mission2/DSC_0011.jpg,10%) #ref(2013a/Member/Sho/Mission2/DSC_0012.jpg,10%) #ref(2013a/Member/Sho/Mission2/DSC_0013.jpg,10%) ++2台目のロボット #ref(2013a/Member/Sho/Mission2/_36974.jpg,30%) #ref(2013a/Member/Sho/Mission2/_36972.jpg,30%) #ref(2013a/Member/Sho/Mission2/_36968.jpg,30%) -ロボットの前方は、ボールをつかむためのアームとパスをするためアームを取り付けて一つのモーターによってどちらもできるようにしました。 -アームの部分を四角形し、ボールを運ぶ時のボールを手放してしまうのを防ぎ、一辺を車体の横幅ギリギリまで大きくすることでボールをつかむ確率を上げました。 -ロボットの後方は、タイヤをつけてロボット全体のバランスを整えるようにしました。 -課題1のロボットとベースを同じにすることでプログラムの面でも課題1のものを活かせるようにしました。 -小さくて平たいブロックをたくさん使うことによって、ロボットの強度を上げるとともに重たくなることも防ぎました。 -タイヤも課題1と同様、小さいものを使うことによって機動性を高めました。 -タッチセンサーは、アームのなかほどにつけました。 -もう一つのロボットも同じ仕様にしてパスの出し手と受け手の違いを少なくしました。 *コース攻略 [#w3a23940] #ref(2013a/Member/Sho/Mission2/robocon2013a.png,70%) -今回のコースは、課題1のコースを利用したもので基本的なライントレースはあまり変わらなかったです。 -RCXでは、赤外線通信がロボットとの距離が遠くてできなかったので、完全に2台のロボットを時間でコントロールしました。 -しきい値は、課題1より少し高く39に設定することで調整できました。 -パスは、真っ直ぐできるようにロボットどうしの向きに注意しました。 -ボールをつかむ動作では、少しでもずれると取れないので慎重に時間のコントロールをしました。 *プログラム説明 [#ce91a882] #define THRESHOLD 39 #define HIPOWER 7 #define LOWPOWER 2 #define set_power_H SetPower(OUT_AC,HIPOWER); #define set_power_L SetPower(OUT_AC,LOWPOWER); #define set_power_N SetPower(OUT_B,LOWPOWER); #define go_fwd set_power_H; OnFwd(OUT_AC); #define arm_fwd set_power_N; OnFwd(OUT_B);Wait(30);Off(OUT_B); #define arm_bwd set_power_N; OnRev(OUT_B);Wait(30);Off(OUT_B); #define turn_left1 set_power_L ;\ OnFwd(OUT_C);OnRev(OUT_A); #define turn_left0 set_power_L ;\ OnFwd(OUT_C);Off(OUT_A); #define turn_right0 set_power_L ;\ OnFwd(OUT_A);Off(OUT_C); #define turn_right1 set_power_L ;\ OnFwd(OUT_A);OnRev(OUT_C); #define STEP 1 #define nMAX 200 #define short_break Off(OUT_AC); Wait(100); #define CROSS_TIME 300 #define cross_line set_power_L;\ OnFwd(OUT_A);OnRev(OUT_C);\ Wait(CROSS_TIME);short_break; sub followline_l () { int nOnline=0; int MOVETIME; MOVETIME=0; SetSensor(SENSOR_2,SENSOR_LIGHT); PlaySound(SOUND_UP); MOVETIME=MOVETIME+500; while(nOnline < nMAX && FastTimer(0)<=MOVETIME){ if(SENSOR_2< THRESHOLD -14) { turn_left1; nOnline++; }else{ if(SENSOR_2< THRESHOLD -10){ turn_left0; }else if(SENSOR_2< THRESHOLD -7){ go_fwd; }else if(SENSOR_2< THRESHOLD -1){ turn_right0; }else{ turn_right1; } nOnline=0; } Wait(STEP*10); } } sub followline_r () { int nOnline=0; int MOVETIME; MOVETIME=0; SetSensor(SENSOR_2,SENSOR_LIGHT); MOVETIME=MOVETIME+500; PlaySound(SOUND_DOWN); while(nOnline < nMAX && FastTimer(0)<=MOVETIME){ if(SENSOR_2< THRESHOLD -14) { turn_right1; nOnline++; }else{ if(SENSOR_2< THRESHOLD -10){ turn_right0; }else if(SENSOR_2< THRESHOLD -7){ go_fwd; }else if(SENSOR_2< THRESHOLD -1){ turn_left0; }else{ turn_left1; } nOnline=0; } Wait(STEP*10); } } sub followline_l1 () { int MOVETIME; MOVETIME=0; SetSensor(SENSOR_2,SENSOR_LIGHT); MOVETIME=MOVETIME+500; PlaySound(SOUND_LOW_BEEP); while(FastTimer(0)<=MOVETIME){ if(SENSOR_2< THRESHOLD -14) { turn_left1; }else{ if(SENSOR_2< THRESHOLD -10){ turn_left0; }else if(SENSOR_2< THRESHOLD -7){ go_fwd; }else if(SENSOR_2< THRESHOLD -1){ turn_right0; }else{ turn_right1; } Wait(STEP*10); } } } sub catch_1 () { turn_right1;Wait(50); Off(OUT_AC);Wait(50); OnFwd(OUT_B);Wait(10); Off(OUT_B);Wait(10); go_fwd;Wait(10); Off(OUT_AC);Wait(10); OnRev(OUT_B);Wait(10); Off(OUT_B);Wait(50); turn_left1;Wait(50); Off(OUT_AC);Wait(50); } sub throw_1 () { OnFwd(OUT_B);Wait(1); Off(OUT_B);Wait(1); OnRev(OUT_B);Wait(50); Off(OUT_B);Wait(50); } sub get_1 () { OnFwd(OUT_B);Wait(20); Off(OUT_B);Wait(600); OnRev(OUT_B);Wait(50); Off(OUT_B);Wait(50); } task main () { SetSensor(SENSOR_2,SENSOR_LIGHT); ClearTimer(0); int nOnline; int MOVETIME; while(FastTimer(0)<=500){ followline_l(); } Off(OUT_AC); Wait(50); PlaySound(SOUND_DOUBLE_BEEP); ClearTimer(0); while(FastTimer(0)<=500){ followline_l(); } Off(OUT_AC); Wait(50); PlaySound(SOUND_DOUBLE_BEEP); ClearTimer(0); catch_1(); while(FastTimer(0)<=500){ followline_l(); } Off(OUT_AC); Wait(50); PlaySound(SOUND_DOUBLE_BEEP); ClearTimer(0); while(FastTimer(0)<=500){ followline_l1(); } PlaySound(SOUND_DOUBLE_BEEP); turn_right1; Wait(30); ClearTimer(0); while(FastTimer(0)<=500){ followline_r(); } Off(OUT_AC); Wait(50); PlaySound(SOUND_CLICK); ClearTimer(0); while(FastTimer(0)<=500){ followline_r(); } Off(OUT_AC); Wait(50); PlaySound(SOUND_CLICK); ClearTimer(0); turn_left1;Wait(100); Off(OUT_AC);Wait(50); throw_1(); turn_right1;Wait(100); Off(OUT_AC);Wait(10); while(FastTimer(0)<=500){ followline_r(); } Off(OUT_AC); Wait(50); PlaySound(SOUND_CLICK); ClearTimer(0); turn_left1;Wait(100); Off(OUT_AC);Wait(50); get_1(); turn_right1;Wait(100); Off(OUT_AC);Wait(10); while(FastTimer(0)<=500){ followline_r(); } Off(OUT_AC); Wait(50); PlaySound(SOUND_CLICK); ClearTimer(0); turn_left1;Wait(100); Off(OUT_AC);Wait(50); throw_1(); turn_right1;Wait(50); Off(OUT_AC);Wait(50); } *まとめ [#ze9cfd38]