- 追加された行はこの色です。
- 削除された行はこの色です。
[[2016a/Member]]
目次
#contents
*ロボット本体 [#x5cd2b28]
こちらが本体です。ロボットの中心にセンサーを付けました。中心にセンサーを付けることによって小回りが聞くようにしました。
#ref(2016a/Member/ko/Mission1
こちらが本体です。ロボットの中心にセンサーを付けました。中心にセンサーを付けることによって小回りがきくようにしました。前はタイヤではなく滑っていくようにしました。
#ref(2016a/Member/ko/Mission2/image1(8).JPG,30%,robo)
#ref(2016a/Member/ko/Mission2/image2(6).JPG,30%,robo2)
*コース [#g78072d9]
#ref(2016a/Member/ko/Mission1
#ref(2016a/Member/ko/Mission2/2016a-mission2.png,100%,kosu)
私のコースはC地点 → S左折 → P左折 → Q直進 → Q直進 → R右折 → P左折 → A地点です。
*プログラム [#w893fe4e]
**定義 [#pc1528bf]
/* 交差点判定を無効化する時間:3秒 */
#define sterttime 300
/* 交差点かどうか判定する時間:220ミリ秒 */
#define crosstime 22
/* 前進 */
#define fwd(OUT) Off(OUT);OnFwd(OUT)
#define TURNLEFT OnFwd(OUT_C); OnRev(OUT_A); // 左回転
/* 左回転 */
#define TURNLEFT rev(OUT_A);fwd(OUT_C)
#define LEFT Off(OUT_A);OnFwd(OUT_C);// 右回転
/* 左旋回 */
#define LEFT Off(OUT_A);fwd(OUT_C)
/* 右回転 */
#define TURNRIGHT rev(OUT_C);fwd(OUT_A)
#define TURNRIGHT OnFwd(OUT_A); OnRev(OUT_C);// 右回転
/* 右旋回 */
#define RIGHT Off(OUT_C);fwd(OUT_A)
#define RIGHT Off(OUT_C);OnFwd(OUT_A)// 右旋回
/* 直進 */
#define STRAIGHT fwd(OUT_AC)
#define STEP 1
#define STRAIGHT Onfwd(OUT_AC) // 直進
**サブルーチン [#e3985a07]
sub trace(){
/* 交差点判定用のタイマをリセットする(ここから計測を始める) */
ClearTimer(0);
while(FastTimer(0)){
/* 交差点判定を無効化している間は判定用のタイマをリセットし続ける */
if(FastTimer(0) <36 ){
ClearTimer(0);
}
黒い線の左側をたどる
sub trace(){
ClearTimer(0);// 交差点判定用のタイマをリセットする。ここから計測を始める
while(FastTimer(0)<50)
// 黒の判定が0.5秒を超えたら交差点と判定する。
if(54 <= SENSOR_2){ //白
TURNRIGHT;
}else if(51 <= SENSOR_2) { //少し白
RIGHT;
}else if(46 <= SENSOR_2) { //灰色
STRAIGHT;
}else if(43 <= SENSOR_2) { // 少し黒
LEFT;
}else { //黒
}else { //黒
TURNLEFT;
}
/* 白を認識した場合、交差点判定用のタイマをリセットする */
// 白を認識した場合、交差点判定用のタイマをリセットする
if(44 <= SENSOR_2) ClearTimer(0);
}
}
Off(OUT_AC);
PlaySound(SOUND_UP);
Wait(100);//一秒間停止する
ClearTimer(0);
PlaySound(SOUND_UP);//音を鳴らす
Wait(100);//一秒間停止する
ClearTimer(0);
}
sub go_straight(){
交差点を直進
sub go_straight()
{
STRAIGHT;
Wait(30);
}
sub turn_left(){
while(FastTimer(0)<160){
交差点を左折
sub turn_left()
{
while(FastTimer(0)<160){
LEFT ;
} ClearTimer(0);
}
sub turn_right(){
while(FastTimer(0)<100){
}
ClearTimer(0);
}
交差点を右折
sub turn_right()
{
while(FastTimer(0)<100){
RIGHT;
} ClearTimer(0);
}
ClearTimer(0);
}
**本文 [#sd8c22fa]
task main(){
/* センサを用意 */
SetSensor(SENSOR_2,SENSOR_LIGHT);
task main(){
/* 三秒間交差点判定を無効化 */
ClearTimer(0);
SetSensor(SENSOR_2,SENSOR_LIGHT);// センサを用意
ClearTimer(0);// 三秒間交差点判定を無効化
trace();
/* 一つ目の交差点: 左折 */
turn_left();
turn_left();// 一つ目の交差点: 左折
trace();
/* 二つ目の交差点: 左折 */
turn_left();
turn_left();// 二つ目の交差点: 左折
trace();
/* 三つ目の交差点: 直進 */
go_straight();
go_straight();// 三つ目の交差点: 直進
trace();
/* 四つ目の交差点: 左折 */
go_straight();
go_straight();// 四つ目の交差点: 左折
trace();
/* 五つ目の交差点: 右折 */
turn_right();
turn_right();// 五つ目の交差点: 右折
trace();
/* 六つ目の交差点: 左折 */
turn_left();
turn_left();// 六つ目の交差点: 左折
trace();
}
サブを使ったのでメインは簡潔にはなりました。しかし、急なカーブを交差点と認識してしまうことがありました。急なカーブのところを違うサブルーチンを使ったり、そこだけを交差点判定を無効化したりできたがエラーに苦しみ思うようにできませんでした。
*反省・感想 [#wf5903fa]
成功率はそれはど高くありませんでした。急なカーブが一番難しく、交差点と判断してしまいました。関数や、サブを十分に使いこなせていなかったのが原因の一つだと思います。次の課題はもっと難しい課題になると思うので早めに
理解できるようにしたいです。