ロボットの紹介

私達の作成したロボット

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

横から見たロボット

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

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

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

コース攻略法

コース1

反時計回り

  • プログラムの切り替えは、時間の経過で行う。
  • まず、最初の交差点をすぎる前までは、交差点なしのライントレースを行う。
  • そこから、交差点ありのライントレースに切り替える。
  • カーブのところは、交差点無しで回る。
  • 2つの交差点を交差点ありのプログラムで越える。
  • 先ほどとは逆方向のカーブができるプログラムで、カーブを抜ける。
  • 交差点を、交差点ありのもので抜ける。
  • そのまま進んでいき、直角をお曲がる。
  • 直角を曲がったあと、Uターンして、缶を置く動作を行う。
  • Uターンで戻って、ライントレースして、ゴールまで行く。

プログラムの説明

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

#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 117件 [詳細] fileline1.jpg 109件 [詳細] filerobo6.jpeg 117件 [詳細] filerobo5.jpeg 118件 [詳細] filerobo1.jpeg 128件 [詳細]

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