目次 #contents *メンバー [#a25db676] -大庭 -ヤスノ -さくらだ -ソリョン *ルール [#l51efa4c] **基本ルール [#m761f41b] - (競技時間) テニスボールをすべて運び終わった時点、あるいは審判によって続行不能と判断された時点、あるいは競技者によってリタイア宣言がなされた時点、をもって競技の終了とする。 - (スタート地点) スタート時にロボットは、空中部分も含めスタートの円内になければならない。 - スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。 - 開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。 - 競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。 - 途中でうまく動かなくなった場合、1回限り再スタートすることができる。 - 競技終了時点で、ロボットが運び終わったテニスボールに触れていてはならない。 基本得点の計算方法 - ボールをゴール手前の円内からシュートしてゴールした場合、1個5点 - ボールをゴール手前の円外からシュートしてゴールした場合、1個2点 - ボールを3個ともゴールに入れればボーナス点として5点 - 競技終了後、ロボットがボールに触れていた場合には、-1点 - ランタンを一つ倒したら -1点(ただし、得点した場合) 技術得点の計算方法 以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(8チーム)が20点満点で採点し、その平均点を求める。得点の目安: - ボールを拾ってくる動作 (3点) - ボールを運ぶ動作 (2点) - 空き缶をどける動作 (2点) - 2台以上のロボット、あるいは単体のロボットの場合は2台のRCXの連携の良さ、パスなどの正確さ (3点) - シュートの正確さ、華麗さ (3点) - 自立型のロボットとしての形や動作の美しさ、斬新さ(3点) - その他 (4点) **フィールド [#x1f56253] #ref(robocon2011a.png) *ロボット制作過程 [#d84b8cbe] **ボール運搬ロボ [#b4735b01] ボールを運搬する点で今回気をつけたことは、~ 相方がボールを取りやすくするためにどこにボールを置くかという点と、~ ボールの一つを確実に取っていくということです。~ #ref(1mae.jpg) 前の二つタッチセンサーは、固定された木片に両方を押し付けて~ 機体を正確に木片に垂直にするという役割があります。~ これは今回一つずつ確実に取っていくという目標から、~ 正確に90度旋回などを行っていきたかったためです。~ #ref(1gear.jpg) そして、ボールを押し出すためのポールとつかむためのアームのギアを連動させたのは~ モーターが足りなくならないようにという配慮をした工夫です。~ #ref(1ue.jpg) アームですが最初は小さかったので黄色い鉤爪状のブロックを二つ追加して延長し、~ 紫色のチューブも一つずつ追加して、ボールをつかむ範囲を広げました。~ #ref(1usiro.jpg) 前回のロボットでRCXが内部に入り込んでしまい、~ プログラムを転送しにくかったのですが、今回はそれがないように後ろに受信部分を露出させました。~ 小さな工夫ですが、コードの余った部分は絡まらないように後ろにゴムでまとめました。 *プログラム [#v2d5610c] **ボール運搬ロボ [#o6d2f7fb] #define t90 95 //ここ電池が少なくなってきて90度の時間が変わったら変えて。 sub left(){ //左に曲がるためのサブルーチン。 OnFwd(OUT_A); OnRev(OUT_C); Wait(t90); Off(OUT_C+OUT_A); Wait(40); } sub right(){ //右に曲がるためのサブルーチン。 OnFwd(OUT_C); OnRev(OUT_A); Wait(t90); Off(OUT_C+OUT_A); Wait(40); } sub goball() { //タッチセンサを利用してボールのところまで行く。 OnFwd(OUT_A+OUT_C); until((SENSOR_1 == 1)&&(SENSOR_2 == 1)); Off(OUT_C+OUT_A); Wait(40); } void go(int t) { //前に移動するための関数。入力された時間だけに移動 OnFwd(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); Wait(50); } void back(int t) { //後ろに移動するための関数。入力された時間だけ前に移動 OnRev(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); Wait(50); } sub up() { //アームを持ち上げるサブルーチン。 OnFwd(OUT_B); Wait(45); Off(OUT_B); Wait(20); } sub down() { //アームを下げるサブルーチン。 OnRev(OUT_B); Wait(30); Off(OUT_B); Wait(20); } task main () { SetSensor(SENSOR_1, SENSOR_TOUCH); SetSensor(SENSOR_2, SENSOR_TOUCH); int time=50; right(); //中央にく go(60); left(); repeat(3) { goball(); //ボールがある壁まで先進 back(3); left(); go(40); back(time); down(); //ボールの取り出すアームをおろす Wait(100); //アームの揺れが落ち着くまで待つ go(time+60); //ボールを押しながら先進 up(); //up arm //ボールの取り出すアームを上げる。 time=time+40; //次のボールの位置まで動けるように40をだす。 go(60); right(); go(50); //テニスボールを取りにいく down(); //アームを下ろしてボールをつかむ back(500); //発射ロボットがいるところまでボールを運ぶ up(); //ボールを打つ機体のためにボールを置く back(150); //発射ロボットがボールを取れようとするため後ろにさがる Wait(200); //発射ロボットがボールをとるまで待つ go(500); //元の位置に戻る。 right(); //中央にいく go(120); left(); } } *まとめ [#s9309621] **ボール運搬ロボ [#ec93f5b8] まず、ロボットが中央へ行かせてボールがある壁まで前進、で両タッチセンサが反応するまで行くので角度がちょっと外れたときここで直すことができます。で左に曲がってボールを押し出すためのアームが降りてきて最初は一番前のボール一個を外にとりだします。そのボールをボールを掴むためのアームが降りてきて捕まえます。で捕まえたボール発射ロボットのところまで運びまた次のボールを取り出す作業を繰り返します。 *コメント [#v261676d] #comment