*課題:缶ころがしロボット [#kbccbb18] 350ml の中身の入ったアルミ缶を所定の場所から所定の場所まで移動させる。 *ロボット [#t854e2b1] *プログラム [#ib783cec] **一号機 [#i88e3e43] #define front(j) OnFwd(OUT_A+OUT_C);Wait(j);Off(OUT_A+OUT_C); //直進マクロ #define back(j) OnRev(OUT_A+OUT_C);Wait(j);Off(OUT_A+OUT_C); //後退マクロ #define right(j) OnRev(OUT_C);OnFwd(OUT_A);Wait(j);Off(OUT_A+OUT_C); //右回転マクロ #define left(j) OnRev(OUT_A);OnFwd(OUT_C);Wait(j);Off(OUT_A+OUT_C); //左回転マクロ #define tomaru(j) Off(OUT_A+OUT_C);Wait(j); //停止マクロ task main() { tomaru(2400); //二号機が缶を持ってくるまで待機 front(140);tomaru(150); //缶を受け取る back(395);tomaru(150); //後退 front(50);tomaru(150); //缶の速度を落とすため、前進 right(80);tomaru(150); //右回転 front(280);tomaru(150); //直進 back(50);tomaru(50); //缶の速度を落とすため、後退 left(83);tomaru(150); //左回転 front(250); //直進 right(30);left(60);right(30); //首を振って、木に対して本体を平行に front(100);tomaru(150); //缶を押し入れる back(160);tomaru(150);left(71);tomaru(150);front(240);tomaru(150); right(71);tomaru(150);front(220);tomaru(100); front(165);tomaru(150);back(395);tomaru(150);front(50);tomaru(150); right(80);tomaru(150); front(280);tomaru(150);back(50);tomaru(50); left(83);tomaru(150);front(250);right(30);left(60);right(30); front(100);tomaru(150); back(160);tomaru(150);left(71);tomaru(150);front(240);tomaru(150); right(71);tomaru(150);front(220);tomaru(100); } **二号機 [#u99a284e] #define front(t) OnFwd(OUT_A+OUT_C);Wait(t); #define right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t); #define left(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t); #define back(t) OnRev(OUT_A+OUT_C);Wait(t); #define up(t) OnFwd(OUT_B);Wait(t); #define down(t) OnRev(OUT_B);Wait(t); #define ACoff Off(OUT_A+OUT_C); #define Boff Off(OUT_B); #define ABCoff Off(OUT_A+OUT_B+OUT_C); task main() { SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_TOUCH); SetPower(OUT_A,7); SetPower(OUT_C,7); SetPower(OUT_B,3); OnFwd(OUT_A+OUT_C); while (true) { if(SENSOR_2==1) { ACoff;down(100); right(45);ABCoff; front(50)ABCoff; Wait(100);up(150);Boff;Wait(100); back(120);left(14); OnFwd(OUT_A+OUT_C); while (true) { if(SENSOR_2==1) { ACoff; down(200);Boff; back(210); until (SENSOR_3==1); ACoff;Wait(100);down(25);Boff; right(10);ACoff;Wait(200); front(15);ACoff;Wait(10); up(250);Boff;right(70);ABCoff; Wait(100); up(20);left(70);ACoff;Wait(200); front(300);Boff; back(120);right(20);ACoff; OnFwd(OUT_A+OUT_C); while (true) { if(SENSOR_2==1) { ACoff; down(450);Boff; back(210); until (SENSOR_3==1); ACoff;Wait(100); back(100);ACoff; front(15);ACoff;right(10);ACoff;Wait(200); up(200);Boff;right(50);ABCoff; Wait(100); back(24);ACoff; left(14);ACoff;Wait(200); OnFwd(OUT_A+OUT_C); while(true) { if(SENSOR_2==1) { down(50);back(100);ABCoff;Wait(200); up(100);Boff; } } } } } } } } } *工夫した点・苦労した点 [#ka8b9356] **ロボット本体 [#da50f98e] **プログラミング [#g11718bc] 光センサをまったく使わず、ウェイトのみでタイミングを取りました。~ そのため、電池の消費により旋回速度が変わってしまうと、そのたびにプログラミングを変更するハメに:(~ 何とかしてマクロを使う。行動ごとにコメントを逐一書く。等のことをしていたら、多少楽だったかもしれません:)~ 走らせたり、止めたりする時間を決めるのが大変でした、。また、何回もロボットを動かして、プログラムを確認している途中で、ロボットがまっすぐに走らなくなってしまい、それを修正するのに苦労しました。 *感想 [#ucab513b]