*はじめに [#rd058258]
今回の課題は、ライントレースをするロボットの作成である。
詳しい内容は、次のいずれかの経路を黒い線にそって動くロボットを作成する (他のメンバーとは別の経路になるようにする
-A地点からB地点へ (P三叉路およびQ交差点はともに直進)
-B地点からA地点へ (Q交差点では直進、P三叉路では直進)
-C地点からA地点へ (Q交差点では直進、P三叉路では右折)
そして、途中(P地点とQ地点)の間においたボール(ピンポン玉またはNXT付属のボール)を 目的地まで運んで、ゴールに入れる。その途中、三叉路および交差点では2秒間停止すること。
可能であれば、A,B,Cのそれぞれにエリアに入る三叉路付近からボールをシュートする。
#ref(2015a/Member/youkosobarbonshophe/Mission2/2015a-mission2.png)
私はB地点からA地点への経路を選んだ。
*ロボットの説明 [#q9d9fdb3]
本体の前に回転する2本のつめがついた構造
右側のタイヤと左側のタイヤを動かすのにそれぞれ1つずつモーターを使った。
また、前後のタイヤ間の距離を近くすることで方向転換しやすいようにした。
接続は
A-左側のタイヤ OnFwdで前進
B-つめ OnFwdでボールをつかむ方に回転
C-右側のタイヤ OnFwdで前進
#ref(2015a/Member/youkosobarbonshophe/Mission2/IMG_2251.JPG,30%)
*ボール回収部分の説明 [#we104e71]
本体の前についた「つめ」を回転させ続け、かごのなかに入ってきたボールを、つめと本体ではさみ、運ぶ仕組みである。
ただ、この仕組みの場合ボールをつかんだ後も、つめは回転し続けるので、モーターに負荷がかからないように途中のギアをゴムにした。
ギア比を小さくしてつめの回転速度を調節した。
ボールをシュートするときは、つめを逆回転させると1周してきたつめで押し出すことによってできる。
#ref(2015a/Member/youkosobarbonshophe/Mission2/IMG_2250.JPG,30%)
*プログラミングの説明 [#ff326e26]
**定義 [#d10b4355]
#define THRESHHOLD 45
#define go_straight OnFwd(OUT_AC);
#define turn_left1 OnFwd(OUT_C);OnRev(OUT_A);//左に曲がる
#define turn_right1 OnFwd(OUT_A);OnRev(OUT_C);//右に曲がる
#define nMAX 26
#define short_break Off(OUT_AC);Wait(200);//2秒間止まる
#define cross_time 30//交差点を渡る時間
#define cross OnFwd(OUT_AC);Wait(cross_time);short_break;//交差点を渡る
**プログラミング [#e2ca9272]
task main()
{
int nOnline=0;
OnFwd(OUT_ABC);
Wait(100);
Off(OUT_AC);//Bの範囲から出る
**Pの交差点まで [#o9959620]
while(nOnline<nMAX){
if(SENSOR_2<THRESHHOLD-2){//黒の線上に入ったら
turn_right1;//右に曲がる
nOnline++;
}else if(SENSOR_2>THRESHHOLD+2){//白の範囲に入ったら
turn_left1;//左に曲がる
nOnline=0;
}else{//それ以外のときは
go_straight;まっすぐ進む
}
Wait(1);
}
short_break;//小休止
turn_left1;
Wait(90);
cross//交差点を渡る
nOnline=0;
while(nOnline<nMAX){
if(SENSOR_2<THRESHHOLD-2){//黒の線上に入ったら
turn_right1;//右に曲がる
nOnline++;
}else if(SENSOR_2>THRESHHOLD+2){//白の範囲に入ったら
turn_left1;//左に曲がる
nOnline=0;
}else{それ以外のときは
go_straight;まっすぐ進む
}
Wait(1);
}
Off(OUT_B);//つめの回転を止める
nOnline=0;
**Aの範囲まで [#eb29e854]
repeat(2){//2回繰り返す
while(nOnline<nMAX){
if(SENSOR_2<THRESHHOLD-2){//黒の線上に入ったら
turn_right1;右に曲がる
nOnline++;
}else if(SENSOR_2>THRESHHOLD+2){//白の範囲に入ったら
turn_left1;//左に曲がる
nOnline=0;
}else{//それ以外のときは
go_straight;まっすぐ進む
}
Wait(1);
}
short_break;//小休止
turn_left1;//左に曲がる
Wait(70);
cross//交差点を渡る
nOnline=0;
}
**シュートする [#ab3d761a]
OnRev(OUT_B);//つめを逆回転する
OnFwd(OUT_AC);//Aの範囲の中に入る
Wait(30);
Off(OUT_AC);
Wait(220);//シュートする
Off(OUT_B);
}
*感想・反省 [#re1bde10]
赤外線センサーの位置を回転の中心近くにしたことで、交差点とそうでないとこの判断が難しくなってしまった。
また、ボール回収部分をつめが回転し続ける方法をとったことで、タイミングが悪いと、つめがボールをはじいてしまったりして、成功する確率はあまり高くなかった。
ただ、シュートに関してはつめで押し出せるので、うまくできてよかった。