[[2016a/Member]]
*課題 [#m861cd37]
~&ref(./2016a-mission2.png);
~3つあるコースのうち、指定された1つのコースを選び、ロボットを作って走らせる。私は、B地点からC地点までのコースを選びました。
*機体の解説 [#a60e0a75]
~●全体像
~&ref(./index2.jpeg);
~機体はなるべく小さくし、曲がる動作がしやすくなるなど、スムーズな動作をしやすくした。
~●上面
~&ref(./index.jpeg);
~円運動のように、車輪が中央のセンサーより距離が遠いほど揺れが大きくなってしまい、センサーが誤った判断をしやすいので、車輪の間隔を小さくした、なるべく揺れの少ない構造をとった。
~●真正面
~&ref(./index3.jpeg);
~センサーを電源の2番に取り付け、左車輪をA、右車輪をCに取り付けた。
~●底
~&ref(./index4.jpeg);
~摩擦の少ないタイヤを前方に取り付け、滑りやすい支えを後方に1つ取り付け、左右に動きやすくした。
*プログラム解説1【内部システム】 [#d33c658f]
~●線上を走るときのプログラムは、
~白 → 右旋回(A後退,C前進)
~白っぽい → 右折 (A動作なし,C前進)
~中間 → 直進 (AC両方前進)
~黒っぽい → 左折 (A前進,C動作なし)
~黒 → 左旋回(A前進,C後進)
~となっている。
#define middle 44 //光感知の度合い
int t=0; //交差点を通過する回数
~●室内の明るさや影の影響で交感知の調整において1違うだけでもセンサーに大きな誤作動がでた。
~光感度が44,45,46になった時にだいぶ動作が安定し、結果的に44が一番安定した動きをした。
*プログラム解説2【交差点右折動作】 [#pba72224]
~(今回は右折のみ)
ClearTimer(0); //タイマー1の初期化
while(FastTimer(0)<=40)
{
if(SENSOR_2>middle+4) //左旋回
{
OnRev(OUT_A);
Onfwd(OUT_C);
ClearTimer(0);
}
else if(SENSOR_2>middle+2) //左折
{
OnFwd(OUT_A);
Off(OUT_C);
ClearTimer(0);
}
else if(SENSOR_2>middle) //直進
{
OnFwd(OUT_AC);
ClearTimer(0);
}
else if(SENSOR_2>middle-2) //右折
{
OnFwd(OUT_C);
Off(OUT_A);
}
else //右旋回
{
OnFwd(OUT_A);
OnRev(OUT_C);
}
}
Off(OUT_AC);//一時停止
PlaySound(SOUND_CLICK);//確認音
PlaySound(SOUND_FAST_UP);//
Wait(100);//1秒停止
t++;
*プログラム解説3【交差点直進動作】 [#pf67aa76]
{
ClearTimer(0);
while(FastTimer(0)<=40)
{
if(SENSOR_2>middle+4) //左旋回
{
OnFwd(OUT_C);
OnRev(OUT_A);
ClearTimer(0);
}
else if(SENSOR_2>middle+2) //左折
{
OnFwd(OUT_A);
Off(OUT_C);
ClearTimer(0);
}
else if(SENSOR_2==middle) //直進
{
OnFwd(OUT_AC);
ClearTimer(0);
}
else if(SENSOR_2>middle-2) //右折
{
OnFwd(OUT_C);
Off(OUT_A);
}
else //右旋回
{
OnFwd(OUT_A);
OnRev(OUT_C);
}
}
PlaySound(SOUND_CLICK);
Off(OUT_AC);
PlaySound(SOUND_FAST_UP);
Wait(100);
OnFwd(OUT_C);
Wait(50);
Off(OUT_AC);
t++;
PlaySound(SOUND_FAST_UP);
}
*交差点の判断方法 [#w26d36bb]
交差点の判断は先ほどの交差点のプログラムで示した、
ClearTimer(0); //タイマー1の初期化
while(FastTimer(0)<=40) //タイマー1の値が40以下(つまり一定の時間内)に限り、同じ動作を繰り返す
~を用いて行う。これにより、一定時間で黒が連続して判断されるところがあれば、交差点だと判断ができる。
*交差点の判断後の処理 [#e862b57f]
~※青線は理想的動作、赤線は実際の動作である。
~�‘眤Δ鮨覆澆覆�ら右折
~&ref(./index5.png);
RIGHT(); //交差点を右折
~交差点にきた機体が若干右に傾いたところで、 センサーが確認音を出して一時停止。そこから黒色が白色になるまで右回転を行い、そのまま線に沿って進む。
~��直進
~&ref(./index6.png);
{STRAIGHT();} //交差点を直進(右傾きの利用)
~交差点にきた機体が若干右に傾いたところで、 センサーが確認音を出して一時停止。(�,汎瑛諭砲修靴董�右への傾きを利用して、左回転を白色になるまで続け、その後線に沿って進む。
*実際の動作 [#f99b54b8]
B地点 → R右折 → Q直進 → Q直進 →P右折 → S右折 → C地点
~※右折、直進の動作が連続するときは、動作プログラムの下に、
repeat()
~を書き、連続する回数を()にいれて設定する。
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
OnFwd(OUT_AC);
RIGHT(); //1つ目の交差点を右折
repeat(2)
{STRAIGHT();} //2,3つ目の交差点を直進
repeat(3)
{RIGHT();} //3,4つ目の交差点を右折
}
*結果 [#w865412d]
誤差や失敗を20回以上繰り返しましたが、光度と動作の調整により、ようやく順序よく交差点を全て読み取って正しく進むことができた。
*反省点 [#z290597c]
課題1に比べ、実際の動作の設定が少なかったが、調整の必要性が大きくなっていたので、時間がかかりました。最後のゴールのみ設定出来ませんでしたが、仲間の協力もあって、互いに光度などのプログラムを調整、レポートまとめができて良かったと思います。