#contents * 今回の課題 [#p6845762] #ref(http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&page=2015a%2FMission2&src=2015a-mission2.png)~ 上の図のいずれかの経路を黒い線にそって動くロボットを作成する。~ 自分はC地点からA地点へ行くロボットを作成した。~ その場合、Q地点で直進しP地点で右折することになる。~ 各交差点では二秒間停止する。 * ロボット [#t15d18d4] ** 外観 [#m6903acd] #ref(20150716_190026.jpg) 後輪を別々のモーターを使用して細かい動きをすることがきでる~ 前輪にはタイヤを使わないで紙と接触する部分に滑りやすいパーツをつけた~ 見えにくいが、真ん中にある青いものが光センサーで、車体と紙に近づけることによってより細かいことができる ** ピンポン玉 [#adc551b8] #ref(1437052449142.jpg) タイヤを外から内にずっと回転させることによって、ピンポン玉に衝突したら中に入り込むようになっている。~ 写真ははまった時の状態である~ はなすときはタイヤを逆回転させることによってシュートをうつことができる。 * プログラミングの説明 [#hda6cab9] ** 定義、準備など [#z782f727] #define aida 45 // 境界線の明るさ #define kuro 40 // 境界線と中央部の間の明るさ int Cmax=5; int C=0; //交差点と判断するためにカウンタを使い、線の真ん中だとカウンタが増えていく int C=0; //交差点と判断するためにカウンタを使い、線の真ん中だとカウンタが増えていく、Cmaxは交差点と判断するカウンタの値 int kabu=0; //ゴールしたと認識するために用意し、白いとカウンタが増えていく ** メイン [#qf4beadb] task main () { SetSensor(SENSOR_2,SENSOR_LIGHT);// SetPower(OUT_B,6); OnFwd(OUT_B); //ピンポン玉を巻き込む部分の起動 while (kabu<=15){ while (C<=Cmax){ //ライントレースの間 if (SENSOR_2<=kuro){ //線の真ん中にいるとき左旋回 OnFwd(OUT_C); Off(OUT_A); C+=1; kabu=0; } if (SENSOR_2>=kuro){ if(SENSOR_2<=aida){ //線の上の外側にいるとき右旋回 OnFwd(OUT_A); Off(OUT_C); C=0; kabu=0; } if(SENSOR_2>=aida){ //白いとこにいるとき右回転 OnFwd(OUT_A); OnRev(OUT_C); C=0; kabu+=1 } } while (C>=Cmax){ //5回以上連続して左旋回した時、交差点と判断する PlaySound(SOUND_CLICK); C=0; Cmax+=3; Off(OUT_A); Off(OUT_C); Wait(200); } } } Off(OUT_A); //kabuが15以上になったのでゴールと判断 Off(OUT_C); OnFwd(OUT_C); //ゴールしたあとの車体をまっすぐにする OnRev(OUT_A); Wait(90); Off(OUT_A); Off(OUT_C); OnRev(OUT_B); //シュートして終了する Wait(20); Off(OUT_B); } ** 工夫点や課題点 [#y60cade3] 自分がC地点からA地点にいくとわかっているから動けるプログラムなので、ほかの経路を渡ることはできない。~ 工夫は交差点と認識したとき音を鳴らすことによってロボットが何をやっているかわかりやすくなった。~ ゴールしたと判断するのは、ゴールすると線が途切れ暗い部分がなくなるのでそれを利用し、右回転を続けた回数を数えるカウンターを使った。~ カウンタを利用して、左旋回を続けて行ったとき交差点と判断するようにした。 * 反省 感想 [#me0d031d] 今回は二つ目の課題だったが前回と比べるとプログラムを作るのが難しいと思った。~ また今回もロボットを一から作ろうとしたが、なかなか完成することができずにプログラミングに割く時間が少なくなってしまった。~ 光センサーを使い線の上を動くとこを初めてみたので驚きたのしむことができた。~ 次の課題は6人でやるので協力して頑張りたいと思う。