ロボットの紹介

私達の作成したロボット

まず、カーブをスムーズに回れるように、ロボットの幅をできるだけ狭くした。その時に特に注意した点は、左右の車輪をうまく固定できるようにしたことである。そして、今回は、缶を運ぶという動作をしなければならなかったので、缶をはさむための部品とモーターが必要であった。そのため、車体の前方にその2つと、光センサー、タッチセンサーを共に取り付けたので、前方が重くなってしまい、車体が前に倒れこむ形になってしまった。

横から見たロボット

それを防ぐために、うまくバランスが取れるよう、後ろに大きな車輪を取り付け、おもり代わりにした。結果、走行の際に、車体が揺れながら走る形になったが、前や後ろなどに車体が倒れることはなくなった。

上から見たロボット
正面から見たロボット

缶をはさむ、鋏の部分について、左右一本ずつでは安定しないので、二本ずつに増やした。また、缶が滑り落ちるのを防ぐため、鋏の先端に小さな車輪を取り付け、滑り止めの代わりとした。これで、缶が滑り落ちることはなくなった。

コース攻略法

コース1

反時計回り

プログラムの説明

以下のプログラムは、動作確認はしたものの、少々不安な点が残るようなものである。 

#define THRESHOLD 42 // しきい値の設定を行った
#define HIPOWER 5 //モーターを強く回した時の、モーターのパワーの大きさ(主に直進の時に使う)
#define LOWPOWER 1 //モーターを弱く回した時の、モーターのパワーの大きさ(カーブの時に使う。カーブはゆっくり進まないと、ラインからはみ出てしまうため)
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define go_forward set_power_H; OnFwd(OUT_AC);前進
#define turn_left1 set_power_L; OnRev(OUT_A); OnFwd(OUT_C);左折(曲がりの程度が大きい)
#define turn_left0 set_power_L; Off(OUT_A); OnFwd(OUT_C);左折(曲がりの程度が小さい)
#define turn_right1 set_power_L; OnFwd(OUT_A); OnRev(OUT_C);右折(曲がりの程度が大きい)
#define turn_right0 set_power_L; OnFwd(OUT_A); Off(OUT_C);右折(曲がりの程度が小さい)
#define STEP 1
#define nMAX 3
#define short_break Off(OUT_AC); Wait(10);
#define cross_time 20 //交差点を曲がる際に進む時間
#define cross_line go_forward set_power_H; OnFwd(OUT_AC); Wait(cross_time); short_break; //交差点を渡る
#define time1 800
#define time2 3400
#define time3 900
#define time4 800
#define time5 1400
#define time6 4200
上の6つの時間は、それぞれプログラムの切り替えを行うタイミングの時間である

task main() {
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetSensor(SENSOR_1, SENSOR_TOUCH);
ClearTimer(0);
int counter=0;
int nOnline=0;

if (SENSOR_1 == 0){
OnFwd(OUT_B);
} 


while(FastTimer(0) <= time1){
if (SENSOR_1 == 1){
OnRev(OUT_B);
}
if  (SENSOR_2 < THRESHOLD -4){
turn_right1;
} else if (SENSOR_2 < THRESHOLD -3){
turn_right0;
} else if (SENSOR_2 < THRESHOLD +0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_left0;
} else {
turn_left1;
}
Wait(STEP);
}

PlaySound(SOUND_CLICK);

while(counter < 1){
 while(nOnline < nMAX){
  if (SENSOR_2 < THRESHOLD -4){
   turn_right1;
   nOnline++;
  } else {
   if (SENSOR_2 < THRESHOLD -3){
    turn_right0;
   } else if (SENSOR_2 <THRESHOLD -0){
    go_forward;
  } else if (SENSOR_2 < THRESHOLD +2){
   turn_left0;
  } else {
   turn_left1;
  }
  nOnline=0;
  }
Wait(STEP);
}
short_break;
turn_right1; Wait(nMAX*STEP);
cross_line;
PlaySound(SOUND_UP);
nOnline=0;
counter++;
} 
PlaySound(SOUND_CLICK);


ClearTimer(0);

while(FastTimer(0) < time3){
if (SENSOR_2 < THRESHOLD -4){
turn_right1;
} else if (SENSOR_2 < THRESHOLD -3){
turn_right0;
} else if (SENSOR_2 < THRESHOLD +0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_left0;
} else {
turn_right1;
}
Wait(STEP);
}

couter=0;

while(counter < 3){
   while(nOnline < nMAX){
   if (SENSOR_2 < THRESHOLD -4){
   turn_right1;
   nOnline++;
   } else {
   if (SENSOR_2 < THRESHOLD -3){
   turn_right0;
   } else if (SENSOR_2 < THRESHOLD -0){
   go_forward;
   } else if (SENSOR_2 < THRESHOLD +2){
   turn_left0;
   } else {
   turn_left1;
    }
   nOnline=0;
    }
   Wait(STEP);
    }
   short_break;
   turn_right; Wait(nMAX*STEP);
   cross_line;
   PlaySound(SOUND_UP);
   nOnline=0;
   counter++;
   }

PlaySound(SOUND_CLICK);


ClearTimer(0);

while(FastTimer(0) <= time5){
if (SENSOR_1 == 1){
OnRev(OUT_B);
}
if (SENSOR_2 < THRESHOLD -4){
turn_right1;
} else if (SENSOR_2 < THRESHOLD -3){
turn_right0;
} else if (SENSOR_2 < THRESHOLD +0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_left0;
} else {
turn_left1;
}
Wait(STEP);
}

PlaySound(SOUND_CLICK);

counter=0;


while(counter < 1){
 while(nOnline < nMAX){
  if (SENSOR_2 < THRESHOLD -4){
   turn_left1;
   nOnline++;
  } else {
   if (SENSOR_2 < THRESHOLD -3){
    turn_left0;
  } else if (SENSOR_2 < THRESHOLD -0){
   go_forwrd;
  } else if (SENSOR_2 < THRESHOLD +2){
   turn_right0;
  } else {
   turn_right1;
  }
  nOnline=0;
 }
Wait(STEP);
}
OnRev(OUT_B);

OnRev(OUT_A);
OnFwd(OUT_C);
Wait(400);

Off(OUT_AC);
OnFwd(OUT_AC);
Wait(200);
OnFwd(OUT_B);
Off(OUT_AC);
Wait(100);
OnRev(OUT_C);
OnFwd(OUT_A);
Wait(400);

while(true){
if (SENSOR_2 < THRESHOLD -4){
turn_left1;
} else if (SENSOR_2 < THRESHOLD -3){
turn_left0;
} else if (SENSOR_2 < THRESHOLD +0){
go_forward;
} else if (SENSOR_2 < THRESHOLD +2){
turn_right0;
} else {
turn_right1;
}
Wait(STEP);
counter++;
}


PlaySound(SOUND_CLICK);
}
}  

まとめ

最初思っていた以上に、プログラムを作ることが難しかった。せっかく作ってもロボットが思っていたような動きをしてくれなかったりして、うまくは行かなかった。ロボットが正常に動くように組み立てる面では、なかなかうまくまとめられたと思う。とりあえず、苦労した点は、場所によって、明るさや、スピードが変わってきてしまう点だと思った。そのたびに値を調整しなければならなかったので、苦労したと思う。プログラムの上手な作り方がなかなか分からず、パートナーに教わってばかりだった。次に行うときは、しっかりと理解しつつ取り組みたいと思った。完全に今回の課題をクリアできなかったので、残念だと思った。


添付ファイル: filerobo2.jpeg 216件 [詳細] fileline1.jpg 221件 [詳細] filerobo6.jpeg 217件 [詳細] filerobo5.jpeg 241件 [詳細] filerobo1.jpeg 230件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-07-26 (金) 03:55:27