[[2011a]] #contents *最終課題 〜final〜 [#v4ae0d93] [[2011a/A5/ロボコン/ルール]] なんかがんばる *仲間 [#fe4c89d3] -&color(blue,aqua){いばらきけんみん}; -&color(red,orange){大丈V}; -&color(purple,red){TOKIO}; -&color(white,black){ばるす!}; *ロボット [#x0dd4fbb] -失敗作(初号機) --見た目 &ref(2011a/A5/ロボコン/kakonoaitu.jpg,50%); RCXを二つ使ったことによる見た目の大きさが特徴的なロボットです 空き缶の排除能力やテニスボールの保持能力は凄かったが、その巨体ゆえの小回りの利きにくさが原因でリストラされた。 -成功作 --御名前 オス♂ と メス♀ 今回は2つのロボット --御姿 メス♀ &ref(2011a/A5/ロボコン/zentaiosu.jpg,25%); テニスボールを爪で掻き入れ、モーターを逆回転させることにより同じ爪で打ち出すロボット。 横にタッチセンサーを搭載することにより、ボールを挟んでいる木の壁の位置を把握することができる設計である。 初めの教訓を生かして、小回りの利くロボットになっている。 オス♂ &ref(2011a/A5/ロボコン/osuyatuzentai.jpg,25%); テニスボールを木と木の間から押し出すロボット。テニスボールを押し出すときにメス♀と通信することによりテニスボールをひとつづつ押し出すようにプログラムされている。 このロボットは完全にボールを押し出すことのみに徹している。 ちなみに、このロボットは3輪である。そうすることにより、ボールを挟んでいる木と木の間まで先端部分を挿入することを可能にした。 *プログラム [#of65fce7] -メス♀ #define GO OnFwd(OUT_A+OUT_C); //移動をする際の定義(以下同じ) #define TR OnFwd(OUT_A);Off(OUT_C); #define TL OnFwd(OUT_C);Off(OUT_A); #define TLX OnFwd(OUT_C);OnRev(OUT_A); #define TRX OnFwd(OUT_A);OnRev(OUT_C); #define BACK OnRev(OUT_A+OUT_C); #define STOP Off(OUT_A+OUT_C); #define GET OnFwd(OUT_B);Wait(200);Off(OUT_B); //玉をつかむ #define SHOOT OnRev(OUT_B);Wait(100);Off(OUT_B); //玉を逆回転によって打ち出す #define XX 46 //閾値 #define NEXT_1 1 //ボールの位置に来たというシグナル #define NEXT_2 2 //相方がボールを押し出したという合図 #define PLAY PlaySound(SOUND_UP); task main () { SetSensor(SENSOR_2,SENSOR_LIGHT); //2に光センサを取り付ける SetSensor(SENSOR_3,SENSOR_TOUCH); //3にタッチセンサをつける SetSensor(SENSOR_2,SENSOR_LIGHT); //2に光センサを取り付ける SetSensor(SENSOR_3,SENSOR_TOUCH); //3にタッチセンサをつける repeat(3){ //ボールの数だけ繰り返す int a=0; while(a<=1) //まず円を抜ける {GO; if(SENSOR_2<XX){a=a+1;PLAY;GO;Wait(20);} } repeat(3){ //ボールの数だけ繰り返す int a=0; while(a<=1) //まず円を抜ける {GO; if(SENSOR_2<XX){a=a+1;PLAY;GO;Wait(20);} } while( SENSOR_3 == 0) //タッチセンサーに壁が当たるまで { //ライントレースしながら進む if(SENSOR_2<XX) {TL;} else {TR;} while( SENSOR_3 == 0) //タッチセンサーに壁が当たるまで { //ライントレースしながら進む if(SENSOR_2<XX) {TL;} else {TR;} } } BACK;Wait(35);STOP;TRX;Wait(145);STOP;BACK;Wait(125);STOP;TLX;Wait(65);STOP;GO;Wait(50);STOP; //ロボットの向きをボールの方へ向ける ClearMessage(); SendMessage(NEXT_1); //ボールの方を向きました until (Message() == NEXT_2); //相方の合図があるまで待機(ボールを押し出してもらう) PLAY;Wait(100);GET; //アームを下ろしボールを取り込む BACK;Wait(20);STOP;GET;BACK;Wait(100);STOP;GET;TR;Wait(150);STOP;GET;PLAY;GO;Wait(625);STOP;GET;PLAY; //シュート位置まで移動する TRX;Wait(30);STOP;GET;TLX;Wait(30);STOP;GET;GO;Wait(40);STOP;TRX;Wait(30);STOP;GET;PLAY;SHOOT; //少し缶をどかして、体勢を立て直してシュート BACK;Wait(260);STOP;PLAY;TRX;Wait(110);STOP;PLAY; //最初の位置に戻る } } -オス♂ #define GO(t) OnFwd(OUT_B+OUT_C);Wait(t);Off(OUT_B+OUT_C); //移動をする際の定義(以下同じ) #define GO(t) OnFwd(OUT_B+OUT_C);Wait(t);Off(OUT_B+OUT_C); //移動に必要な定義 #define BACK(t) OnRev(OUT_B+OUT_C);Wait(t);Off(OUT_B+OUT_C); #define TRX(t) OnRev(OUT_B);OnFwd(OUT_C);Wait(t);Off(OUT_B+OUT_C); #define TLX(t) OnFwd(OUT_B);OnRev(OUT_C);Wait(t);Off(OUT_B+OUT_C); #define TR(t) OnFwd(OUT_C);Wait(t);Off(OUT_C); #define TL(t) OnFwd(OUT_B);Wait(t);Off(OUT_B); #define NEXT_1 1 //相方がボールの位置に来たというシグナル #define NEXT_2 2 //ボールを押したというシグナル task main(){GO(160); //木の間に入るように時間を微調整して動かした repeat(3){ClearMessage();Off(OUT_B+OUT_C); //以下の動作を3回繰り返す until(Message() == NEXT_1); //メッセージ1を受け取ったら BACK(20);Off(OUT_B+OUT_C); //さらにボールを押す PlaySound(SOUND_DOWN);SendMessage(NEXT_2); //ボールを押したことを伝えるためにメッセージ2を送る #define NEXT_1 1 //相方がボールの前に来たことを確認するシグナル #define NEXT_2 2 //ボールを押し出したことを伝えるシグナル task main() {GO(160);TLX(70);GO(220);TRX(60);BACK(80); //ボールの場所に行き、ロボの先端をボールに軽く当て待機 repeat(3) //ボールの数だけ繰り返す { ClearMessage();Off(OUT_B+OUT_C); until(Message() == NEXT_1); //相方がボールの前に来たら BACK(20);Off(OUT_B+OUT_C); //先端でボール一個分押す PlaySound(SOUND_DOWN); SendMessage(NEXT_2); //終了のお知らせ } } *工夫したところ [#of65fce7] &size(17){''○ ロボットについて''}; ・初めはRCXを二つ使い一台で、ベルトコンベア式アームを使用しの3つのボールを一気に機体に取り込もうとする作戦だった。 しかし、思ったようにボールを取り込めなかったことと、なにより機体そのものが大きくなりすぎて、どんなに頑張ってもボールに触れることができないため断念した。 その結果を生かして、2回目に作ったロボットは、それぞれRCXを搭載した、小回りの利く小型ロボットにすることにした。 ・色々と悩んだが、一台はボールを押し出すことに特化したロボットにすることにした(♂)。 したがって、もう一台のロボット(♀)がボールを運び、缶をどかし、シュートをするようになっている。 ・♀のロボットについて、なるべく軽装備でやりたかったため、ボールを取り込む動作とボールを打ち出す動作を、同じアームを使いモーターの回転の反転を上手く使うことにより実現させた。 ・ライントレースを光センサー1つでおこなっているため、ボールの位置にロボットが来たかどうかを判断するために、横にタッチセンサーを搭載した。 &size(17){''○ プログラムについて''}; ・ボールをつかんだ時や前進中は問題ないが、右回転や左回転、また、たまに後退をするときに、せっかくとりこんだボールを、こぼしてしまうことがあった。 そこで、右回転や左回転をした後、毎回ボールを取り込む(取り込もうとする)ことにより、これを解決した。 この動作はかなり必要だったと思う。 *感想・反省 [#of65fce7] ○ なにがともあれ、ボールを1つシュートすることができてよかった。しかし、もう少し準備に時間をかけることができていれば、もっとたくさんのボールを華麗にシュートできたことだろう。 ○ ロボットについてはシュートができているので、そんなにたくさんの問題はないと思う。しかし、プログラムについては、ほとんどが秒指定になってしまっているため、電池の減りなどにより誤差が生じてしまうことがある。 なので、もっと光センサーやタッチセンサーなどを用いたプログラムを組めたらよかったのかなと思っている。 ○ シュートする際に、ランタンをうまく使うことができなかったのが残念だった。 - 楢原君へ 君の方のロボットのプログラム貼るだけ貼っておいてくれ!コメント文とか説明は俺が気づいたらやるから^^まあやってくれても全然いいけど -- [[TOKIO]] &new{2011-08-09 (火) 10:08:28}; - 感想、反省書いといてね! -- [[TOKIO]] &new{2011-08-09 (火) 15:15:10}; #comment