[[2008b/A2/課題2/メンバーページへ:http://yakushi.shinshu-u.ac.jp/robotics/?]] *課題2 黒い線に沿って動くロボット [#g0e7cf73] *目次 [#bbb662ff] #contents **1. 課題の概要 [#ffe6fdc2] 各チームで作成したコースに沿って動くロボットの作成。ただし・・・ ・速さと正確さの追求 ・交差点で優先側を走っていない場合は一時停止 ・前方のもう一台のロボットに接触した場合には、停止して相手のロボットが行き過ぎるか、距離が離れるのを待つ ・コースを2周したら自動的に止まる **2. ロボット紹介 [#l346c357] ***ロボットの完成写真 [#j8dcbc75] ~完成した写真がこちら~ &ref(Image008.jpg,nolink); &br;正面 &ref(Image006.jpg,nolink); &br;側面 &ref(Image007.jpg,nolink); ***ロボットの工夫した点 [#cba7dd30] 今回のロボットは課題1と同様の4輪を採用した。 ~今回のロボットでの工夫点は、タッチセンサ用のバンパーである。 &br;おおまかな構成は本に載っているものと大差は無いが、2段にすることにより、より安定してタッチセンサを反応させることを可能にした。 ***ロボットの改善点 [#n4d07154] &br;コースを完走することができるようになったが、たまに脱線する恐れがあるので、 &br;安定してコースを完走させることが今後の課題となってくる。 **3. コース紹介 [#rec26116] ~今回自分たちが作成したコースは8の字を2つ合体させたようなコースにした。 &br;単純なコースではあるが、その分正確性、速さが求められる。 &br;コースの全体~ &ref(Image005.jpg,nolink); **4. プログラム [#w510e493] ***プログラムの紹介 [#raf7f73b] 今回作成したプログラムがこちら(完成) #define A OUT_A //OUT_Aの省略 #define C OUT_C //OUT_Cの省略 #define trace 39 //閾値 task main(){ int i; //停止用変数iの宣言 i = 0; SetSensor(SENSOR_1,SENSOR_TOUCH); //センサー1をタッチセンサー宣言 SetSensor(SENSOR_2,SENSOR_LIGHT); //センサー2を光センサー宣言 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサー宣言 while(i < 5){ //停止用変数iが5より小さければ実行する if(SENSOR_2>trace){ if(SENSOR_3>trace){ //センサーが共に白であるとき前に進む OnFwd(A+C); } else{ //センサー3が黒のとき左にまがる Off(C); OnFwd(A); } } else{ if(SENSOR_3>trace){ //センサー2が黒のとき右にまがる OnFwd(C); Off(A); } else{ //センサーが共に黒のとき Off(A+C); Wait(100); OnFwd(A+C); Wait(150); //1秒停止、1.5秒前進する i = i + 1; //停止用変数iを1増加 } } if(SENSOR_1 == 1){ //タッチセンサーが反応したとき1秒後退、3秒停止する OnRev(A+C); Wait(100); Off(A+C); Wait(300); } } if(i == 5){ //停止用変数iが5になったら停止する Off(A+C); } } ***プログラムの工夫点や改善点[#q6e62d57] 今回、最初に作成したプログラムは過去の作品を参考にtaskを2つにするプログラムを作成した。 &br;taskを2つにすることでタッチセンサーが作動するとき、光センサーのプログラムを停止させ、誤作動を防ぐプログラムが簡単に作成できた。 &br;1個目のプログラムでは変数iを使用し、停止線での止まる回数を利用して2周して止まるプログラムである。 &br;しかし、タッチセンサーが反応してしまうと1個目プログラムでは、変数iのカウントが0に戻ってしまうため、2周で止まれなくなってしまう点が問題であった。 &br;そこでtaskを2つから1つにまとめ改良を加えたのが、上にあるプログラム2個目である。 &br;2個目ではタッチセンサーに反応しても変数iがリセットされないため、無事に2周して停止することができた。 **5. 課題発表を終えて [#yc06013a] ~課題発表当日になって慌ててプログラムの2個目を作成して無事に動くかどうか不安だったが、無事に動いてくれて安心した。 &br;また、1個目のプログラムの問題であったタッチセンサーによる変数iのリセットもクリアしてプログラムは自分でも満足に動いてくれたと思った。 &br;あとは停止線で停止してから進むときに脱線しやすいので、そこの修正ができれば良いと思った。 *コメント [#l48d40b5] ~・コメントがあればどうぞ - 書くべきことはかけています。あとはもう少し詳しく書きましょう。~ また、プログラムの最後のif(i==5)はいらないかもしれません。whileの中身を実行しないと自動的に止まるはずなので。 -- [[FI]] &new{2008-12-11 (木) 12:59:28}; #comment