2011a/ロボコン

 目次

ロボコン:サッカーロボット(ボール運搬ロボットその3?)

テニスボール3個をゴールに入れる。

コース

robocon2011a.png

フィールドの説明

  • フィールドは約160cm×110cm
  • 距離は芯々間で表示されている
  • 黒い線の太さは約20mm
  • 図に茶色でかかれている障害壁は2x4材(約89mm×38mmの断面)
  • ゴールは外周が約125mm×190mm
  • 空き缶は前3本、後ろ4本(前後の間隔は約15cm,隣との間隔は約20cm)

ルール

基本ルール

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

基本得点の計算方法

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

技術得点の計算方法

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

得点の目安:

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

メンバー

  • 中島
  • すがはら
  • ゆきち

ロボット説明

ボールを押し出すロボット

  • 三輪にして小回りが利くようにした。
    DSC_0050.JPG
  • ロボット本体がボール置き場の間に入り込みボールを押し出していくため、ロボットの幅を最小にした。
    DSC_0054.JPG
  • ロボットの前側にバンパーを付けて、多少ロボットが壁にぶつかっても間に入っていきやすくなった。
    robot2.JPG

ボールを運ぶロボット

  • ボールを運ぶロボットの全体図。
    最初はボールを3つ一気に運ぶロボットを製作していたが、センサーが足りなかったりロボット自体が大きくなりすぎたため、ボールを1つずつ運ぶロボットにした。
    robo.JPG
  • こんな感じでボールをキャッチ。
    ボールがアームの端から落ちないよう両端にストッパーを取り付けた。
    catch.JPG
  • 最初は24枚羽の歯車を5つ組み合わせて動力を伝えていたが、それだとボールを持ち上げられなかったので8枚羽の歯車を入れることで馬力が上がり、ボールが持ち上がるようになった。
  • アームが下に降りたときに持っていたボールを押し出すようにパーツを取り付けた。
    gia.JPG
  • ボールを持った時にバランスが取れるよう後ろに重りをつけた。
  • ライントレースをする光センサーは前に付くところがなかったため後ろにつけた。
    weight.JPG

連携部分

cose.png

,離蹈椒奪箸壁の間に入り込み、

in.JPG

ボールを押し出し、反対側にいる△離蹈椒奪箸謀呂后

rennkei1.JPG

△離蹈椒奪箸ゴールまで運ぶ。

catch3.JPG

プログラム

ボールを押し出すプログラム

#define signal_on 11
#define signal_off 12
#define turn_right OnFwd(OUT_C);Wait(124);Off(OUT_A+OUT_C);
#define turn_left OnFwd(OUT_A);Wait(124);Off(OUT_A+OUT_C);
#define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Float(OUT_A+OUT_C);

sub SEND()                  //メッセージを送るプログラム
{
ClearTimer(0);
ClearMessage();
while (FastTimer(0) < 200)
{
SendMessage(signal_on);
if (Message() == 1) 
{
PlaySound(SOUND_CLICK);    // 送信に成功したときはピッと鳴らす
} 
else
{
PlaySound(SOUND_LOW_BEEP); // 送信に失敗したときはブッと鳴らす
 }
}
}

task main()
{
 SetSensor(SENSOR_1, SENSOR_LIGHT);        //光センサーをセンサー1にセット
 SetSensor(SENSOR_3, SENSOR_LIGHT);        //光センサーをセンサー3にセット


go_straight(70);                           //円からでてラインにのる
turn_left;                                                     
go_straight(240);                          //ラインの端まですすむ
turn_left;                                 
go_straight(160);                          //ボールをつく

 SEND();           
 ClearMessage();                           //メッセージをクリア
 until(Message() == signal_on);            //メッセージがsignal_onになるまで待機
 go_straight(40);                          //ボールをつく
 SEND();
 ClearMessage();
 until(Message() == signal_on);
 go_straight(40);
 SEND();  

}

ボールを運ぶプログラム

#define go_s(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);			//直進
#define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);			//後退
#define turn_r(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);		//右に曲がる
#define turn_l(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_A+OUT_C);		//左に曲がる
#define arm_d OnRev(OUT_B);Wait(90);Off(OUT_B);					//アームを下げる
#define arm_u OnFwd(OUT_B);Wait(90);Off(OUT_B);					//アームを上げる
#define SPIN 200	//一回転する時間
#define signal_on 11
#define signal_off 12

task main()
{
	SetSensor(SENSOR_1,SENSOR_LIGHT);	//センサー1を光センサーに
	SetSensor(SENSOR_2,SENSOR_TOUCH);	//センサー1をタッチセンサーに
	SetSensor(SENSOR_3,SENSOR_LIGHT);	//センサー3を光センサーに(ランタンを探す)
	SetPower(OUT_B,6);
	int l_max=0;		//l_maxを定義(初期値0)
	int t_max=0;		//t_maxを定義(初期値0)

	go_s(180);				//スタート地点からボール置き場へ移動
	turn_l(80);
	OnFwd(OUT_A+OUT_C);
	until(SENSOR_1<40);			//線上まで来たら
	turn_r(100);				//向きを変えて直進
	go_s(180);
	turn_r(150);
	arm_d;					//ボール置き場まで来たらアームを下げ
	OnFwd(OUT_A+OUT_C);
	until(SENSOR_2 == 1);		//木のブロックにぶつかるまで直進
	Wait(500);				//もう一つのロボットがボールを押すまで待つ
	OnRev(OUT_A+OUT_C);
	Wait(20);				//アームがブロックから離れるまで後退
	Float(OUT_A+OUT_C);			//ゆっくり止まる
	arm_u;					//アームを上げてボールを固定
	back(50);
	turn_r(150);				//ゴールの方向に方向転換
	go_s(850);				//ゴール前に向かって直進
	turn_r(90);				//ロボットとゴールが直角になるよう向きを調整
	    go_s(200);			//ゴールに向かって直進
	    arm_d;				//アームを降ろし、ボールを放す
	    repeat(3)
	    {go_s(10); back(10);}		//車体を揺らし、ボールを確実に落とす
	    arm_u;				//アームを上げる
	repeat(2)
 {
	turn_r(200);				//ボール置き場へ戻るプログラム
	go_s(800);				//まっすぐスタート地点まで戻る
	turn_r(100);				//方向転換
	OnFwd(OUT_A+OUT_C);	
	until(SENSOR_1<40);			//線上まで直進したら
	turn_l(100);				//ボール置き場へ方向転換
	go_s(180);
	turn_r(120);				//ボール置き場へ
	arm_d;
	OnFwd(OUT_A+OUT_C);
	until(SENSOR_2 == 1);		//ブロックにぶつかるまで直進
	ClearMessage();			//もう一台のロボットとメッセージの送受信
	while(true)
	{until(Message() == signal_on);	//アームを上げるプログラムを実行
	arm_u;	}
				//ゴールに向かうプログラム
	back(40);
	turn_r(120);
	go_s(830);
	turn_r(90);
	go_s(200);
	    arm_d;			//アームを降ろし、ボールを蹴り出す
	    repeat(3)
	    {go_s(10); back(10);}
	    arm_u;
} 					//{}内を二回繰り返す
	back(500);			//コースの中心あたりまで戻って終了
} 

反省・感想

なかなか会ってロボットを製作することができず、完成に時間がかかってしまった。
2台を連携させてボールを運ぶロボットを作ったが、あまりうまく連携せず大変だった。
プログラムもなかなかうまくいかず、ボール置き場の間に入れなかったりゴールまでたどり着かなかったりと大変だった。
ボールを押し出すロボットなど、斬新さは取り入れられたので良かった。
アーム部分のギアの組み合わせがなかなかうまくいかず、今回の形になるまでとても時間がかかってしまい、苦労した。

コメント



添付ファイル: filein.JPG 377件 [詳細] filerennkei1.JPG 400件 [詳細] filecatch3.JPG 361件 [詳細] filecose.png 364件 [詳細] fileweight.JPG 368件 [詳細] filegia.JPG 376件 [詳細] filecatch.JPG 394件 [詳細] filerobot2.JPG 269件 [詳細] filerobo.JPG 393件 [詳細] fileDSC_0054.JPG 355件 [詳細] fileDSC_0050.JPG 374件 [詳細] filerobocon2011a.png 404件 [詳細]

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