目次

メンバー

  • 大庭
  • ヤスノ
  • さくらだ
  • ソリョン

ルール

基本ルール

  • (競技時間) テニスボールをすべて運び終わった時点、あるいは審判によって続行不能と判断された時点、あるいは競技者によってリタイア宣言がなされた時点、をもって競技の終了とする。
  • (スタート地点) スタート時にロボットは、空中部分も含めスタートの円内になければならない。
  • スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。
  • 開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。
  • 競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
  • 途中でうまく動かなくなった場合、1回限り再スタートすることができる。
  • 競技終了時点で、ロボットが運び終わったテニスボールに触れていてはならない。

基本得点の計算方法

  • ボールをゴール手前の円内からシュートしてゴールした場合、1個5点
  • ボールをゴール手前の円外からシュートしてゴールした場合、1個2点
  • ボールを3個ともゴールに入れればボーナス点として5点
  • 競技終了後、ロボットがボールに触れていた場合には、-1点
  • ランタンを一つ倒したら -1点(ただし、得点した場合)

技術得点の計算方法 以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(8チーム)が20点満点で採点し、その平均点を求める。得点の目安:

  • ボールを拾ってくる動作 (3点)
  • ボールを運ぶ動作 (2点)
  • 空き缶をどける動作 (2点)
  • 2台以上のロボット、あるいは単体のロボットの場合は2台のRCXの連携の良さ、パスなどの正確さ (3点)
  • シュートの正確さ、華麗さ (3点)
  • 自立型のロボットとしての形や動作の美しさ、斬新さ(3点)
  • その他 (4点)

フィールド

robocon2011a.png

ロボット制作過程

ボール運搬ロボ

ボールを運搬する点で今回気をつけたことは、
相方がボールを取りやすくするためにどこにボールを置くかという点と、
ボールの一つを確実に取っていくということです。

1mae.jpg

前の二つタッチセンサーは、固定された木片に両方を押し付けて
機体を正確に木片に垂直にするという役割があります。
これは今回一つずつ確実に取っていくという目標から、
正確に90度旋回などを行っていきたかったためです。

1gear.jpg

そして、ボールを押し出すためのポールとつかむためのアームのギアを連動させたのは
モーターが足りなくならないようにという配慮をした工夫です。

1ue.jpg

アームですが最初は小さかったので黄色い鉤爪状のブロックを二つ追加して延長し、
紫色のチューブも一つずつ追加して、ボールをつかむ範囲を広げました。

1usiro.jpg

前回のロボットでRCXが内部に入り込んでしまい、
プログラムを転送しにくかったのですが、今回はそれがないように後ろに受信部分を露出させました。
小さな工夫ですが、コードの余った部分は絡まらないように後ろにゴムでまとめました。

ボールシュートロボ

  • 工夫した点
    ギリギリまでカンをどかすアームを小さくした。
    ギアはできるだけシンプルで、なめらかに動くよう工夫した。
    アームに、「蹴る」と「つかむ」の両方の機能を持たせた。
    2ue.jpg
    上から見た図です。
    前にカンをどけるアーム、後ろにボールを持つアームという形にしました。
    コードの長さが中途半端だったので、長いコードにしたら、少し邪魔になってしまった。
    2sita.jpg
    下から見た図です。
    タイヤは一つにして前に安定用のパーツを付けました。
    2usiro.jpg
    ボールのアーム部分です。
    アームが開くと同時に、ボールが前に押し出されるようになっています。
    ボールをつかんだら、中に押し込んで離れないようになっています。
    少しボールが入る面積が小さいのが難点です。
    2gear.jpg
    アームのギア部分です。
    ギアとの距離が遠かったので、大きなギアを使いシンプルで単純なものにしました。
    ギア比にも少し気を遣って作りました。
    多少回りすぎたりすることがあります。
    2mae.jpg
    カンをどかすアーム部分です。
    スタート位置には入りきらなかったので、ギリギリまで切り詰めました。
    アームの角度や、できるだけカンが入るように工夫しました。

プログラム

ボール運搬ロボ

#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();
}		
}

ボールシュートロボ

#define go(t) OnFwd(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); Wait(50);                     //直進  (関数を使う)
#define back(t) OnRev(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); Wait(50);                   //後退
#define turn_l(t) OnFwd(OUT_C); OnRev(OUT_A); Wait(t); Off(OUT_A+OUT_C); Wait(50);         //左折
#define turn_r(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_A+OUT_C); Wait(50);         //右折
#define hold OnFwd(OUT_B); Wait(40); Off(OUT_B);                                           //ボールをホールド
#define throw OnRev(OUT_B); Wait(40);                                                      //ボールを離す
task main()
{                                                                  //カンをどかす
     go(320);
     turn_l(80);
     go(200);
     back(150);
     turn_l(200);
     go(350);
     back(100);
     turn_l(100); 
     go(100);
     back(250);
     go(20);
     turn_l(20);
     go(400);
     back(200);
     turn_l(40);
     go(200);
     PlaySound(SOUND_DOUBLE_BEEP); Wait(20);
  repeat(3)
   {                                                            //3回繰り返す
     Off(OUT_A+OUT_C);
     Wait(300);
     back(400);
     hold;
     Off(OUT_A+OUT_C);
     Wait(50);
     go(250);                                     //ボールを持っていく
     Off(OUT_A+OUT_C);
     Wait(500);
     turn_l(80);
     back(280);
     throw;
     go(300);
   }
}

まとめ

ボール運搬ロボ

まず、ロボットが中央へ行かせてボールがある壁まで前進、で両タッチセンサが反応するまで行くので角度がちょっと外れたときここで直すことができます。で左に曲がってボールを押し出すためのアームが降りてきて最初は一番前のボール一個を外にとりだします。そのボールをボールを掴むためのアームが降りてきて捕まえます。で捕まえたボール発射ロボットのところまで運びまた次のボールを取り出す作業を繰り返します。

ボールシュートロボ

まずカンをどかします。ゴール前や、サークル周りにカンがあるとボールの受け渡しや、シュートの邪魔になるので、できるだけ端に寄せました。それからボールの受け渡し場所まで行き、ボールを受け取ります。二つのロボット同士の連携がとても難しかったです。何も考えずにやると、ロボット同士がぶつかったりしてしまうのでとても難しかったです。アーム部分も、最初は蹴る機能だけでしたが、ボールをつかむ機能も蹴ると同時にアームが開くようにして、安定感が増すように作った。

コメント



添付ファイル: filerobocon2011a.png 246件 [詳細] file2usiro.jpg 237件 [詳細] file2ue.jpg 225件 [詳細] file2sita.jpg 237件 [詳細] file2mae.jpg 221件 [詳細] file2gear.jpg 240件 [詳細] file1usiro.jpg 223件 [詳細] file1ue.jpg 224件 [詳細] file1sita.jpg 114件 [詳細] file1mae.jpg 254件 [詳細] file1gear.jpg 277件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-08-09 (火) 17:51:52