2010a 目次
ピンポン玉をできるだけたくさん持ち帰る
◦フィールドは約160cm×110cm ◦15個のピンポン玉は19mm角の角材に囲まれた領域にある (角材の外周の一辺は約20cm)。 ◦スタート地点の壁および中央の障害壁の断面は約89mm x 38mm ◦中央の障害壁のは中央付近の20cmのみ高さが約半分(45mm)になっている ◦黒い線の太さは約25mm ↑
◦スタート時は「スタート地点」の内部以外に接していないこと。
◦スタート時のロボットは1個を越えないこと (スタート後はいくつに分裂してもかまわない)。
◦開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。
◦競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
◦途中でうまく動かなくなった場合、1回限り再スタートすることができる。
◦競技時間終了までにもとのスタート地点にもどらなければならない。
◦競技時間は無制限。ただし審判が、競技続行不能と判断した場合は途中で終了する。
◦最低1個のRCXを含むロボットが右側に移動できれば+5点、障壁を越えて右側に移動した場合はさらに+5点。
◦ピンポン玉に少しでも触れることができれば+5点。ピンポン玉に触れることができなかった場合は以下の得点はなし。
◦最低1個のRCXを含むロボットが図の右側から左側に帰還できれば+5点、障壁を越えて左側に移動した場合はさらに+5点。
◦最低1個のRCXを含むロボットがゴールに帰還できれば+10点。
◦複数回往復した場合は、2回目以降の往復は一回あたり+1点とし、最大で+5点 (合計6往復の場合)とする。
◦スタート時のロボットが全てゴールに帰還できれば+5点。ロボットの一部(半分以下)がゴールからはみ出している場合には2点減点(つまり+3点)。ただし帰還できない部分があればパーツ1個ごとに-1点、最大-5点。
◦ピンポン玉1個を持ち帰れば+3点。ピンポン玉を持っているロボットが完全にゴール内にあれば、地面に接触していない限りピンポン玉がゴール外の位置にあってもよい。
◦ゴール外側の黒線の内部にまで移動できているピンポン玉があれば+1点
◦ゴールに運んだボール5個ごとにボーナス点10点
以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(9チーム)+TAが20点満点で採点し平均点を求める。得点の目安:
◦壁を越える動作 (3点)
◦ピンポン玉の収集 (3点)
◦ピンポン玉の運搬 (3点)
◦帰還の動作(3点)
◦2台のRCXの連携 (3点)
◦その他 (5点)
馬場将寿 鎌倉竜馬 (台車担当)
船山蔵 (収集車担当)
小笠原和貴
・恥ずかしくない動きをするプログラムにする。
・一点でも得点を取り0では無いようにする。
詳しくは下で写真付きで解説するので概略だけ、 台車はキャタピラのピンポン玉収集車を乗せているので収集車のモーターの歯車がスロープにあたらないように、スロープは凹の形をしている。また今回は割り切って、台車、収集車ともにスタート位置への帰還は望めないものとして考えた。ゆえにスロープは降りたら最後、戻らない。
当初の予定だと台車がピンポン玉を回収する予定であった。 そしてフックが回転することでピンポン玉を放出。
「へ」の字のパーツを使うことにより回収車の乗り降りをスムーズにした。 台を上下するフォークリフト式 にしようとしたがモーターが足りなかった。
収集車がキャタピラで走行し、車体が低いため、台が凹の形をしている。
・これを動かしてピンポン玉を収集する。 上から採りにいくことも考えたがこっちの下からいくほうが採りやすく、こぼれ落ちないし、多くのピンポン玉を回収できるのでこれに至った。
・上のやつのモーターの部分はこうなっている。この組み合わせが強い回転力を生むのでこれを使うことに決めた。
・タイヤは最初は普通のやつを選んでいたが、台車にのることやピンポン玉も回収してもって来るので、これのほうが安定性が増すためにこのベルトコンベアのようなタイヤを選んだ。
・これにとったピンポン玉を入れる。 これだけ広いとほぼ全部のピンポン玉をここに置いておくことができる。 塀があるため、揺れなどが起きてもそうは落ちないし、とってここに入れるときにこぼす数を最小限に抑えている。
・上のやつを合わせるとこうなる。最初はこれで成功していた。そんなに大きくなることもなくよかった。
・最初は上のやつで成功していたが、台車に登るときに後ろのほうが重くなってしまい溺れずに落ちてしまった。かごをとるわけにはいけなかったので、アームのよこに左右対称のタイヤを二つ設置することで、安定性が増し、重心も前のほうに行った。そのことで台車に乗ることもできた。
・光センサーは付いているが飾りである。なぜかというとロボットの本体にこだわりすぎてプログラムにかける時間が足りなかった。そのためプログラムはセンサーを定義していない。
・そしてピンポン玉を台車に渡すのではなく、回収車を右半分に送り出すことで得点を得る。よって帰還の可能性は皆無である。
・かごをアームの幅より少し大きめにして、うまくはまるようにしたので、ピンポン玉がこぼれにくくなった。
・タイヤをこれにしたことで台車に乗りやすくなった。
・台車にのるところで何回もひっかかってしまい、何回もの試行錯誤と実験を積み重ねて登れるようになった。
task main() { OnFwd(OUT_A+OUT_C);Wait(250);
まず向かって左向きに発信する。(若干右側のほうに角度をつけておくと成功する)
OnFwd(OUT_A);OnRev(OUT_C);Wait(90);
一番手前のついたてを交わす
OnFwd(OUT_A+OUT_C);Wait(600);
方向を変えて中央のくぼみに向かう(壁にぶつかるまえ15センチくらいまで行くように時間を設定)
OnRev(OUT_A);OnFwd(OUT_C);Wait(250);
180°変えて後ろ向きに方向を変える
OnRev(OUT_A+OUT_C);Wait(800);
バックをして溝に後ろ向きにつける。ここで時間を多めにすることによって壁にぶつかってからまっすぐ後ろを向くようにした。
Off(OUT_A+OUT_C);}
そして止まると台車が動き出すように時間を設定。
・一回目のプログラム #define THRESHOLD 45 //定義する #define RUN_TIME 100 //走る時間を100とする task main() { SetPower(OUT_A+OUT_C,7); //ギアを最大にする Off(OUT_A+OUT_C); ClearTimer(2); //タイマー2を使う Timer(2) <= OnFwd(OUT_A+OUT_C);Wait(200);//前進を200する int x; //定数を置く int x_min=1,x_max=10; for(x=x_min; x<=x_max; x++){ //繰り返し OnFwd(OUT_A+OUT_C);Wait(50);Float(OUT_A+OUT_C); SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); //光センサーとしておく ClearTimer(0); //クリアする」 Timer(0) //タイマー0を使う while ( Timer(0) <= RUN_TIME ) { // タイマー0がランタイムより前の時繰り返す
ライントレース 課題にで使ったやつとほぼ同じ
if (SENSOR_1>THRESHOLD) { ifSENSOR_3>THRESHOLD){ OnFwd(OUT_A+OUT_C);// } else{ OnFwd(OUT_A); Wait(7); Off(OUT_A); OnRev(OUT_C); Wait(2); Off(OUT_C); } } else{ if (SENSOR_3>THRESHOLD){ OnFwd(OUT_C); Wait(7); Off(OUT_C); OnRev(OUT_A); Wait(2); Off(OUT_A); } } OnFwd(OUT_B);Wait(120);Float(OUT_B); //アームを下げる OnRev(OUT_B);Wait(30);Float(OUT_B); //アームを上げる OnRev(OUT_A+OUT_C);Wait(100);Off(OUT_A+OUT_C);//後ろに下がる } OnRev(OUT_A);Wait(250);Off(OUT_A+OUT_C); //旋回 ClearTimer(1); //タイマー1を使う Timer(1) while ( Timer(1) <= RUN_TIME ) { // 1がランより小さいとき while (true) { //ライントレースの繰り返し if (SENSOR_1>THRESHOLD){ if (SENSOR_3>THRESHOLD){ OnFwd(OUT_A+OUT_C); } else{ OnFwd(OUT_A); Wait(7); Off(OUT_A); OnRev(OUT_C); Wait(2); Off(OUT_C); } } else{ if (SENSOR_3>THRESHOLD){ OnFwd(OUT_C); Wait(7); Off(OUT_C); OnRev(OUT_A); Wait(2); Off(OUT_A); } }} SetSensor(SENSOR_2,SENSOR_TOUCH);//タッチセンサー OnFwd(OUT_A+OUT_C); //台車に当たった場合は止まる until(SENSOR_2==2); Off(OUT_A+OUT_C); }}
・二つ目のプログラム
#define THRESHOLD 45 task main() {SetPower(OUT_A+OUT_C,7); //ここまでは同じ ClearTimer(2); while ( Timer(2) <=200) {200までの時止まる最初は静止。台車が動いていて、到達するまで Off(OUT_A+OUT_C); } OnFwd(OUT_A+OUT_C);Wait(500);//前進 int x; int x_min=1,x_max=10; //繰り返し for(x=x_min; x<=x_max; x++){ OnFwd(OUT_A+OUT_C);Wait(100);Float(OUT_A+OUT_C);ここで前進してピンポン玉を採る OnFwd(OUT_B);Wait(180);Float(OUT_B); OnRev(OUT_B);Wait(30);Float(OUT_B); OnRev(OUT_A+OUT_C);Wait(100);Off(OUT_A+OUT_C);//バック } OnRev(OUT_A);Wait(350);OnFwd(OUT_C);Wait(350);Off(OUT_A+OUT_C);//旋回 OnFwd(OUT_A+OUT_C);Wait(500);Float(OUT_A+OUT_C);//前進 }
・一つ目のプログラムにはライントレースがあったが、トレースしてくれなかったのでやめた。タッチセンサーを失敗したので、シンプルな二つ目のプログラムにした。 ・こっちはよりちょっとでも点数をとるようにしたプログラムである。時間をさらに調整して、シンプルになった。
・フィールドにラインが描かれているのでライントレースをして中央の溝まで運搬しようと考えたが、うまくいかずタイム制御の動きにした。(電池の残量、乗っている収集車の重さなどが変わらなければうまくいくが・・・) ・台から収集車を降ろすことが第一条件だったのでスロープを時間をかけ工夫した。 ・↑その分プログラムが貧相になってしまった。
・一人でやったのでつらいところがあった。しかしなんとかできた。
・とることは簡単だと思ったが、ピンポン玉を囲う木によって、じゃまされてしまいとることが難しかった。
・しかし結構考えて、かごに入れておくということは成功してうまくいった。
・タイヤもあれが適していたとおもうので、もうちょっとプログラムに時間をもうちょっと時間をかけられば、さらにいいものはできていたと思う。
・一回も全員がそろうことなく、三人で作業する形になったので二台で合わせて動かしてみることができなかった。 (四人なので一人いないと割り当て上一人でロボット本体とプログラムまでやらなくてはならないのでかなり非人道的である。) ・私情があり、少ししか参加できなかったので、申し訳なかった。
・それぞれに私情というものはあったので近くの日にちをちゃんと開けておくことが大切であるということ、そしてその私情をちゃんとメンバーに前もってちゃんと話し、連絡をとる必要があった。3人でやったので苦しいところがあった。この時期にやることはきついところがある。