目次
課題2については2019a/Mission2を参照。 また、A地点から出発し、B地点へ進むコースでプログラムを考えた。
ロボットはできるだけ小さく作り、トレースをしやすくした。前に取り付けたアームで、ボールの上げ下げを行う。
#define BLACK 32 #define WHITE 52 #define kurohai 36 #define GLAY 42 #define sirohai 47 #define SP 20 //速度 #define turn_left OnFwd(OUT_B,SP);Off(OUT_C); //左に曲がる #define turn_right OnFwd(OUT_C,SP);Off(OUT_B); //右に曲がる #define st OnFwd(OUT_BC,SP); // まっすぐ進む #define senkai_left OnFwd(OUT_B,SP);OnRev(OUT_C,SP); //左に旋回 #define senkai_right OnFwd(OUT_C,35);OnRev(OUT_B,35); //右に旋回 #define mochiageu OnRev(OUT_A,SP);Wait(500); //ボールを持ち上げる #define sageru OnFwd(OUT_A,SP);Wait(500); //ボールを落とす
sub follow_line() { SetSensorLight(S2);
long t0=CurrentTick();
while(CurrentTick()-t0<700){ if(SENSOR_2<BLACK){ senkai_left; }else if(SENSOR_2<kurohai){ turn_left; t0=CurrentTick(); }else if(SENSOR_2<GLAY){ st; t0=CurrentTick(); }else if(SENSOR_2<sirohai){ turn_right; t0=CurrentTick(); }else if(SENSOR_2<WHITE){ senkai_right; t0=CurrentTick(); } Wait(1); } Wait(1); } } task main(){ follow_line(); //トレース Off(OUT_BC); //少し左に曲がった状態で停止 OnFwd(OUT_C,SP);Wait(1200); //ロボットを線上に戻す follow_line(); //トレース Off(OUT_BC); //少し左に曲がった状態で停止 OnFwd(OUT_C,SP);Wait(1500); //ロボットが右回りに動くようにする if(SENSOR_2<BLACK){ senkai_left; }else if(SENSOR_2<kurohai){ turn_left; }else if(SENSOR_2<GLAY){ st; }else if(SENSOR_2<sirohai){ turn_right; }else if(SENSOR_2<WHITE){ senkai_right; } Wait(10000); //J地点までトレース OnFwd(OUT_C,SP);Wait(1200); //J地点を右に曲がる follow_line(); //トレース }
J地点から先のルートへ進み、ボールの手前で止まるプログラムを作ることができなかった。また、トレースの成功率が極めて低かったのでそこをより改善できれば良かったと思う。