#contents
*課題2の説明 [#tcee5136]
#ref(./2015a-mission2.png,50%,図1)
・今回の課題はB地点からA地点(Q交差点では直進、P三叉路では直進)までライントレースすることと、P点とQ点の間におかれた球をゴールまで運びゴールにシュートすることです。
*ロボット [#rabcbcbf]
**ライントレース [#gb9b458d]
・ライントレースをするにあたってロボットに求めるものは~
1.小回りが利く~
2.センサーを取り付ける~
の二点である。~
#ref(./shu-to1.jpg,25%,写真1)
#ref(./shu-to2.jpg,25%,写真2)
**車体 [#y0c57590]
・私たちはボールを発射するために車体の真ん中に棒を通さなければならなかったので少し大きい車体となり小回りが利きずらくなったので、前輪と後輪を寄せることによって小回りが少しでも良くなるようにした。
**ボール運び [#b19e72d7]
・私たちはボールをはさんで運ぶことにした。アームを二本とモーターでクワガタの顎のような装置を作った。そしてシュートもしなくてはならなかったので、顎の間から棒がとび出るようにした。~
#ref(./shu-to3.jpg,25%,写真3)
#ref(./shu-to4.jpg,25%,写真4)
あああ
・モーターが回るとギアが連動して回って、片面がギアとかみ合うブロックに力が伝わりボールを押すことができる。ねじねじのブロックを使うことによって棒が前後に動くのに連動してアームの部分が動くようになっている。アームが動くときに、開きすぎたり閉じすぎたりするのは他の部品によって止まるが、それをしているとひずみができてしまうので、回りすぎると止まるギアを組み込んで解消した。
*プログラミング [#fd974684]
**どのようなプログラムを作るか [#uff7fa22]
・私はまず右と左どちらをトレースしたら楽か考えた。左をトレースした場合交差点が一つで済みカーブもそれほど急ではないので、やりやすそうに思い最初左をトレースしようとしたが最初のL字のところが交差点と認識してしまったので右をトレースすることとした。
**ライントレース [#lb80088b]
・私は五段階に場合分けしてライントレースした。白いときは左に、黒いときは右に行くようにして、ずっと黒いままの時は交差点と考えて少し右に回転してまっすぐ進むようにした。
**ボールを運ぶ [#o3af8525]
・私はボールをQ点の少し先に置いて、最初の交差点に差し掛かった事を合図に先頭部分を閉じてボールをつかむ。そして三回目の交差点の時に飛ばすというプログラムにした。xという値をおいて交差点に入るたびに1ずつ増えるようにし、3以上で違うプログラムが行われるようにした。
**完成 [#h651bc39]
・モーターAは左の車輪、モーターCは右の車輪、モーターBははさむ部分である。
#define threshold 44; //いろんな値の定義
#define set_power_h SetPower(OUT_AC,4);
#define set_power_l SetPower(OUT_C,3);
#define go_forward OnFwd(OUT_AC);
#define turn_left_weak set_power_l;OnFwd(OUT_C);Off(OUT_A);
#define turn_left_strong set_power_h;OnFwd(OUT_C);OnRev(OUT_A);
#define turn_right_weak set_power_l;OnFwd(OUT_A);Off(OUT_C);
#define turn_right_strong set_power_h;OnFwd(OUT_A);OnRev(OUT_C);
#define STEP 1
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
int n=0; //nとxという数を置いて何回目かを数える。
int x=0; //nは連続で暗いと判断した回数。
//xは交差点に差し掛かった回数。
while(true)
{
while(n<5&&x<2) //ずっと暗くなくてかつ交差点を二回経験してない場合
{
while(n<5) //ずっと暗くない場合
{
if(SENSOR_2 < threshold-6) { //センサー2が38より小さいとき右に曲がる
turn_right_strong;
n++;
} else {
if(SENSOR_2 < threshold-2) { //センサー2が40より小さいとき右に曲がる
turn_right_weak;
} else if(SENSOR_2 < threshold+4) { //センサー2が48より4大きいときまっすぐ
go_forward;
} else if(SENSOR_2 < threshold+6) { //センサー2が50より大きいとき左に曲がる
turn_left_weak;
} else {
turn_left_strong; //それ以外の時左に曲がる
}
n=0;
}
Wait(STEP);
}
Off(OUT_AC);Wait(200); //ずっと暗い場合の行動
turn_left_strong;Wait(12);OnFwd(OUT_B);Wait(15);Off(OUT_B);
go_forward;Wait(10);
n=0;x++;
}
Off(OUT_AC);Wait(200); //ずっと暗いかつ交差点三回目の場合
turn_left_strong;Wait(10);
OnRev(OUT_B);Wait(15);Off(OUT_B);
}
}
*感想 [#xb7b8e67]
・今回の課題では前の課題ほどロボットに工夫ができなかったので、プログラミングがうまくいっていてもうまく動いてくれないことが多々あった。次の課題ではプログラムもロボットも満足のいくような物にしたい。