[[2016a/Member]]
目次
#contents
*はじめに [#p359eff2]
今回の課題は、ロボットに光センサーを取り付け、紙に書いた線のうちの決められたコースをロボットが走れるようにする、というものだった。
ただライントレースをさせるだけでなく、なるべく速く正確に動くロボットになるように工夫して、交差点では1秒間停止することが課題となってくる。
僕は画像のBコースを担当した。
#ref(ロボティクスコース.png)
*ロボット本体の説明 [#g5c2c820]
画像のように、ロボット本体の前方に光センサーを取り付けた。
他に特筆することは無い。
#ref(ロボ本体.JPG)
*プログラムの説明 [#r352a901]
定義
#define THRESHOLD 53
#define SPEED_H 40 // 直線用のスピード
#define SPEED_L 20 // カーブのスピード
#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 260 // 通常のカーブとして許容できる繰り返しの最大値 (調整する)
#define short_break Off(OUT_BC); Wait(1000); // 小休止
#define CROSS_TIME 400 // 交差点通過にかかる時間
/* 交差点を渡る */
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break;
メイン
task main()
{
SetSensorLight(S1);
Long t0 = CurrentTick();
int nOnline=0; // 続けて黒になった回数 (カウンタ)
0〜1000s(交差点で右折)
while (CurrentTick()-t0 <= 1000) {
while (nOnline < nMAX) {
if (SENSOR_1 < THRESHOLD-15) {
turn_right1;
nOnline++; // カウンタを増やす
} else {
if (SENSOR_1 < THRESHOLD-10) {
turn_right0;
} else if (SENSOR_1 < THRESHOLD) {
go_forward;
} else if (SENSOR_1 < THRESHOLD+6) {
turn_left0;
} else {
turn_left1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP);
}
short_break; // 小休憩
PlaySound(SOUND_UP);
turn_right1; // 右折
nOnline=0; //カウンタをリセット
}
1000〜20000s(交差点で直進)
while (CurrentTick()-t0 <= 20000) {
while (nOnline < nMAX) {
if (SENSOR_1 < THRESHOLD-15) {
turn_right1;
nOnline++; // カウンタを増やす
} else {
if (SENSOR_1 < THRESHOLD-10) {
turn_right0;
} else if (SENSOR_1 < THRESHOLD) {
go_forward;
} else if (SENSOR_1 < THRESHOLD+6) {
turn_left0;
} else {
turn_left1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP);
}
short_break; // 小休憩
PlaySound(SOUND_UP);
turn_left1; Wait(nMAX*STEP); // 進行方向修正
cross_line; // 交差点を渡る
nOnline=0; //カウンタをリセット
20000〜55000s(交差点で右折)
while (CurrentTick()-t0 <= 55000) {
while (nOnline < nMAX) {
if (SENSOR_1 < THRESHOLD-15) {
turn_right1;
nOnline++; // カウンタを増やす
} else {
if (SENSOR_1 < THRESHOLD-10) {
turn_right0;
} else if (SENSOR_1 < THRESHOLD) {
go_forward;
} else if (SENSOR_1 < THRESHOLD+6) {
turn_left0;
} else {
turn_left1;
}
nOnline=0; // カウンタをリセット
}
Wait(STEP);
}
short_break; // 小休憩
PlaySound(SOUND_UP);
turn_right1; // 右折
nOnline=0; //カウンタをリセット
}
車庫入れ
turn_left1;
Wait(500);
go_foward;
Wait(1400)
Off(OUT_BC);
}
*苦労した点 [#j0325639]
時間で交差点での対応を変えるプログラムにしたから、とにかく調節が大変だった。
nMAXや交差点の通過時間も微調整が必要で、そこにかなり時間を取られた。
ロボットが図の赤丸の部分を安定して交差点と認識せず、スピードを調節して認識できるようにするのにかなり苦労した。
#ref(2016a-mission2.png)
*感想 [#x58ca83b]
何回も試行錯誤を繰り返してやっと完成したから、達成感がすごかった。
次の課題は2班が協力して行うから、積極的に班に貢献していきたい。