* スタート時は「スタート地点」の内部以外に接していないこと。 * スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。 * 開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。 * 競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。 * 途中でうまく動かなくなった場合、1回限り再スタートすることができる。 * 競技時間は無制限。ただし審判が、競技続行不能と判断した場合は途中で終了する。
* ピンポン玉をスタート地点から遠い方のカゴに入れれば一つ2点、近い方のカゴに入れれば一つ1点 * 1個のRCXを含むロボットが実際のスタート地点に帰還できれば+2点。 * すべてのロボットがスタート地点に帰還できればさらに+2点。ロボットの一部(半分以下)がゴールからはみ出している場合には1点減点(つまり+1点)。
* スタート地点から遠い方のカゴに入れたピンポン玉の個数を競う。近い方のカゴに入れれば相手のポイントになる。 * 相手よりたくさんピンポン玉を入れれば勝点3点、引き分けの場合は1点、ただし共に一つも入れることができなければ、0点。
以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(4チーム)+TAが10点満点で採点し平均点を求める。
得点の目安: * ピンポン玉の収集 (2点) * ピンポン玉の運搬 (2点) * ピンポン玉をカゴに入れる動作 (3点) * その他 (3点)
伊吹 植田 仁野 山崎
今回はロボ1台の負担を減らすため、ロボを2台作り作業を分担しました。 1台は玉が置いてあるところまで行き玉を拾って運び、 もう1台はかごの脇にスタンバイしておいて受け取った玉を上に運んでかごに入れる。
今回は反省点が多いです。
1.苦労した点でも出てきたように…
なぜか、前進するときに斜めに進んでしまうロボットになってしまいました。先生が言うには、回転センサを使うと、その点を、もっと正確に定義することができるので、まっすぐに進むことが可能になるということでした。しかし、回転センサの使い方がいまいち理解できなかったため、一度は回転センサを取り付けてみたものの結局取り外すことになりました。もっと回転センサについてしっかり調べていれば、もう少し正確なロボットにできたことだと思います。
2.ボールをつかむタイミングについて
ボールをつかむタイミングについても、タッチセンサでもう少し正確にしたかったです。最初、タッチセンサを付けてみましたが、反応しそうになかったので、すぐにやめる方向に動いてしまいましたが、軽く触れるだけでもタッチセンサが反応するような仕組みを作れたかもしれないという事を思いました。
3.ボールの受け渡しのタイミング
通信機能などを使えば、ボールの受け渡しも、もう少しうまくいったかもしれません。
ロボットの全体像
ピンポン玉を発射するロボなども考えましたが、ピンポン玉の飛距離が足りず、 最終的に玉を螺旋状の梯子を回転させることによって上に運ぶロボットにしました。 これにより比較的高い確率で玉をかごにいれれるようになりました。
玉を梯子に乗せる部分。 タッチセンサで玉が梯子の下の部分にきたことを感知したら くまでのような部品で玉をかき入れ梯子に乗せます。 最初はうまく梯子に乗らずに苦労しましたが、 くまでのような部分に改良を重ねてなんとか梯子に乗るようになりました。
玉を受け取ったら相手のロボにとりつけた光センサーの光を、こちらのロボのセンサーで感知します。 最初はタッチセンサーを使用していましたが、玉をかき入れる部分の邪魔になって うまく玉が受け取れなかったのでタッチセンサーを取り外して光センサーにしました。
#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); }
#define START OnRev(OUT_C); //前進 #define BACK OnFwd(OUT_C); //後進 #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; }
この授業はすごく大変でしたが、機械を制御することがかなり難しいという事がよくわかりました。
コメントをどうぞ