- 追加された行はこの色です。
- 削除された行はこの色です。
[[2008b]]
*ライントレースロボット(黒い線に沿って動くロボット)の作成 [#i9078868]
各チームで作成したコースに沿って動くロボットを作成する。ただし、
-速さと正確さを追求すること
-交差点で優先側を走っていない場合には、一時停止すること
-前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つこと
-コースを2周したら自動的に止まること
**目次 [#a45ea9ef]
#contents
**方針 [#z018e9bc]
**コース [#pedac8b4]
交差点は全部で4つ。きついカーブをおりまぜた難易度やや高めのコースを作成した。
&ref(2008b/A5/課題2右/081202_203355.jpg,100%,course);
**ロボット [#l5d74869]
タッチセンサー1つ、光センサー2つを使用した。
-基礎部分 この課題では小回りが利くことが求められるため、3輪駆動を採用した。
-光センサ ライントレースをするのに必要。今回は2つの光センサを使用した。
-タッチセンサ ほかのロボットとの衝突などを想定してバンパーを搭載。今回、シングルバンパーを採用したため、タッチセンサは1つだけ使用した。
**プログラム [#w0477c1d]
#define THRESHOLD 40
#define THRESHOLD 40 //閾値を40に設定
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);
SetSensor(SENSOR_3, SENSOR_LIGHT);
SetSensor(SENSOR_1, SENSOR_LIGHT); //センサ1が光センサであると宣言
SetSensor(SENSOR_2,SENSOR_TOUCH); //センサ2がタッチセンサであると宣言
SetSensor(SENSOR_3, SENSOR_LIGHT); //センサ3が光センサであると宣言
int count;
count=0;
int count_max=8;
while(true) {
until(count>=count_max){ //停止した回数が8回になるまで繰り返す
until(count>=count_max){ //(※)の回数が8回になるまで以下の命令を繰り返す
if (SENSOR_1<THRESHOLD) {
OnRev(OUT_A);
OnFwd(OUT_C);
} //左の光センサーが反応したら左に曲がる
} //センサ1が閾値よりも小さな値を示す、すなわち左の光センサが黒いラインを感知したら左に曲がる
if(SENSOR_3 <THRESHOLD){
OnRev(OUT_C);
OnFwd(OUT_A);
} //右の光センサーが反応したら右に曲がる
} //センサ3が閾値よりも小さな値を示す、すなわち右の光センサが黒いラインを感知したら右に曲がる
if((SENSOR_1 <THRESHOLD)&&(SENSOR_3 <THRESHOLD)){
Off(OUT_A+OUT_C);
Wait(100);
OnFwd(OUT_A+OUT_C);Wait(50);count=count+1;} //両側の光センサーが反応したら1秒間止まってから再び前進する
OnFwd(OUT_A+OUT_C);Wait(50);count=count+1;} //センサ1とセンサ3が閾値よりも小さな値を示す、
すなわち両側の光センサが黒いライン(交差点)を感知したら一時停止した後しばらく前進する・・・・・・・(※)
if(SENSOR_2==1){
OnRev(OUT_A+OUT_C) ; Wait(50);
Off(OUT_A+OUT_C); Wait(150);
OnFwd(OUT_A+OUT_C) ;Wait(50);} //バンパーにぶつかったら後退する
OnFwd(OUT_A+OUT_C) ;Wait(50);} //タッチセンサが反応、すなわちバンパーに何かがぶつかったら後退し、少し待ってから再び前進する
else {
OnFwd(OUT_A+OUT_C);}} //上記以外は前進する
Off(OUT_A+OUT_C);} //停止した回数が8回になったら止まる
OnFwd(OUT_A+OUT_C);}} //上記以外は前進する
Off(OUT_A+OUT_C);} //(※)の回数が8回になったら止まる
}
**その後の改良 [#i38dcfe8]
**反省&感想 [#c42ede4b]
コメントをどうぞ
#comment