- 追加された行はこの色です。
- 削除された行はこの色です。
[[2011a]]
#contents
*課題4の内容 [#yc8858bd]
**サッカーロボットを作る。 [#j7d60cce]
1〜2台のロボットを使いゴールにシュートするロボット、プログラミングする。
*メンバー [#f9f83299]
-MIYA
-TAMA
-ホン
-オ
*ルール [#zbcd964e]
**基本ルール [#ce51df70]
-(競技時間) テニスボールをすべて運び終わった時点、あるいは審判によって続行不能と判断された時点、あるいは競技者によってリタイア宣言がなされた時点、をもって競技の終了とする。
-(スタート地点) スタート時にロボットは、空中部分も含めスタートの円内になければならない。
-スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。
-開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。
-競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
-途中でうまく動かなくなった場合、1回限り再スタートすることができる。
-競技終了時点で、ロボットが運び終わったテニスボールに触れていてはならない。
**基本得点の計算方法 [#ab82bffb]
-ボールをゴール手前の円内からシュートしてゴールした場合、1個5点
-ボールをゴール手前の円外からシュートしてゴールした場合、1個2点
-ボールを3個ともゴールに入れればボーナス点として5点
-競技終了後、ロボットがボールに触れていた場合には、-1点
-ランタンを一つ倒したら -1点(ただし、得点した場合)
**技術得点の計算方法 [#lf1d729c]
-以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(8チーム)が20点満点で採点し、その平均点を求める。得点の目安:
-ボールを拾ってくる動作 (3点)
-ボールを運ぶ動作 (2点)
-空き缶をどける動作 (2点)
-2台以上のロボット、あるいは単体のロボットの場合は2台のRCXの連携の良さ、パスなどの正確さ (3点)
-シュートの正確さ、華麗さ (3点)
-自立型のロボットとしての形や動作の美しさ、斬新さ(3点)
-その他 (4点)
*ロボット紹介 [#g08112a1]
-今回はボールを押し出すロボットと押し出されたボールをディフェンスをどかしながらゴールまで運ぶロボットの2つに分けて連動させることにしました。
**ボールを押し出すロボット [#yaf7386d]
写真
-長い棒のようなものをつけるだけという簡単な仕組みですがこの長い棒をボールの挟まれた木の間に入れボールを押し出します。
**ボールをゴールまで運ぶロボット [#q72c3885]
写真
-ボールを受け取りゴールまで挟んで運び、ゴールの中に入れる。
*運び方 [#kfb1ed46]
今回はボールをシュートするというのを諦めて、確実に点を取るためにボールをゴールまで運ぶという方針に決めました。
ロボット1は木の間からボールを押し出す専門にして、もうひとつのロボットをボールを受け取りゴールまで運んでゴールにボールをいれ、またボールの挟んである位置まで戻ってもう一度ボールを受け取りゴールまで運ぶという動作を繰り返します。
*プログラム [#j75d31c6]
#define THRESHOLD 45
#define SIGNALON 11
#define SIGNALOFF 12
task main()
{
ClearMessage();
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_LIGHT);
repeat ( 3 )
{
OnFwd(OUT_A+OUT_C);
until(SENSOR_2 < THRESHOLD);
until(SENSOR_2 > THRESHOLD);
until(SENSOR_2 < THRESHOLD);
start follow_line; //ライントレースを始める
Wait(150);
stop follow_line; //ライントレースをやめる
OnFwd(OUT_A);OnRev(OUT_C); Wait(90);
//位置に着いたことを知らせる
//ボールを押すまで待つ
OnFwd(OUT_A);OnRev(OUT_C);Wait(90);
start follow_line;//ライントレースを始める
Wait(550);
stop follow_line;//ライントレースをやめる
OnFwd(OUT_C);OnRev(OUT_A);Wait(90);
OnFwd(OUT_A+OUT_C); Wait(100);
OnFwd(OUT_C);OnRev(OUT_A);Wait(180);
Off(OUT_A+OUT_C);
SendMessage(SIGNALON);//位置に着いたことを知らせる
until (Message() == SIGNALOFF);//ボールを押すまで待つ
OnFwd(OUT_B);Wait(30);//アームを閉じる
OnFwd(OUT_A);OnRev(OUT_C); Wait(90);
start follow_line; //ライントレースを始める
Wait(150);
stop follow_line; //ライントレースをやめる
Off(OUT_B);
OnFwd(OUT_A);OnRev(OUT_C);Wait(90);
start follow_line;//ライントレースを始める
Wait(550);
stop follow_line;//ライントレースをやめる
OnFwd(OUT_C);OnRev(OUT_A); Wait(45);
OnFwd(OUT_A+OUT_C);Wait(100);
start boll_kick; //ゴールを探し、ボールを蹴る
OnFwd(OUT_A+OUT_C);Wait(600);
start boll_kick;//ゴールを探し、ボールを蹴る
Wait(1000);
stop boll_kick; } //10秒待ってから止める
}
stop boll_kick; }//秒待ってから止める
}
task follow_line() //ライントレースのプログラム
task follow_line()//ライントレースのプログラム
{
while(true){
if (SENSOR_2 < THRESHOLD){OnFwd(OUT_A); Off(OUT_C);}
else{OnFwd(OUT_C); Off(OUT_A);}
if (SENSOR_2 < THRESHOLD){OnFwd(OUT_A);Off(OUT_C);}
else{OnFwd(OUT_C);Off(OUT_A);}
}
}
task boll_kick() //ゴールを探し、ボールを蹴るプログラム
task boll_kick()//ゴールを探し、ボールを蹴るプログラム
{
OnFwd(OUT_A);
OnRev(OUT_C);
OnRev(OUT_C);
until(SENSOR_1==SENSOR_3);
OnFwd(OUT_A+OUT_C); Wait(150);
OnRev(OUT_B); Wait(30); //アームを開く
OnRev(OUT_A+OUT_C); Wait(300);
OnFwd(OUT_A+OUT_C); Wait(200);
OnRev(OUT_B);Wait(30);//アームを開く
Off(OUT_B);
OnRev(OUT_A+OUT_C); Wait(500);
OnFwd(OUT_A);OnRev(OUT_C); Wait(90);
}
*感想 [#vdc538f1]
*反省 [#x0ff7937]
*コメント [#m3fb9af5]
#comment