#contents *課題2・黒い線に沿って動くロボット [#ge99588a] -2つの光センサーが白を感知して進みます。それによって、ロボット本体を黒の線上を進むようにします。 -交差点前で一時停止します。 -前のロボットに衝突した場合、停止します。 -速さと正確さを追求します。 **【メンバー】 [#t1e2029d] -宮原 昌三(マサミです) -大益 夏樹 **【ロボット紹介】 [#j76913f3] ***【試作機】 [#od6f84c6] #ref(全体.jpg) 試作機です。最初はテーブルバンパーを直接つけていました -二つのバンパーのどちらかが当たる事により、片方のタッチセンサが反応します。 ***【完成型】 [#e706b8b6] テーブルバンパーを改造、今回の課題発表では、↓のを使います。 #ref(全体2.jpg) -真ん中のパイプに当たることにより、2つのタッチセンサが反応します。 -最初のバンパーに付いていた小さな車輪を無くすことにより、曲がるときの抵抗を減らそうと考えました。 ***【テーブルバンパーの改造】 [#y99d7a4c] 最初はテーブルバンパーを本体に直接付けていましたが、衝突した時の反応時間が遅かったこと、それにより衝突した相手のロボットの進路を妨げてしまうのではないかと考え下図のように、テーブルバンパー(弐式)を作りました。タッチセンサや光センサの位置は変わっていません。 #ref(A9R001.jpg) テーブルバンパーでは、衝突した時、また机の端から落ちそうになった時にも反応します。しかし、今回の課題では衝突時に限られていたため、逆に今回のコースをカーブする時に、前進には強い形になっているテーブルバンパーは邪魔になっているのではないかと考えました。タッチセンサが常に押されないように軽く、そして押されたらすぐに反応 するようにと弐式では考えました。 #ref(A9R004.jpg) **【プログラム】 [#q7a68997] #define MOTOR OUT_A+OUT_C // A、Cのモーターへの同時出力を“MOTOR”と定義 #define THRESHOLD 40 // 闘値を設定 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); // センサ1が光センサであることを定義 SetSensor(SENSOR_3,SENSOR_LIGHT); // センサ3が光センサであることを定義 SetSensor(SENSOR_2,SENSOR_TOUCH); // センサ2がタッチセンサであることを定義 while(true){ if(SENSOR_2 == 1){ // タッチセンサが反応した時(衝突時の対応です) OnRev(MOTOR); Wait(60); // 0.6秒間、後退します Off(MOTOR); Wait(300); // 3秒間、停止します } else { // それ以外は・・・・・ if(SENSOR_1 > THRESHOLD){ if(SENSOR_3 > THRESHOLD){ OnFwd(MOTOR); // 左右の光センサがともに白線上にある時は、前進します。 } else { OnFwd(OUT_A); Off(OUT_C); // 右の光センサが反応(黒線に接した)したとき、Aを進めCを止める until(SENSOR_3 > THRESHOLD); // 右の光センサが黒の線から外れるまで(コースアウト防止です) } } else { if(SENSOR_3 > THRESHOLD){ Off(OUT_A); OnFwd(OUT_C); // 左の光センサが反応(黒線に接した)したとき、Aを止めCを進める until(SENSOR_1 > THRESHOLD); // 左の光センサが黒の線から外れるまで(コースアウト防止です) }else{ Off(MOTOR); Wait(500); // 交差点前で5秒一時停止します。 OnFwd(MOTOR); Wait(300); Off(MOTOR); // 3つの光センサが黒線上にあるとき2秒前進する } // (↑は交差点を渡るためのプログラムです。) } } } } ***【交差点を渡る】 [#j1298dd9] #ref(交差点1.jpg) 優先道路を横断する際に、優先道路の色に光センサが反応し、うまく渡ることが出来ません。そこで今回は交差点を認識するための出っ張りに、2つの光センサを反応させて、数秒の間だけ光センサとタッチセンサを使えなくするようにプログラムする必要がありました。 ***【衝突時の対応】 [#vd4c4ef4] いくつかのロボットをコース上で動かすために、交差点などで衝突した場合の対応が、プログラムの最初の辺に組み込んであります。 if(SENSOR_2 == 1){ OnRev(MOTOR); Wait(30); Off(MOTOR); Wait(100); 衝突直後3秒間後退します、その後10秒間停止して、再び前進し始めます。 ***【コースアウト防止】[#jfdc15fd] 今回はコースアウト防止のため、片方の光センサが黒を感知すると、本体は黒の線から外れようと動きますが、きついカーブでは黒の線上でも外れようとする動作が長くは続きません。そこでuntilを使い、片方の光センサが黒を感知すると、光センサが黒の線上から外れるまで動作を続けるようにします。 #ref(コースアウト防止.jpg) -実際にuntilを加えて走らせてみると、↑の図のように黒の線上から光センサをすべて外すことはできませんでし たが、コースアウト防止にはつながります。 **【工夫した点・努力した点】[#z0b05542] -前回の書道ロボットに比べ、軽量で小回りを利かせる事を念頭に考えて作りました。 -きついカーブでもコースアウトしないように、片方の光センサが反応したときのプログラムに、Untilをつけました。 -タッチセンサをなるべく素早く反応するよに、テーブルバンパーを改造しました。 **【問題点・反省点】 [#q5dd43e8] -交差点での接触を避けるため、1つの光センサを前方を当てるように設置して、その光センサが反応することにより停止、または後退することもできると考えていました。白をトレースし、交差点を渡るためには光センサは2つとも下向きに設置しなければいけなかったので、結局どうすればいいのか思いつきませんでした。 -車輪は大きい方がスピードがよく出ます。今回の課題では速さも追求しなければいけませんでしたが、車輪を大きくすると、正確さが失われやすく、車輪には手を出すことができませんでした。 **【感想など】 [#q26d944c] -前回に比べればプログラムは短いですが、とても複雑でした。2つの光センサのプログラミングの後に、タッチセンサを書き足したのですが、時にはタッチセンサしか動作していなかったり、光センサは反応しているがタッチセンサは全く動かなかったりと、プログラミングには四苦八苦しました。 (宮原)