#contents *課題 [#w34d31d6] #ref(2017a/Member/rayonne/Mission2/2017a-mission2.png) 今回私はE地点直進コースを選択したのでコースは以下のとおりである。 ◦Aスタート ◦E直進 ◦F(SOUND_UP) ◦Q一時停止(SOUND_DOWN)&左折 ◦R直進(SOUND_UP) ◦S左折(SOUND_UP) ◦G(SOUND_UP) ◦H(SOUND_UP) ◦T一時停止(SOUND_DOWN)&直進 ◦T一時停止(SOUND_DOWN)&直進 ◦R一時停止(SOUND_DOWN)&左折 ◦S直進(SOUND_UP) ◦P左折(SOUND_UP) ◦E一時停止(SOUND_DOWN)&左折 ◦A停止(SOUND_DOWN) *ロボット [#pd8302c3] #ref(2017a/Member/rayonne/Mission2/IMG_0305.JPG) 主な構造は見本のものと同様だが、光センサーの位置をタイヤの軸上に近づけてプログラムの調整しやすくした 主な構造は見本のものと同様だが、光センサーの位置をタイヤの軸上に近づけてプログラムでの調整しやすくした *サブルーチン [#g766cb30] **線の左側を走行する [#l7517e70] 黒の線の左側をなぞって走行する。 白紙の時は変数X=0にリセット、線と白紙の境目の時には何もしない、線上の時は変数Xに1足す。変数Xが99になった場合交差点と認識する。 sub left_1() { int x=0; while(x<100){ if(SENSOR_1>56){ OnFwd(OUT_C,35); OnRev(OUT_A,20); x=0; } else if(SENSOR_1>45){ OnFwd(OUT_C,30); OnFwd(OUT_A,1); x=0; } else if(SENSOR_1>39){ OnFwd(OUT_C,1); OnFwd(OUT_A,30); } else{ OnFwd(OUT_A,35); OnRev(OUT_C,20); x=x+1; } } } **線の右側を走行する [#z1bb8741] 黒の線の右側をなぞって走行する。 白紙の時は変数X=0にリセット、線と白紙の境目の時には何もしない、線上の時は変数Xに1足す。変数Xが99になった場合交差点と認識する。 sub right_1() { int x=0; while(x<100){ if(SENSOR_1>56){ OnFwd(OUT_A,35); OnRev(OUT_C,20); x=0; } else if(SENSOR_1>45){ OnFwd(OUT_A,30); OnFwd(OUT_C,1); x=0; } else if(SENSOR_1>39){ OnFwd(OUT_A,1); OnFwd(OUT_C,30); } else{ OnFwd(OUT_C,35); OnRev(OUT_A,20); x=x+1; } } } **傾いた機体を戻す [#j4335e52] 交差点を認識する際に傾いた車体を時計回りに回すことで元に戻す sub hukki_1() { Off(OUT_AC); OnRev(OUT_A,30); OnFwd(OUT_C,60); Wait(300); } **線を飛び越える [#peee705f] 左なぞりから右なぞりに変えるとき線を飛び越えるため前に少し走行する sub hukki_2() { Off(OUT_AC); OnFwd(OUT_AC,40); Wait(200); } **sounddownを鳴らす一連の動作 [#w40ad048] sounddownの際は停止をしなくてはならないので一連の動作をまとめた sub sounddown() { PlaySound(SOUND_DOWN); Off(OUT_AC); Wait(1000); } *メインタスク [#r043b3d3] task main () { SetSensorLight(S1); left_1(); PlaySound(SOUND_UP); //F通過 Wait(500); left_1(); Wait(200); sounddown(); //Q一時停止&左折 left_1(); PlaySound(SOUND_UP); //R通過 hukki_1(); left_1(); PlaySound(SOUND_UP); //S左折 left_1(); PlaySound(SOUND_UP); //G通過 Wait(300); hukki_1(); right_1(); hukki_2(); left_1(); PlaySound(SOUND_UP); //H通過 Wait(300); left_1(); sounddown(); //T一時停止&直進 hukki_1(); left_1(); sounddown(); //T一時停止&直進 hukki_1(); left_1(); Wait(300); sounddown(); //R一時停止&左折 left_1(); PlaySound(SOUND_UP); //S通過 Wait(100); hukki_1(); left_1(); Wait(200); PlaySound(SOUND_UP); //P左折 left_1(); sounddown(); //E一時停止&左折 hukki_2(); right_1(); sounddown(); //A停止 } *今回の課題を通して [#p6eccb6d] **難しかった点 [#y94cfe72] 線に濃淡があるため線をなぞる際に使用するif関数の数値や交差点を認識するためのwhileの数値の調整が難しかった。 **工夫した点 [#g43ea9c3] 微調整のサブルーチンhukki_1,hukki_2を使うことによってメインタスクをコンパクトにしながらもサブルーチンを5つで済ますことに成功した。また、交差点を急なカーブで誤認しないように右なぞりと左なぞりで分けた。