Welcome! *課題 [#n26bc92f] 所定のコースを一周する。但し、道中に置かれた缶は元あった場所に戻さなければならない。 *ロボットの説明 [#aaf182c5] 小回りが利くように車幅を限界まで狭め、ライトセンサも極力車体に近づけた。 又、タッチセンサの感度を良くする為、バンパーを設置した。 *プログラム [#c8a26b8b] #define THERESHOLD 47 // 閾値 #define HIGHESTPOWER 7 #define HIPOWER 2 #define LOWPOWER 0 #define set_power_HE SetPower(OUT_AC,HIGHESTPOWER); #define set_power_H SetPower(OUT_AC,HIPOWER); #define set_power_L SetPower(OUT_AC,LOWPOWER); #define go_forward set_power_H; OnFwd(OUT_AC); // 直進 #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 35 // 通常のカーブとみなす時間の最大値 #define short_break Off(OUT_AC); Wait(100); // 小休止 #define cross_line go_forward set_power_H;\ OnFwd(OUT_AC); Wait(20); short_break; // 交差点通過 #define go_forward1 OnFwd(OUT_AC); Wait(50); #define U_turn1 set_power_HE; OnRev(OUT_A);OnFwd(OUT_C);\ Wait(145); // 右半回転 #define U_turn2 set_power_HE; OnRev(OUT_C);OnFwd(OUT_A);\ Wait(145); // 左半回転 #define go_back OnRev(OUT_AC); Wait(50); // 後退 sub line_trace() // ライントレース用プログラム { if (SENSOR_1 < THERESHOLD -4) { turn_right1; } else { if (SENSOR_1 < THERESHOLD -2) { turn_right0; } else if (SENSOR_1 < THERESHOLD +2) { go_forward; } else if (SENSOR_1 < THERESHOLD +4) { turn_left0; } else { turn_left1; } } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); ClearTimer(1); while (FastTimer(1) <= 1200) { line_trace(); Wait(STEP); } if (SENSOR_2==1) { // タッチセンサが反応した場合、 go_forward1; // 少し直進し、 U_turn1; // 半回転し、 go_back; // 少し後退し、 U_turn2; // 半回転してライントレースに戻る } } ClearTimer(0); ClearTimer(1); while (FastTimer(1) <= 5000) { while (FastTimer(0) < nMAX) { // 黒を続けてnMAX秒認識しない場合、 通常のライントレースを行う line_trace(); ClearTimer(0); } Wait(STEP); } turn_left1; Wait(nMAX); // 進行方向修正 cross_line; // 交差点通過 ClearTimer(0); // タイマーをリセット } ClearTimer(0); ClearTimer(1); while (true) { line_trace(); Wait(STEP); } } } } *反省 [#s7f7c576] 正確に線を辿ることが出来るに至ったものの、ターンの円滑さに欠けていたので、 よりスムースにカーブを曲がるようにプログラムを改良する必要があると思った。