[[2012b/Member]] *ピンポン玉を持ちながらライントレース後ピンポンゴール [#hc48c2e1] **ロボット [#yaa408ee] ロボット製作もプログラミングも相方が頑張ったので僕はその集大成を頑張ってレポートしてみようと思います。 見てください、シンプルなロボットを。世の常ではsimple is the bestですよね。 #ref(./robo01.jpg,26379 bytes,シンプルなロボット) これは初期型のロボットにピンポン玉を取るための”手”をつけて、後はほとんど変わりません。”手”はモーターとピンポン玉を囲むカゴでできています。これはOUT_Aで動かし、右タイヤがOUT_B左タイヤがOUT_Cとなっています。 #ref(./robo02.jpg,26622 bytes,”手”主人公) 今度はちゃんと自分で考えて作ります。 では次にプログラムの解説です。 *プログラム [#n3748e5e] #define left01 OnFwd(OUT_B,40);OnRev(OUT_C,20); //ライントレース時の左旋回 #define THRESHOLD 45 //しきい値 #define STEP 10 // 一回の判定で進む時間 #define left00 OnFwd(OUT_B,30);OnFwd(OUT_C,-30);Wait(1200); //初めにピンポンとるときに左向く #define mae00 OnFwd(OUT_BC,20);Wait(600); //ピンポンをとるために前身 #define right00 OnFwd(OUT_C,30);OnFwd(OUT_B,-30);Wait(400); //left00の反対でライントレースするために右を向く #define short_break00 Off(OUT_BC); Wait(1000); //小休止 #define mae01 OnFwd(OUT_BC,20);Wait(400); //黒のラインへ進む #define short_break01 Off(OUT_BC); Wait(500); //小休止 #define right01 OnFwd(OUT_C,40);OnRev(OUT_B,20); //右旋回 #define right03 OnFwd(OUT_C,30);OnFwd(OUT_B,-30);Wait(500); //右旋回 task main() { left00; mae00; short_break00; OnFwd(OUT_A,20);Wait(300);Off(OUT_A); mae01; right00; SetSensorLight(S3); //光センサー short_break01 long time1,timeA=0; time1 = CurrentTick(); while(5000 >= timeA){ //交差点を避けるためタイマーで反対車線に渡る timeA = CurrentTick()-time1; if(SENSOR_3 < THRESHOLD){ left01; }else{ right01; } Wait(STEP); } short_break01 OnFwd(OUT_C,30);Wait(300); long time2,timeB=0; time2 = CurrentTick(); ////交差点を避けるためタイマーで反対車線に渡る while(9000 >= timeB){ timeB = CurrentTick()-time2; if(SENSOR_3 < THRESHOLD){ right01; }else{ left01; } Wait(STEP); } short_break01 OnFwd(OUT_B,30);Wait(300); long time3,timeC=0; time3 = CurrentTick(); ////交差点を避けるためタイマーで反対車線に渡る while(26000 >= timeC){ timeC = CurrentTick()-time3; if(SENSOR_3 < THRESHOLD){ left01; }else{ right01; } Wait(STEP); } short_break01; right03; OnFwd(OUT_BC,50);Wait(1000);Off(OUT_BC); Off(OUT_BC);Wait(600); OnFwd(OUT_A,-50);Wait(300);Off(OUT_A); OnFwd(OUT_BC,100);Wait(300);Off(OUT_BC); //ここの4、5行はピンポンをゴールするため調整 OnFwd(OUT_BC,-100);Wait(400);Off(OUT_BC); } *解説 [#qbb963d1] #ref(./2012b-mission1.png,コース) 基本的にこの全ての交差点を避けるために変数を使い、時間を測ってライントレースを行います。 相方とはコースが逆ですが、ライントレースで交差点を避けるところはほぼ同じなので変えなくても大丈夫でした。ですが、最後の小休止からのゴールが少し届かなかったので最後の小休止の後、少し前に行ってから”手”を上にボールが逃げないように素早く挙げ、勢い良くゴールするために速いスピードで押し出し、万一枠の中に入らないようにバックします。 最後に交差点の避け方ですが、小休止を合図に交差点に当たる前に交差点のある道の向こう側に渡ります。詳しくは↓画像より。 #ref(./sen.png,30分間かけて描きました) **最後に [#d2de8f9e] 色々大変でっていうのは言い訳ですけど、ロボット製作にはあまり参加できませんでした。 カウントでやってみたいと思いつつ意味がわからず断念してしまったりしました。 今度は積極的に参加し、創作の技術をあげたいです。