- 追加された行はこの色です。
- 削除された行はこの色です。
[[2015a/Member]]
*はじめに [#x9eca22c]
今回の課題は、課題の最後までロボットを動かせませんでした。
*課題について [#df440be5]
下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成せよ。
#ref(./2015a-mission2.png,50%)
私はC→Aの担当をした。
*ロボットについて [#k6511b96]
*プログラム [#t129c874]
**光をたどる [#g81cbe0a]
まず、黒と白の境目をたどるようにした。
#define THRESHOLD 45
#define SPEED 30
#define turn_left OnFwd(OUT_B,SPEED);Off(OUT_C);
#define turn_right Off(OUT_B);OnFwd(OUT_C,SPEED);
#define STEP 5
#define SPEED_H 30
#define SPEED_L 25
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
#define go_forward OnRL(SPEED_H, SPEED_H);
#define turn_left1 OnRL(SPEED_L, -SPEED_L); // 左旋回
#define turn_left0 OnRL(SPEED_L, 0); // 左折
#define turn_right0 OnRL(0, SPEED_L); // 右折
#define turn_right1 OnRL(-SPEED_L, SPEED_L); // 右旋回
#define STEP 1 // 1回の判断で動作させる時間
#define nMAX 200 // 通常のカーブとして許容できる繰り返しの最大値 (調整する)
#define short_break Off(OUT_BC); Wait(1000); // 小休止
#define CROSS_TIME 100 // 交差点通過にかかる時間
/* 交差点を渡る */
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break;
#define armdown OnFwd(OUT_A,50);Wait(500);Off(OUT_A);Wait(300); //アームを降ろす
task main()
{
SetSensorLight(S3);
while(true){
if(SENSOR_3<THRESHOLD){
turn_left;
}else{
turn_right;
SetSensorLight(S3);
int nOnline=0; // 続けて黒になった回数 (カウンタ)
while (true) {
/* 黒を続けてnMAX回繰り返さない間、通常のライントレースをする */
while (nOnline < nMAX) {
if (SENSOR_3 < THRESHOLD-15){
turn_left1;
nOnline++; // カウンタを増やす
} else {
if (SENSOR_3 < THRESHOLD-7){
turn_left0;
} else if (SENSOR_3 < THRESHOLD+7){
go_forward;
} else if (SENSOR_3 < THRESHOLD+15){
turn_right0;
} else {
turn_right1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP);
}
Wait(STEP);
}
short_break; // 小休憩
turn_right1; Wait(nMAX*STEP); // 進行方向修正
cross_line; // 交差点を渡る
nOnline=0; //カウンタをリセット
}
}
*まとめ・反省 [#le0f139d]
まず、どのプログラムがどのような指示をしているのかを理解するのに時間がかかり、最後までうまくいきませんでした。交差点は何とか渡れるようになりましたが、次の段階のボールをつかみ、運んでシュートするところまではできませんでした。くわしくいうと、ボールをつかむプログラム自体はできたのですが、プログラムにうまく盛り込めませんでした。
次回の課題はこの課題2の延長のようなので、それまでに理解できるところまではせめて理解しようと思います。