試作機です。最初はテーブルバンパーを直接つけていました
テーブルバンパーを改造、今回の課題発表では、↓のを使います。
最初はテーブルバンパーを本体に直接付けていましたが、衝突した時の反応時間が遅かったこと、それにより衝突した相手のロボットの進路を妨げてしまうのではないかと考え下図のように、テーブルバンパー(弐式)を作りました。タッチセンサや光センサの位置は変わっていません。
テーブルバンパーでは、衝突した時、また机の端から落ちそうになった時にも反応します。しかし、今回の課題では衝突時に限られていたため、逆に今回のコースをカーブする時に、前進には強い形になっているテーブルバンパーは邪魔になっているのではないかと考えました。タッチセンサが常に押されないように軽く、そして押されたらすぐに反応 するようにと弐式では考えました。
#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(80); // 交差点前で約1秒一時停止します。 OnFwd(MOTOR); Wait(80); Off(MOTOR); // 3つの光センサが黒線上にあるとき約1秒前進する } // (↑は交差点を渡るためのプログラムです。) } } } }
優先道路を横断する際に、優先道路の色に光センサが反応し、うまく渡ることが出来ません。そこで今回は交差点を認識するための出っ張りに、2つの光センサを反応させて、数秒の間だけ光センサとタッチセンサを使えなくするようにプログラムする必要がありました。
いくつかのロボットをコース上で動かすために、交差点などで衝突した場合の対応が、プログラムの最初の辺に組み込んであります。
if(SENSOR_2 == 1){ OnRev(MOTOR); Wait(30); Off(MOTOR); Wait(100);
衝突直後3秒間後退します、その後10秒間停止して、再び前進し始めます。
今回はコースアウト防止のため、片方の光センサが黒を感知すると、本体は黒の線から外れようと動きますが、きついカーブでは黒の線上でも外れようとする動作が長くは続きません。そこでuntilを使い、片方の光センサが黒を感知すると、光センサが黒の線上から外れるまで動作を続けるようにします。