- 追加された行はこの色です。
- 削除された行はこの色です。
[[2009b]]
//CENTER:只今作成中
目次
#contents
*チーム [#l02624f3]
チーム名「株式会社 とだ」~
メンバー~
**チーム名 [#y49c64f3]
株式会社 とだ
**メンバー [#ud8d069a]
その壱 とだ~
その弐 なかみゅう~
その参 SHIMA~
*ロボコン競技内容 [#x6401341]
**課題:玉入れロボット[#s59b9347]
ピンポン玉をできるだけたくさん所定の場所に運ぶ
**フィールドの説明 [#l42d3efc]
・フィールドは約160cm×110cm~
・18個のピンポン玉はフィールドの中央にある、2x4の角材(長さ40cm)2本にはさまれた正方形の領域にあり、~
領域のこの角材が置かれていない辺には500mlの紙パックが並べられている~
・18個のピンポン玉はフィールドの中央にある、2x4の角材(長さ40cm)2本にはさまれた正方形の領域にあり、領域のこの角材が置かれていない辺には500mlの紙パックが並べられている~
・紙パックはすべての面に白あるいは緑色の画用紙がはられている~
・目的地の長方形は19mm×19mmの角材で仕切られていている~
・黒い線の太さは約25mm
**ルール[#xb98a5cb]
***基本ルール [#c9877109]
・単独の競技(1回)および対戦の競技(リーグ戦、計2回の対戦)の合計点で争う~
・スタート時は「スタート地点」の内部以外に接していないこと~
・スタート時のロボットは2個を越えないこと(スタート後はいくつに分裂してもかまわない)~
・開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること~
・競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない~
・途中でうまく動かなくなった場合、1回限り再スタートすることができる~
・競技時間終了までにもとのスタート地点にもどらなければならない(リーグ戦では戻らなくてもよい)~
・競技時間は3分とする。ただし審判が、競技続行不能と判断した場合は途中で終了する
***基本得点の計算方法 (単独競技) [#q6f70ec7]
・ボール1個あたり2点で計算する。~
・ボーナス点として5個入れるごとに5点追加~
・時間内(3分)にスタート地点にもどらないと-4点(ただしRCXを搭載するロボットの一部でも戻っていれば -2点)~
・最高で51点~
***基本得点の計算方法 (リーグ戦) [#la84423e]
・ゴールに入れたボールの数で競い、勝ったチームは10点、引き分けの時は5点、負けたチームは0点とする。~
・さらにゴールに入れたボール1個あたり1点を加点する~
・競技終了後、ゴールの内部にロボットが触れていれば-1点~
・最高で20点~
***技術点の計算方法 [#oe26404f]
以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について全てのチーム(3チーム)+TAが20点満点で採点し平均点を求める。~
得点の目安 ・紙パックの処理 (3点)~
・ボールの収集 (3点)~
・ボールの運搬 (3点)~
・ボールのシュート (3点)~
・2台のRCXの連携 (3点)~
・その他 (5点)~
*ロボットの作成 [#xac09bd4]
**方針 [#j6aa403e]
効率よくパックをどかし、ピンポン球を運搬できるロボットを製作する。
**製作に移る前に [#r72a29d2]
初め、一つの大きなロボットを製作するつもりでした(図1参照)が、ピンポン球を収集することが困難であったため、~
パックをどかすロボットとピンポン球を収集するロボットの2台を製作することとなった。
初め、一つの大きなロボットを製作するつもりでした(図1参照)が、ピンポン球を収集することが困難であったため、パックをどかすロボットとピンポン球を収集するロボットの2台を製作することとなった。
**ピンポン球収集ロボット [#u6632eb3]
***構造と仕組み [#i95dc0b5]
収集ロボットの構造は、ロボットの中央(左右のタイヤの間)にキャタピラが備え付けられていて、キャタピラは、~
ピンポン玉の上面と接するような高さに設置されている。また、キャタピラの先端にはピンポン玉を回収しやすくするためのアームが設置されていて、~
このアームは、ピンポン玉をゴールに排出する際にも、ピンポン玉を持ち上げるのに役立つ。なお、ピンポン玉は最高6個回収できる。~
車体には、光センサーと回転センサーの両方が設置されて、移動する時に利用する。
収集ロボットの構造は、ロボットの中央(左右のタイヤの間)にキャタピラが備え付けられていて、キャタピラは、ピンポン玉の上面と接するような高さに設置されている。~
また、キャタピラの先端にはピンポン玉を回収しやすくするためのアームが設置されていて、このアームは、ピンポン玉をゴールに排出する際にピンポン玉を持ち上げるのに役立つ。なお、ピンポン玉は最高6個回収できる。~
車体には、光センサーと回転センサーの両方が設置されて、移動する時に利用する。~
車体の移動速度は、ギアの組み合わせの関係で結構速いので、先手をとることも可能である。
***改良前の作品 [#u8e14c08]
改良前の作品には、移動手段として光センサーではなく、タッチセンサーが取り付けられていたが、この場合、移動にずれが生じると修正することが困難であったため光センサーになった。~
移動のずれは、左右のホイールのモーターの回転数が多少違うため、まっすぐに進もうとすると、どちらか左右に少しずつ曲がってしまうことにより発生する。タッチセンサーで修正しようとすると、壁もしくは障害物に当たらないと修正できない。しかも、実際に実行しようとすると、たいして修正できなかった。~
しかし、光センサーだと、黒いラインがフィールド上に敷きめぐらされているため、修正されやすくなる。
***完成 [#n216b881]
完成したものは、全長約30cmという巨大なものになった。
***工夫した点・苦労した点など [#u29ed85b]
工夫した点は、車体のタイヤをやや前方に取り付けることにより、ロボットが回転運動した時も、収集したピンポン玉を逃しにくくしてある点である(瞬間中心の関係)。~
また、前方のアームの長さも床に届かないような高さにし、左右のアームの間隔は少し緩めに設置されているので、ピンポン玉が詰まった際にアームが多少広がり、アームにかかった無理な力を逃がし、アームは回転し続けます。~
さらに、アームとキャタピラの回転は連動していて、一つのモーターで回転します。~
前方のクローは、ゴールにピンポン玉を入れる時、ピンポン玉を入れやすくする役割を担っている。
***問題点 [#mb65bd46]
・車体が大きすぎるため回転運動させようとすると、周辺の障害物にあたり回転が困難である。~
・アームが少し短いため、ピンポン玉収集があまりうまくいかない。(前進しながらなら回収しやすい)~
・ピンポン玉を回収する関係上、光センサーの幅がやや広めなので、ライントレーサーがうまくいかないこともある。
***プログラム [#y4a54e69]
#define THRESHOLD 40 //明るさの識別値
#define go_forward OnFwd(OUT_A+OUT_C); //前進のプログラム
#define go_back OnRev(OUT_A+OUT_C); //後進プログラム
#define turn_right OnFwd(OUT_A);OnRev(OUT_C); //右旋回プログラム
#define turn_left OnRev(OUT_A);OnFwd(OUT_C); //左旋回のプログラム
#define rs1_1 15 //part1_1を前進するための回転数
#define rs1_2 -90 //part1_2を後進するための回転数
#define rs2_1 15 //part2_1を前進するための回転数
#define rs2_2 17 //part2_2を前進するための回転数
#define rs4 8 //part4とpart5を前進するための回転数
#define rs6 -12 //part6を後進するための回転数
#define rs7 20 //part7を前進するための回転数
#define rs10 50 //part10を後進するための回転数
#define rs8 20 //part8を前進するための回転数
#define rr 5 //90°右旋回するための回転数
#define rl -5 //90°左旋回するための回転数
#define rr2 3 //右へ少し旋回するための回転数
#define rl2 -9 //左へ少し旋回するための回転数
#define rr4 2 //part4で右へ少し旋回するための回転数
#define rr8 8 //part8で右へ少し旋回するための回転数
#define arm1 OnFwd(OUT_B); //アーム(ピンポン玉回収)
#define arm2 OnRev(OUT_B);Wait(1000);Float(OUT_B); //アーム(ピンポン玉排出)
task main ()
{
SetPriority(1);
SetSensor(SENSOR_1,SENSOR_LIGHT); //SENSOR1は光センサー
SetSensor(SENSOR_2, SENSOR_ROTATION); //SENSOR2は回転センサー
SetSensor(SENSOR_3,SENSOR_LIGHT); //SENSOR3は光センサー
int n;
n=0;
go_forward;Wait(150);Off(OUT_A+OUT_C); //part1始まり
start follow_line_forward;until(SENSOR_2>=rs1); //センサー2がrs1以上になるまで前進
stop follow_line_back;Off(OUT_A+OUT_C); //part1終わり
while(n<=5) //nが5回以下なら以下のプログラムを行う
{
ClearSensor(SENSOR_2); //part2始まり
turn_right;until(SENSOR_2>=rr);Off(OUT_A+OUT_C); //右へセンサー2がrr以上になるまで旋回
go_forward;Wait(50);Off(OUT_A+OUT_C); //少し前進
ClearSensor(SENSOR_2);
turn_right;until(SENSOR_2>=rr);Off(OUT_A+OUT_C); //右へセンサー2がrr以上になるまで旋回
arm1; //アームを起動
ClearSensor(SENSOR_2);
go_forward;until(SENSOR_2>=rs2_1);Off(OUT_A+OUT_C); //センサー2がrs2_1以上になるまで前進
ClearSensor(SENSOR_2);
go_forward;until(SENSOR_2>=rs2_2);Off(OUT_A+OUT_C); //センサー2がrs2_2以上になるまで前進
Wait(200); //2秒間待機
//part2終わり
ClearSensor(SENSOR_2); //part3開始
go_back;until(SENSOR_2<=-rs2_2);Off(OUT_A+OUT_C); //センサー2が-rs2_2以下になるまで後進
//part3終わり
ClearSensor(SENSOR_2); //part4開始
turn_right;until(SENSOR_2>=rr4);Off(OUT_A+OUT_C); //センサー2がrr4以上になるまで右旋回
ClearSensor(SENSOR_2);
go_forward;until(SENSOR_2>=rs4);Off(OUT_A+OUT_C); //センサー2がrs4以上になるまで前進
Wait(200); //2秒間待機
ClearSensor(SENSOR_2);
go_back;until(SENSOR_2<=-rs4);Off(OUT_A+OUT_C); //センサー2が-rs4以下になるまで後進
//part4終わり
ClearSensor(SENSOR_2); //part5開始
turn_left;until(SENSOR_2<=rl2);Off(OUT_A+OUT_C); //センサー2がrl2以下になるまで左旋回
ClearSensor(SENSOR_2);
go_forward;until(SENSOR_2>=rs4);Off(OUT_A+OUT_C); //センサー2がrs4以上になるまで前進
Wait(300); //3秒間待機
ClearSensor(SENSOR_2);
go_back;until(SENSOR_2<=-rs4);Off(OUT_A+OUT_C); //センサー2が-rs4以下になるまで後進
//part5終わり
//part6開始
go_back;until(SENSOR_2<=rs6);Off(OUT_A+OUT_C); //センサー2が-rs2_1以下になるまで後進
Float(OUT_B); //アーム停止
//part6終了
ClearSensor(SENSOR_2); //part7開始
turn_left;until(SENSOR_2<=rl);Off(OUT_A+OUT_C); //センサー2がrl以下になるまで左旋回
go_back;Wait(50);Off(OUT_A+OUT_C); //少し後退
ClearSensor(SENSOR_2);
turn_left;until(SENSOR_2<=rl);Off(OUT_A+OUT_C); //センサー2がrl以下になるまで左旋回
start follow_line_forward;until(SENSOR_2>=rs7);Off(OUT_A+OUT_C);
//センサー2がrs10以上になるまで前進
//part7終了
ClearSensor(SENSOR_2); //part8開始
turn_right;until(SENSOR_2>=rr8);Off(OUT_A+OUT_C); //センサー2がrr以上になるまで右旋回
ClearSensor(SENSOR_2);
go_forward;Wait(300);Off(OUT_A+OUT_C); //センサー2がrs8以上になるまで前進
PlaySound(2);Wait(100);arm2; //ピンポン玉排出
//part8終了
ClearSensor(SENSOR_2); //part10開始
go_back;until(SENSOR_2<=-rs8);Off(OUT_A+OUT_C); //センサー2が-rs8以下になるまで前進
ClearSensor(SENSOR_2);
turn_left;until(SENSOR_2<=rl);Off(OUT_A+OUT_C); //センサー2がrl以下になるまで左旋回
go_back;Wait(50);Off(OUT_A+OUT_C); //少し後進
start follow_line_back;until(SENSOR_2>=rs10);Off(OUT_A+OUT_C);
//センサー2がrs10以上になるまで後進
n=n+1; //part10終了
}
if(n>5) //5回目終了後以下のプログラムを行う
{ //part11開始
start follow_line_forward;until(SENSOR_2>=-rs1_2);
stop follow_line_back;Off(OUT_A+OUT_C); //センサー2が-rs1_2以上になるまで前進
go_forward;Wait(50);Off(OUT_A+OUT_C); //少し前進
start follow_line_forward;until(SENSOR_2<=rs1_1);
stop follow_line_back;Off(OUT_A+OUT_C); //センサー2が-rs1_1以上になるまで前進
} //part11終わり
}
task follow_line_forward() //ラインに沿って前進するプログラム
{
while(true)
{
if(SENSOR_1>THRESHOLD) //左側のセンサーが白で
{
if(SENSOR_3>THRESHOLD) //かつ右側のセンサーが白なら
{Off(OUT_A+OUT_C);go_forward;}//直進する
else if(SENSOR_3<THRESHOLD) //かつ右側のセンサーが黒なら
{Off(OUT_A+OUT_C);turn_right;}//右折する
}
else if(SENSOR_1<THRESHOLD) //左側のセンサーが黒で
{
if(SENSOR_3>THRESHOLD) //かつ右側のセンサーが白なら
{Off(OUT_A+OUT_C);turn_left;} //左折する
else if(SENSOR_3<THRESHOLD) //かつ右側のセンサーが黒なら
{Off(OUT_A+OUT_C);go_forward;}//直進する。
}
}
}
task follow_line_back() //ラインに沿って後進するプログラム
{
while(true)
{
if(SENSOR_1>THRESHOLD) //左側のセンサーが白で
{
if(SENSOR_3>THRESHOLD) //かつ右側のセンサーが白なら
{Off(OUT_A+OUT_C);go_back;} //後進
else if(SENSOR_3<THRESHOLD) //かつ右側のセンサーが黒なら
{Off(OUT_A+OUT_C);turn_left;} //左旋回
}
else if(SENSOR_1<THRESHOLD) //左側のセンサーが黒で
{
if(SENSOR_3>THRESHOLD) //かつ右側のセンサーが白なら
{Off(OUT_A+OUT_C);turn_right;}//右旋回
else if(SENSOR_3<THRESHOLD) //かつ右側のセンサーが黒なら
{Off(OUT_A+OUT_C);go_back;} //後進
}
}
}
**パックを排除するロボット [#x175aadf]
***構造と仕組み [#i95dc0b5]
このロボットの構造は、他のグループと同様にタッチセンサーが備わったバンパーと上から下ろされるアームでパックをはさみ、パックを移動させます。~
パックは、3個程度までなら回収できます。~
移動には、光センサーのみが使用されます。
***完成 [#n216b881]
***工夫した点・苦労した点など [#u29ed85b]
***問題点 [#mb65bd46]
***プログラム [#y4a54e69]
*感想 [#jad47c94]
*コメント [#me0d2489]
#comment