- 追加された行はこの色です。
- 削除された行はこの色です。
*ロボットの紹介 [#y20b66da]
+このロボットは見た目は普通でもきっとやるときはやる子です。
+できるだけ小さくすることを目指し作りました。
+缶を挟むアームはひとつだとバランスが悪くなり、缶が倒れることも多いのでアームをふたつにしました。
*コース攻略法 [#d4dffbe8]
+最初はタッチセンサーで缶をつかもうと思ったが、缶が軽すぎセンサーが反応しなかったので、タイマーを使い全てを時間で区切って操作しようとした。
+交差点を通過するプログラムだけでは、急なカーブをうまく曲がる事ができないことも多かったので、細かく時間を区切り通常のライントレース、急なカーブを曲がるライントレース、交差点を通過するプログラムを作った。
+最後の缶を置く部分もタイマーを使い攻略する。
*プログラムの説明 [#lfa418c3]
#define THRESHOLD 35 //しきい値
#define HIPOWER 7
#define LOWPOWER 1
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define go_forward1 set_power_H;OnFwd(OUT_AC);
#define go_forward2 set_power_L;OnFwd(OUT_AC);
#define turn_left1 set_power_L;\
OnFwd(OUT_C);OnRev(OUT_A); //左旋回
#define turn_left0 set_power_L;\
OnFwd(OUT_C);Off(OUT_A); //左回り
#define turn_right0 set_power_L;\
OnFwd(OUT_A);Off(OUT_C); //右回り
#define turn_right1 set_power_L;\
OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define moter set_power_L;OnFwd(OUT_B);
#define STEP 1
#define nMAX 3
#define short_break Off(OUT_AC);Wait(10);
#define CROSS_TIME 30
#define cross_line go_forward1;\
Wait(CROSS_TIME);short_break
#define time0 400
#define time1 1800
#define time2 2200
#define time3 3300
#define time4 3700
#define time5 4600
#define time6 4900
#define time7 6000
sub line_trace1() //普通のライントレース
{
if (SENSOR_2 < THRESHOLD -6) {
turn_left0;
} else
if (SENSOR_2 < THRESHOLD -3) {
turn_left1;
} else if (SENSOR_2 < THRESHOLD +3) {
go_forward1;
} else if (SENSOR_2 < THRESHOLD +7) {
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
}
sub line_trace2() //急な回転のライントレース
{
if (SENSOR_2 < THRESHOLD -1) {
if (SENSOR_2 < THRESHOLD -3) {
turn_left1;
} else
if (SENSOR_2 < THRESHOLD +3) {
turn_right1;
} else {
go_forward1;
}
Wait(STEP);
}
sub line_cross() //交差点を通過
{
int nOnline=0;
while(nOnline < nMAX){
if (SENSOR_2 < THRESHOLD -6) {
turn_left1;
nOnline++;
} else {
if (SENSOR_2 < THRESHOLD -3) {
turn_left0;
} else if (SENSOR_2 < THRESHOLD +3) {
go_forward1;
} else if (SENSOR_2 < THRESHOLD +7) {
turn_right0;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1;Wait(nMAX*STEP*10);
cross_line;
nOnline=0;
}
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
go_forward1;Wait(35);
turn_left1;Wait(100);
while(FastTimer(0) <= time0) {
line_trace1(); //普通のライントレース
}
moter;Wait(50);
while(FastTimer(0) <= time1) {
line_trace1(); //普通のライントレース
}
PlaySound(SOUND_UP);
while(FastTimer(0) <= time2) {
line_cross();
}
PlaySound(SOUND_UP);
while(FastTimer(0) <= time3) {
line_trace2(); //急な回転のライントレース
}
PlaySound(SOUND_UP);
while(FastTimer(0) <= time4) {
line_cross();
}
PlaySound(SOUND_UP);
while(FastTimer(0) <= time5) {
line_trace2(); //急な回転のライントレース
}
PlaySound(SOUND_UP);
while(FastTimer(0) <= time6) {
line_cross();
}
PlaySound(SOUND_UP);
while(FastTimer(0) <= time7) {
line_trace1(); //普通のライントレース
}
PlaySound(SOUND_UP);
turn_right1;Wait(100); //缶を放す動作
go_forward1;Wait(100);
turn_left1;Wait(200);
OnRev(OUT_B);Wait(50);Off(OUT_B);
OnRev(OUT_AC);Wait(100);
while(true){
line_trace2();
}
}
*まとめ [#ja9e4202]
+缶が軽すぎてタッチセンサーが反応せず苦労した。
+時間で細かく区切ってやろうとしたので、ちょうどいい時間を指定するのが難しかった。
+最終的に缶を指定の位置に置きゴールすることはできなっかたが、今回の失敗から学ぶことも多かった。
+課題2では今回のことを踏まえ、4人で協力しクリアしたい。