- 追加された行はこの色です。
- 削除された行はこの色です。
[[2013b/kk/missoin]]
*ロボコン [#rc648b11]
***今回のロボコンの課題 [#p3d4f813]
~ライン上に設置された缶を集めポイントの枠内にどれだけ積み上げれるかを競います。
&ref(.png);
ルールの概要は大まかに
-缶を積みゴール枠内(境界可)に収める基礎点を主として
-缶を積み上げる動作
-缶を運ぶ動作
-連携の良さ、見た目等の技術点が加えられます。
詳しくは[こちら:http://yakushi.shinshu-u.ac.jp/robotics/?2013b%2FMission2]
&br;私たちのグループの方針としてはロボットを「缶を集める」役と「積み上げる」役に
&br;それぞれロボットを分け2段の缶を複数積みあげて得点を稼ぎます。
*ロボットの説明 [#bc577471]
~缶を集めてくる側のロボットです。基本形はライントレースのときのものを応用しています。 [#b15fe7fb]
&br;大きな特徴としては缶の受け渡しのため、つかんだ缶を押し出しハサミの外に出す仕組みです。
&br;機体の底を最大のタイヤを使用して持ち上げ、缶を押し出すのに使用するモーターを取りつ
けました。この時、重たいモーターを固定するのに苦労しました。L字のブロックと蝶番のブロックを使用して強固にしました。このモーターにはライントレースをする光センサーもついています。
&br;ハサミの先についた光センサーで缶を掴んだことを感知します。センサーの位置は、初め機体の中央:黒い受信ポート下:に位置していましたが蛍光灯や紙からの反射光によって値が30〜40とばらつきが生じてしまったため、より缶に近い歯先に取り付けました。
~ハサミはシンプルに棒二本。重量の軽い缶を安定して運ぶことが問題でしたが、ハサミに返しを取り付けたり、全体の動くスピードを落としたり、回転を
*プログラム [#be5c1e54]
-定義文
#define WHITE 46
#define BLACK 40
#define CATCH 44
#define power SetPower(OUT_AC,1);
#define go_forward power;OnFwd(OUT_AC);
#define go_back power;OnRev(OUT_AC);
#define LEFT power;OnRev(OUT_A);OnFwd(OUT_C);
#define left power;Off(OUT_A);OnFwd(OUT_C);
#define RIGHT power;OnFwd(OUT_A);OnRev(OUT_C);
#define right power;OnFwd(OUT_A);Off(OUT_C);
#define PUSH power;OnRev(OUT_B);Wait(3);Off(OUT_B);Wait(20);OnFwd(OUT_B);Wait(10);Float(OUT_B);
-サブルーチン
ライントレース(右側)
sub trace1_R(){
if (SENSOR_1 < BLACK){
RIGHT;
} else if (SENSOR_1 < BLACK +2){
right;
} else if (SENSOR_1 > WHITE -2){
left;
} else if (SENSOR_1 > WHITE){
LEFT;
}
}
ライントレース(左側)
sub trace1_L(){
if (SENSOR_1 < BLACK){
LEFT;
} else if (SENSOR_1 < BLACK +2){
left;
} else if (SENSOR_1 > WHITE -2){
right;
} else if (SENSOR_1 > WHITE){
RIGHT;
}
}
交差点を判断するライントレース(右側)
sub trace2_R(){
while (FastTimer(0) < 25){
if (SENSOR_1 < BLACK){
RIGHT;
}else if (SENSOR_1 < BLACK +2){
ClearTimer(0);
right;
}else if (SENSOR_1 > WHITE -2){
ClearTimer(0);
left;
}else if (SENSOR_1 > WHITE){
ClearTimer(0);
LEFT;
}else{
ClearTimer(0);
go_forward;
}
}
if(FastTimer(0) >= 25){
ClearTimer(0);
LEFT;
Wait(40);
go_forward;
Wait(20);
Off(OUT_AC);
ClearTimer(0);
}
}
交差点を判断するライントレース(左側)
sub trace2_L(){
while (FastTimer(0) < 25){
if (SENSOR_1 < BLACK){
LEFT;
}else if (SENSOR_1 < BLACK +2){
ClearTimer(0);
left;
}else if (SENSOR_1 > WHITE -2){
ClearTimer(0);
right;
}else if (SENSOR_1 > WHITE){
ClearTimer(0);
RIGHT;
}else{
ClearTimer(0);
go_forward;
}
}
if(FastTimer(0) >= 25){
ClearTimer(0);
RIGHT;
Wait(40);
go_forward;
Wait(20);
Off(OUT_AC);
ClearTimer(0);
}
}
缶の受け渡し(右側)
sub trace3_R(){
while (FastTimer(0) < 25){
if (SENSOR_1 < BLACK){
RIGHT;
}else if (SENSOR_1 < BLACK +2){
ClearTimer(0);
right;
}else if (SENSOR_1 > WHITE -2){
ClearTimer(0);
left;
}else if (SENSOR_1 > WHITE){
ClearTimer(0);
LEFT;
}else{
ClearTimer(0);
go_forward;
}
}
if(FastTimer(0) >= 25){
go_forward;
Wait(10);
LEFT;
Wait(70);
Off(OUT_AC);
Wait(100);
PUSH;
go_back;
Wait(100);
Off(OUT_AC);
ClearTimer(0);
}
}
缶の受け渡し(左側)
sub trace3_L(){
while (FastTimer(0) < 25){
if (SENSOR_1 < BLACK){
LEFT;
}else if (SENSOR_1 < BLACK +2){
ClearTimer(0);
left;
}else if (SENSOR_1 > WHITE -2){
ClearTimer(0);
right;
}else if (SENSOR_1 > WHITE){
ClearTimer(0);
RIGHT;
}else{
ClearTimer(0);
go_forward;
}
}
if(FastTimer(0) >= 25){
RIGHT;
Wait(70);
Off(OUT_AC);
PUSH;
go_back;
Wait(50);
Off(OUT_AC);
ClearTimer(0);
}
}
メインタスク
task main()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_LIGHT);
ClearTimer(0);
int n=0;
while(n==0){
Wait(100); //相手を待つ時間
until(SENSOR_1 < BLACK){ //黒になるまで直進
go_forward;}
Off(OUT_AC);
Wait(100);
go_back;
Wait(15);
Off(OUT_AC);
Wait(30);
n++;
}
while(n==1){
if (SENSOR_3 > CATCH){
PlaySound(SOUND_UP);
ClearTimer(0);
until(FastTimer(0) > 500){
trace1_R();}
LEFT;
Wait(55);
go_forward;
Wait(20);
until(SENSOR_1 < BLACK){
go_forward;}
ClearTimer(0);
until(FastTimer(0) > 500){
trace1_R();}
ClearTimer(0);
trace3_R();
n++;
} else if (SENSOR_1 < BLACK){
RIGHT;
} else if (SENSOR_1 < BLACK +2){
right;
} else if (SENSOR_1 > WHITE -2){
left;
} else if (SENSOR_1 > WHITE){
LEFT;
}
}
while(n==2){
RIGHT;
Wait(40);
go_forward;
Wait(150);
until(SENSOR_1 < BLACK){
right;}
if (SENSOR_3 > CATCH){
until(SENSOR_1 < BLACK){
LEFT;}
ClearTimer(0);
trace3_L();
n++;
} else if (SENSOR_1 < BLACK){
LEFT;
} else if (SENSOR_1 < BLACK +2){
left;
} else if (SENSOR_1 > WHITE -2){
right;
} else if (SENSOR_1 > WHITE){
RIGHT;
}
}
}
*課題・結果 [#lc992438]
|結果|缶の個数|得点|
| | | |