[[2010b]] #contents *課題の内容 [#p4262e9f] ***基本ルール [#l0ea064f] * スタート時は「スタート地点」の内部以外に接していないこと。 * スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。 * 開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。 * 競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。 * 途中でうまく動かなくなった場合、1回限り再スタートすることができる。 * 競技時間は無制限。ただし審判が、競技続行不能と判断した場合は途中で終了する。 ***基本得点の計算方法 (単独競技) [#efed9bd4] * ピンポン玉をスタート地点から遠い方のカゴに入れれば一つ2点、近い方のカゴに入れれば一つ1点 * 1個のRCXを含むロボットが実際のスタート地点に帰還できれば+2点。 * すべてのロボットがスタート地点に帰還できればさらに+2点。ロボットの一部(半分以下)がゴールからはみ出している場合には1点減点(つまり+1点)。 ***リーグ戦の得点 [#t774040c] * スタート地点から遠い方のカゴに入れたピンポン玉の個数を競う。近い方のカゴに入れれば相手のポイントになる。 * 相手よりたくさんピンポン玉を入れれば勝点3点、引き分けの場合は1点、ただし共に一つも入れることができなければ、0点。 ***技術点の計算方法 [#fd125712] 以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(4チーム)+TAが10点満点で採点し平均点を求める。 得点の目安: * ピンポン玉の収集 (2点) * ピンポン玉の運搬 (2点) * ピンポン玉をカゴに入れる動作 (3点) * その他 (3点) *メンバー [#c9503d3e] 伊吹 植田 仁野 山崎 *ロボット [#yac2ad6a] 今回はロボ1台の負担を減らすため、ロボを2台作り作業を分担しました。 1台は玉が置いてあるところまで行き玉を拾って運び、 もう1台はかごの脇にスタンバイしておいて受け取った玉を上に運んでかごに入れる。 **玉を集めるロボット [#k46aeeba] [#cfab7ad1] アームでピンポン玉を1つずつ集めるロボットです。 &ref(CA3A0114.JPG); ***最初のロボット [#za4b23da] -最初のロボットはアームが短かったので、うまくボールをつかむことができなかった。 -光センサでライントレースする設計だったが、ライントレースはできないことが判明したので、違う方法で進むことにした。 -光センサの代わりに回転センサを使う事を考えたが、使い方がよくわからず、断念した。 -タイヤが小さすぎて、浮いていた。 &ref(4aa.JPG); ***苦労したところ [#jbb849b3] -アームの開閉のやり方がよくわからなかったけど、とりあえず下の写真のようにして、開閉しています。真ん中の黒いギアが回ると、横の灰色のギアが回って、アームを開閉します。 &ref(4b.jpg); -タイヤ部分のギアがうまくかみ合わなかった。これは、ほんの少しだけタイヤのギアの位置をアップさせるためにブロックをかませる事で解決しました。 -強度が低めだったので、特に土台の部分などは、灰色のブロックをつなぐ部品で、補強しました。 -二輪だったので、どうしても後ろに倒れちゃいそうになります。そこで、補助輪もめんどくさいので、丸いブロックで支えています。 -なぜか前進するときに、斜めに進んでしまいます。これは結局解決できずじまいでした。 ***反省点 [#o89ef935] 今回は反省点が多いです。 1.苦労した点でも出てきたように… なぜか、前進するときに斜めに進んでしまうロボットになってしまいました。先生が言うには、回転センサを使うと、その点を、もっと正確に定義することができるので、まっすぐに進むことが可能になるということでした。しかし、回転センサの使い方がいまいち理解できなかったため、一度は回転センサを取り付けてみたものの結局取り外すことになりました。もっと回転センサについてしっかり調べていれば、もう少し正確なロボットにできたことだと思います。 2.ボールをつかむタイミングについて ボールをつかむタイミングについても、タッチセンサでもう少し正確にしたかったです。最初、タッチセンサを付けてみましたが、反応しそうになかったので、すぐにやめる方向に動いてしまいましたが、軽く触れるだけでもタッチセンサが反応するような仕組みを作れたかもしれないという事を思いました。 3.ボールの受け渡しのタイミング 通信機能などを使えば、ボールの受け渡しも、もう少しうまくいったかもしれません。 **玉をかごに入れるロボット [#icaf2fe7] ロボットの全体像 &ref(c.jpg); &ref(d.jpg); ピンポン玉を発射するロボなども考えましたが、ピンポン玉の飛距離が足りず、 最終的に玉を螺旋状の梯子を回転させることによって上に運ぶロボットにしました。 これにより比較的高い確率で玉をかごにいれれるようになりました。 #ref(riseup.gif) 玉を梯子に乗せる部分。 タッチセンサで玉が梯子の下の部分にきたことを感知したら くまでのような部品で玉をかき入れ梯子に乗せます。 最初はうまく梯子に乗らずに苦労しましたが、 くまでのような部分に改良を重ねてなんとか梯子に乗るようになりました。 #ref(a.gif) 玉を受け取ったら相手のロボにとりつけた光センサーの光を、こちらのロボのセンサーで感知します。 最初はタッチセンサーを使用していましたが、玉をかき入れる部分の邪魔になって うまく玉が受け取れなかったのでタッチセンサーを取り外して光センサーにしました。 #ref(b.jpg) *プログラム [#b77ab91f] **玉を集めるプログラム [#n4baf79e] #define THRETHOLD 50 //線を感知 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_LIGHT); SetPower(OUT_A,2); SetPower(OUT_C,1); SetPower(OUT_B,1); int sen=0 ; //通ったせんを数える変数 while(sen==0){ //スタート地点から出るプログラム OnFwd(OUT_A+OUT_C); until(SENSOR_2<THRETHOLD); Off(OUT_A+OUT_C); sen++; } while(sen==1){ //ボールのある円部分までいくプログラム OnFwd(OUT_A+OUT_C); Wait(130); Off(OUT_A+OUT_C); OnFwd(OUT_A); OnRev(OUT_C); Wait(65); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); until(SENSOR_2<THRETHOLD); Off(OUT_A+OUT_C); sen++; } while(sen==2){ //ボールの前までいくプログラム OnFwd(OUT_A+OUT_C); Wait(110); Off(OUT_A+OUT_C); OnFwd(OUT_A); OnRev(OUT_C); Wait(55); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); until(SENSOR_2<THRETHOLD); Float(OUT_A+OUT_C); sen++; } while(sen==3){ //ボールをキャッチして円から出るプログラム OnRev(OUT_B); Wait(140); Off(OUT_B); OnRev(OUT_A+OUT_C); Wait(40); Off(OUT_A+OUT_C); OnRev(OUT_A+OUT_C); until(SENSOR_2<THRETHOLD); Off(OUT_A+OUT_C); OnRev(OUT_A+OUT_C); Wait(15); Off(OUT_A+OUT_C); sen++; } while(sen==4){ //ボールを受け渡しスタート地点まで戻る OnFwd(OUT_A); OnRev(OUT_C); Wait(52); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); Wait(220); Off(OUT_A+OUT_C); OnFwd(OUT_C); OnRev(OUT_A); Wait(45); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); Wait(30); Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(80); Off(OUT_B); OnRev(OUT_A+OUT_C); Wait(45); Off(OUT_A+OUT_C); Wait(2000); OnFwd(OUT_A+OUT_C); Wait(30); Off(OUT_A+OUT_C); OnFwd(OUT_A); OnRev(OUT_C); Wait(47); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); Wait(200); Off(OUT_A+OUT_C); OnFwd(OUT_C); OnRev(OUT_A); Wait(55); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); Wait(150); Off(OUT_A+OUT_C); sen++; } Off(OUT_A+OUT_C); } **玉をかごに入れるプログラム [#cc30c46a] #define START OnRev(OUT_C); //前進 #define BACK OnFwd(OUT_C); //後進 #define STOP Off(OUT_A+OUT_B+OUT_C); //停止 #define LP 50 //閾値 #define STOP Off(OUT_A+OUT_B+OUT_C); //停止 #define LP 50 //閾値 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1を光センサーと設定 START; Wait(130); //かごのそばまで前進 STOP; Wait(1200); OnRev(OUT_A);Wait(80); //ピンポン球を取り込む Off(OUT_A); OnFwd(OUT_B);Wait(800); //ピンポン球を持ち上げる OnFwd(OUT_A);Wait(80); STOP; BACK; Wait(130); //スタート地点まで戻る STOP; } *反省感想 [#bc13429e] この授業はすごく大変でしたが、機械を制御することがかなり難しいという事がよくわかりました。 *コメント [#ucbbeefa] コメントをどうぞ - ロボットの説明が詳しいです。いろいろ工夫したのがよくわかります。あとは、プログラムの方の説明を充実させれば、よりよいレポートになると思います -- [[FI]] &new{2011-02-12 (土) 19:06:47}; #comment