- 追加された行はこの色です。
- 削除された行はこの色です。
[[2006a/A7]]
[[2006a/A7/]]
*ロボコンページ[[2006a/A7]] [#vab94d30]
☆もくじ☆
#contents
*制作者 [#w5936a8f]
|アナクスナムゥン|ガリ|メソ|
*課題「缶転がしロボット」について [#wd6b5568]
(ルールについて)
350mlの中身の入った缶を所定の場所から所定の場所まで運ぶ。
競技時間は3分間で、1缶運ぶごとに30秒延長される。評価は、缶を運んだ数の点数(1缶で5点、2缶で15点、3缶で30点)と技術点(他チームの評価点、自チームの評価点、先生方のそれぞれ20点満点で評価された平均点)の両方で評価される。途中、障害物の缶(350mlと500ml)があり、それを倒したり、フィールド外に出すと減点の対象となってしまうので、当たらないようにかつ正確に運ぶ技術が求められる。
(ロボットについて)
2台のロボットを使う。コース内は、1台のロボットだけが走って所定の場所から所定の場所まで缶を運ぶ。構造は、上から缶を抱え込む、ブルトーザーと同じような構造となっている。3缶並んでいるうち常に真ん中の缶を運ぶ為に、1回目缶を運んだら2台目のロボットが端のある缶を押して真ん中に持ってきて2回目からも同じ動きで缶を運ぶことができるようにした。つまり、
1、ロボット1が真ん中の缶をつかんでゴールまで運ぶ(ライントレース)
→ 2、ロボット2が障害物の間を通って端にある缶を真ん中へ押す
→ 3、ロボット1が戻って同じ動作を繰り返す
*一台目のロボットのプログラム [#h5558d91]
#define THRESHOLD 43
#define right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);
#define left(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);
#define go(t) OnFwd(OUT_A+OUT_C);Wait(t);
#define back(t) OnRev(OUT_A+OUT_C);Wait(t);
#define down(t) OnFwd(OUT_B);Wait(t);
#define up(t) OnRev(OUT_B);Wait(t);
int x;
int SL1;
int SL2;
int SR1;
int SR2;
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);
SetSensor(SENSOR_3,SENSOR_LIGHT);
x= 0 ;
SL1=SENSOR_1;
SR1=SENSOR_3;
while(true){
SL2=SL1;
SL1=SENSOR_1;
SR2=SR1;
SR1=SENSOR_3;
if((SL1 < THRESHOLD && SR1 < THRESHOLD) && (SL2 >THRESHOLD || SR2 > THRESHOLD))
{x=x+1;
if(x == 2)
{go(40);
right(85);}
if(x == 4) {go(40);
right(92);}
if(x == 5) //get1
{
go(15)
Off(OUT_A+OUT_C);
down(80);
Off(OUT_B);
back(90);
down(35);
Off(OUT_B);
right(210);
back(80);
}
if(x == 6)
{go(40);
left(95);}
if(x == 8)
{go(40);
left(123);}
if(x == 11)
{go(40);
left(95);}
if(x == 13) //gorl1
{go(40);
left(120);
go(25);
Off(OUT_A+OUT_C);
up(105);
Off(OUT_B);
go(150);
back(60);
right(200);
back(25); }
if(x == 14)
{go(40);
right(85);}
if(x == 16)
{go(40);
right(85);}
if(x == 19)
{go(40);
right(85);}
if(x == 21)
{go(40);
right(92);}
if(x == 22) //get2
{
go(15)
Off(OUT_A+OUT_C);
down(80);
Off(OUT_B);
back(100);
down(35);
Off(OUT_B);
right(210);
back(80);
}
if(x == 23)
{go(40);
left(95);}
if(x == 25)
{go(40);
left(123);}
if(x == 28)
{go(40);
left(95);}
if(x == 30) //gorl2
{go(40);
left(120);
go(20);
Off(OUT_A+OUT_C);
up(105);
Off(OUT_B);
go(150);
back(60);
Off(OUT_A+OUT_C);
}
}
if((SENSOR_1< THRESHOLD)&&(SENSOR_3>THRESHOLD)){ //センサー1が線の上にあるとき
Off(OUT_A+OUT_C);
OnFwd(OUT_C); //左に少し旋回
OnRev(OUT_A);
Wait(4);}
if ((SENSOR_3<THRESHOLD)&&(SENSOR_1>THRESHOLD) ){ //センサー3が線の上にあるとき
Off(OUT_A+OUT_C);
OnFwd(OUT_A); //少し右に旋回
OnRev(OUT_C);
Wait(4);}
else { //どちらのセンサーも線の上になければ
OnFwd(OUT_A+OUT_C);}
if((SENSOR_1< THRESHOLD) && (SENSOR_3< THRESHOLD))
{OnFwd(OUT_A+OUT_C);}
}}
*二台目のロボットのプログラム [#fb561115]
*作成過程/工夫したところ、苦労したところ [#a819d120]
(8月1日(火)夜9時まで)
この日の最初はまだ違う作戦を考えていた。2台のロボットを使ってコース内を半分に分けて走る。ロボット1は実際に使うロボットの構造とほとんど同じで上から缶に覆いかぶさるような構造で、ロボット2は下から缶を担ぐ。作戦は次のようであった。
1、ロボット1がスタート地点から缶の場所へ行き、缶を持ってスタート地点へ戻る。
→2、スタート地点にロボット2が待機して、ロボット1から缶を受け継ぎ、ライントレースでゴールまで運ぶ。
2、スタート地点にロボット2が待機して、ロボット1から缶を受け継ぎ、ライントレースでゴールまで運ぶ。
→これを繰り返す。
しかしこれは、時間がない上にプログラムも長くなる可能性がある。またスタート地点での缶を受け継ぐ2つのロボットの連携が難しいと考えたために断念した。時間も制限されているので、一台で動く方が効率がいいことに気づいた。
(ロボコン当日8月2日(水)朝9時〜ロボコンスタート時間)
結局、前日に2台で運ぶ作戦を断念して、1台で運ぶことになった。そこで、2台目を作り、1台目のサポート役として使うことにした。その作戦は、、
1、ロボット1が真ん中の缶をキャッチして戻ってくる時に、ロボット2がスタート地点の隣にある缶を真ん中へ寄せる。
2、そしてロボット1が1点目を入れて帰って真ん中に移った缶をキャッチ、そして点を入れる。
*反省、感想 [#eb083d29]