目次

ロボコン〜空き缶運搬ロボット〜

ロボコンのルール・コース

ルール

・4段に積まれた空き缶を運びだし、ゴールに入れる。
・競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。
・2隅のコーナー(30cm四方)からスタートする。
・スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。
・開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。
・競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
・途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。

得点の計算方法

・基本得点は、半分以上ゴールに入った空き缶のみ得点の対象になる。
・技術点は、以下の方法で計算する。

・空き缶までたどり着く動作 (3点)
・空き缶を運ぶ動作 (転がす・掴むなど) (4点)
・空き缶をゴールに入れる動作 (2点)
・2台以上のロボット、あるいは単体のロボットの場合は2台のRCXの連携の良さ(3点)
・自立型のロボットとしての形や動作の美しさ、斬新さ(3点)
・その他 (5点)

コース紹介

・フィールドの大きさは約160cm×110cm
・空き缶の置かれている場所を中心に、半径10cm、20cm、30cmの円が黒い線で描かれている。
・黒い線の太さは約25mm

robocon2008b-3.png

作戦

作戦は片方のロボットが空き缶を崩して(できれば缶の回収も)、もう片方のロボットが確実に缶を回収する作戦にした。詳しい行動方法などは、下の方にある画像で説明します。

ロボット紹介

ロボット製作の工夫・苦労


正面

090205_1722~02.jpg


真上から

090205_1723~01.jpg
Image018.jpg


横から

090205_1722~01.jpg

工夫したこと

今回の作成したロボット2体は基本的な構造が似ている為、まとめて説明する。
今回のロボットで工夫した点は、缶を回収するアームの部分である。このアームは缶をつかむと、よほどのことがない限り落とすことがない点である。
また、他のロボットに比べ比較的小型のロボットに収まった点も工夫したと思う。

アームの動力部分の画像です。

Image019.jpg

苦労したこと

苦労した点は、このロボットの設計ができるまでである。始め全く缶をつかんで運ぶロボットの構成がまとまらず、現在のロボットに至るまでかなりの時間がかかった。
他には、なかなか思うように缶をつかんでくれなかったことである。予定としては、しっかりとつかんでくれるはずであったが、実際に動かしてみるとアームが下がったときに缶が動いてしまい思うようにつかんでくれなかったのである。
もう少し缶をつかみやすくするような工夫を加えれたら良いと思った。

プログラム

ゴールの右側のロボット用 こんな風に動くことを期待してます(行きが緑、帰りが黄色)下はイメージです。

image1.jpg robokon2.gif


作成者 濱田 編集者 ちん

#define  right  OnFwd(OUT_A);OnRev(OUT_C);  //右に曲がる
#define  left  OnFwd (OUT_C);OnRev(OUT_A); //左に曲がる
#define  go  OnFwd(OUT_A+OUT_C);                 //前進
#define  back  OnRev(OUT_A+OUT_C);          //後進
#define T 48         //光センサーの明るさ設定
#define time 30       //移動時間
sub trace(){     //光トレースの関数
	if(SENSOR_1 > T && SENSOR_2 >T){
		go; 
		}
	else if(SENSOR_1>T && SENSOR_2<T){
		right;
		}
	else if(SENSOR_1<T && SENSOR_2>T){
		left;
		}
	else if(SENSOR_1<T && SENSOR_2< T){
		back; Wait(50);
		right; Wait(30);
		go; Wait(10);
		}
	}
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサーの光・タッチセンサー宣言
SetSensor(SENSOR_2,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_TOUCH);

 go;
 until(SENSOR_3==1);
 turn_left();
 go;
 Wait(200);
 right;
 Wait(80);
 go; 
 until(SENSOR_3 == 1);
 turn_right();
 go;
 until(SENSOR_3 == 1);
 turn_left();
 go;
 until(SENSOR_3 == 1);
 turn_left();
 go;
 until(SENSOR_3==1);
 turn_left();
 go;
 until(SENSOR_3==1);
 back; Wait(time);
 OnFwd(OUT_C); 
      OnRev(OUT_A);
  Wait(75);
 go; Wait(220);
 OnFwd(OUT_A);OnRev(OUT_C); Wait(20);
 go; Wait(150);
 Off(OUT_A+OUT_C);
 OnFwd(OUT_B); Wait(15);
  Off(OUT_B); Wait(50);
 while(SENSOR_3 == 0){
  go;
  } 
 until(SENSOR_3 == 1);
 OnFwd(OUT_A); OnRev(OUT_C); Wait(40);
 go; Wait(15);
 trace();      //トレースの呼び出し
 until(SENSOR_3 == 1);
 turn_left();
 go;
 until(SENSOR_3 == 1);
 Off(OUT_A+OUT_C);
 OnRev(OUT_B);Wait(15);
 Off(OUT_B);
 turn_left();
 go; Wait(80);
 Off(OUT_A+OUT_C);
  }
void   turn_left()   //左に曲がる関数。主にタッチセンサー後となる。
{
 back;
 Wait(time);
 OnFwd (OUT_C);
 OnRev(OUT_A);
 Wait(81);
 Off(OUT_A+OUT_C);
 Wait(time);  }
 
void  turn_right() //右に曲がる関数。用途は上に同じ。
 {
 back;
 Wait(time);
 OnFwd (OUT_A);
 OnRev(OUT_C);
 Wait(81);
 Off(OUT_A+OUT_C);
 Wait(time);  
 }

左側のロボット用

image2.jpg robokonn.gif

作成者(濱田)編集者(しゅう)

#define  right  OnFwd(OUT_A);OnRev(OUT_C);
#define  left  OnFwd (OUT_C);OnRev(OUT_A);
#define  go  OnFwd(OUT_A+OUT_C);
#define  back  OnRev(OUT_A+OUT_C);
#define T 48
sub trace ()
{
while(SENSOR_3==0){
if(SENSOR_1>T && SENSOR_2>T){ 
                   go;
                            }
                    else if (SENSOR_1<T && SENSOR_2<T){
                      right; Wait(40);
                      Off(OUT_A+OUT_C);
                           
                                                      }                
                     else if(SENSOR_1<T)
                      {  
                      left; Wait(10);  
                      Off(OUT_A+OUT_C);
                      }
                      else if(SENSOR_2<T)
                      {  
                      right; Wait(40);
                      Off(OUT_A+OUT_C);  
                      }
                  }
}   
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_TOUCH);
SetPower(OUT_A,4);
SetPower(OUT_C,7);
Off(OUT_A+OUT_C);
Wait(2500);


go;
until(SENSOR_3==1);    //壁にぶつかるまで直進
turn_right();
go;
Wait(300);
left;
Wait(85);
Off(OUT_A+OUT_C);
Wait(40);
go;
until(SENSOR_3==1);    //壁にぶつかるまで直進
turn_left();
go;
until(SENSOR_3==1);     //壁にぶつかるまで直進
turn_right();
go;
until(SENSOR_3==1);       //壁にぶつかるまで直進
turn_right();
go;
Wait(50);
trace();         //トレース
turn_left();
go;
until(SENSOR_3==1);    //缶にぶつかるまで直進
Off(OUT_A+OUT_C);
Wait(50);
OnRev(OUT_A+OUT_C);
Wait(50);
OnFwd(OUT_B);
Wait(40);        
Off(OUT_B);                //缶をつかむ
Wait(10);
turn_right();
Wait(50);                 
go;
Wait(400);
trace();                  //トレース
turn_left();
go;
until(SENSOR_3==1);       //壁にぶつかるまで直進
Off(OUT_A+OUT_C);
Wait(40);
OnRev(OUT_B);
Wait(40);
Off(OUT_B);                 //ゴールに缶を入れる
turn_right();
go;
until(SENSOR_3==1);
Off(OUT_A+OUT_C);
}
void   turn_left()
{
 back;
 Wait(30);
 OnFwd (OUT_C);
 OnRev(OUT_A);
 Wait(80);
 Off(OUT_A+OUT_C);
 Wait(40);  
 }
void turn_right()
{
back;
Wait(40);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(80);
Off(OUT_A+OUT_C);
Wait(40);  
}                                                
   

プログラムの工夫・苦労

工夫した点

あまり複雑なプログラムを使用せずになるべく簡単な内容に仕上がったと思います。

苦労した点

なかなか予想したようにプログラムが動いてくれず、本番ギリギリまでプログラムの調整をしたのがとても苦労した。

ロボコンを終えて

結果

良かった点

缶を倒すことまでは出来たが、アームで缶をうまくつかむことが出来なかった。
結果は6位と、あまりよかったとは言える内容ではなかったが、缶をつかんで運ぶまでがあと一歩まで行けたのがよかった。

反省点・改善点

プログラムをパッと見た感じでわかるように長すぎるような気がした。もっと短縮できるように努力をするべきだと思った。
また、もっと安定して缶を掴めるような構造のロボットに改良できれば良いと感じた。

わかりやすい図により、全体としてどんな動きをしているかわかってよいです。 FI


添付ファイル: file090205_1722~01.jpg 126件 [詳細] fileImage020.jpg 118件 [詳細] fileImage018.jpg 137件 [詳細] fileImage019.jpg 120件 [詳細] file090205_1723~01.jpg 129件 [詳細] file090205_1722~02.jpg 124件 [詳細] filerobokonn.gif 120件 [詳細] filerobokon2.gif 127件 [詳細] filerobocon2008b-3.png 128件 [詳細] fileimage2.jpg 120件 [詳細] fileimage1.jpg 136件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-02-14 (土) 02:20:01 (3838d)