[[2013a/Member]]
*ロボット紹介 [#q0459556]
#ref(2013a/Member/kinako/Mission1/CIMG1069.JPG,100%,ロボット)
-光センサーが、本体が回転すると大きく動くように工夫した。
-ぐらぐらしないようにしっかり固定した。
-缶を運ぶために、開閉式のアームをつけた。
-なるべくシンプルに作った。
*コース攻略法 [#t05743d6]
-線の左側に沿うように動くようにして、コースを一周できるようにした。
-タッチセンサーが缶に触れている間はアームが閉じるようにしたかった。
*プログラムの説明 [#qa18ce2c]
#define BLACK_01 34
#define BLACK_02 40
#define WHITE_01 50
#define WHITE_02 56
#define SPEED_H 60
#define SPEED_L 30
#define OnRL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd(OUT_C,speedL);
#define go_forward OnRL(SPEED_L,SPEED_L);
#define turn_right OnRev(OUT_A,SPEED_L);OnFwd(OUT_C,SPEED_L);
#define turn_left OnFwd(OUT_A,SPEED_L);OnRev(OUT_C,SPEED_L);
#define right Off(OUT_A);OnFwd(OUT_C,SPEED_L);
#define left OnFwd(OUT_A,SPEED_L);Off(OUT_C);
#define STEP 1
#define nMAX 150
#define short_break Off(OUT_AC);Wait(1000);
#define CROSS_TIME 200
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(300);short_break;
task main()
{
OnFwd(OUT_AC,50);
Wait(500);
right;
Wait(1700);
↑ここで、最初のT字路を左に曲がる。
SetSensorLight(S1);
int nOnline=0;
int count=0;
while (true) {
while (count < 3) {
while (nOnline < nMAX) {
if (SENSOR_1<BLACK_01) {turn_right;nOnline++;}
else {
if (SENSOR_1<BLACK_02) {right;nOnline++;}
else if (SENSOR_1<WHITE_01) {go_forward;}
else if (SENSOR_1<WHITE_02) {left;}
else {turn_left;}
↑ここの敷居値の設定は、黒線を光センサーを使って測定した結果、中央では26、端では60くらいであったため、
[〜34]右旋回
[34〜40]右折
[40〜50]直進
[50〜56]左折
[56〜]左旋回
という設定にした。この値は、なるべく滑らかに動くようにするため、直進する値の幅を大きくするようにした。
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_left;
Wait(150);
cross_line;
nOnline=0;
count++;
}}
↑ここで、交差点と判断された回数が3回になったら、次のプログラムに移るように設定した。3回という回数は、最後にT字路に差し掛かった時にちょうど交差点判断が3回目になったためにこの値に設定した。
turn_right;
Wait(300);
go_forward;
Wait(500);
Off(OUT_AC);
↑ここで、最後のT字路を左に曲がる。
}
*まとめ [#fea32eb1]
今回は、完成させることができなかったがいろんなことを経験し、そして、試行錯誤できた。なるべく線上を滑らかに動くようには工夫したが、缶をつかんで運び、そして離すという動作はうまくできなかったのが残念だ。次回からはもっと深く考えて、最後には解決できるようにしたい。