ボール運搬ロボットの作成 ピンポン玉または青と赤のボールを運搬して、所定の容器の中に入れる。
{ SetSensorLight(S2); // センサーを起動 long t0=CurrentTick(); // 基準の設定 while(CurrentTick()-t0<MOVE_TIME){ if(SENSOR_2>W1){ rot_r;t0=CurrentTick(); //光センサがW1以上の時右に旋回 } else if(SENSOR_2>W2){ turn_r;t0=CurrentTick(); ///光センサがW1以上の時右に旋回 } else if(SENSOR_2>G){ go_straight;t0=CurrentTick();//光センサがG以上の時直進 } else if(SENSOR_2>B1){ turn_l;t0=CurrentTick();//光センサがB2以上の時左に曲がる } else{ rot_l;// その他の時左に旋回 } } }
{ SetSensorLight(S2); long t0=CurrentTick(); while(CurrentTick()-t0<MOVE_TIME){ if(SENSOR_2>W1){ rot_l;t0=CurrentTick(); //光センサがW1k以上の時右に旋回 } else if(SENSOR_2>W2){ turn_l;t0=CurrentTick();//光センサがW1以上の時右に旋回 } else if(SENSOR_2>G){ go_straight;t0=CurrentTick();//光センサがG以上の時直進 } else if(SENSOR_2>B1){ turn_r;t0=CurrentTick();光センサがB1以上の時左に曲がる } else{ rot_r;その他の時右に旋回 } } }
{ Off(OUT_BC); Wait(1000); }
OnFwd(OUT_A,70); Wait(600); Off(OUT_A); Wait(500); OnRev(OUT_A,50); Wait(500); Off(OUT_A);}
OnRev(OUT_A,60); Wait(700); Off(OUT_A); OnFwd(OUT_A,55); Wait(500); Off(OUT_A);}
BACK; Wait(t); Off(OUT_BC);}
{
Off(OUT_A); go_straight; //枠から脱出する Wait(1000); Off(OUT_BC); follow_line_l(); short_break(); rot_r; Wait(400); Off(OUT_BC); go_straight; Wait(800); Off(OUT_BC); arm_down(); //床のボールの二個目は引きずって運ぶ turn_r; Wait(3500); Off(OUT_BC); shoot(); Wait(1000); rot_r; Wait(3800); Off(OUT_BC); go_straight; Wait(6600); Off(OUT_BC); arm_down(); back(3000); OnRL(0,-SPEED_L); Wait(300); Off(OUT_BC); shoot();//ボールを入れる
} 今回はライントレースするよりも1つ1つの動きを決めた方が早く、確実に進んだので動きは定義してプログラムにした。
{ SetSensorLight(S2); long t0=CurrentTick(); while(CurrentTick()-t0<MOVE_TIME){ if(SENSOR_2>W1){ rot_r;t0=CurrentTick(); } else if(SENSOR_2>W2){ turn_r;t0=CurrentTick(); } else if(SENSOR_2>G){ go_straight;t0=CurrentTick(); } else if(SENSOR_2>B1){ turn_l;t0=CurrentTick(); } else{ rot_l; } } }
SetSensorLight(S2); long t0=CurrentTick(); while(CurrentTick()-t0<MOVE_TIME){ if(SENSOR_2>W1){ rot_l;t0=CurrentTick();//光センサがW1以上の時右に旋回 } else if(SENSOR_2>W2){ turn_l;t0=CurrentTick();//光センサがW2以上の時右に旋回 } else if(SENSOR_2>G){ go_straight;t0=CurrentTick();//光センサがG以上の時右に旋回 } else if(SENSOR_2>B1){ turn_r;t0=CurrentTick();//光センサがB1k以上の時右に旋回 } else{ rot_r; } } }
{ while(SENSOR_2<W1){ go_straight;//光センサがW1以下の時右に旋回 } while(SENSOR_2>G){ turn_l;//光センサがG以上の時右に旋回 } Off(OUT_BC); }
{ while(SENSOR_2<W1){ go_straight;//光センサがW1以下の時右に旋回 } while(SENSOR_2>G){ rot_l;//光センサがG以上の時右に旋回 } Off(OUT_BC); }
{ Off(OUT_BC); Wait(1000); }
{ OnFwd(OUT_A,50); Wait(500); Off(OUT_A); Wait(500); OnRev(OUT_A,50); Wait(500); Off(OUT_A); }
{ OnRev(OUT_A,60); Wait(600); Off(OUT_A); OnFwd(OUT_A,90); Wait(800); Off(OUT_A); }
{ BACK; Wait(t); }
{ go_straight; Wait(1000); Off(OUT_BC); rot_l; //90℃曲がる Wait(2800); Off(OUT_BC); go_straight; Wait(3000); Off(OUT_BC); rot_l; Wait(4500); Off(OUT_BC); go_straight; Wait(3000); turn_l; Wait(8700); Off(OUT_BC); Wait(27000); OnFwd(OUT_A,50); Wait(700); OnRev(OUT_BC,60); Wait(700); Off(OUT_BC); shoot(); ボールを入れる }