(1)、全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる。懐中電灯は動かさないが、いろいろな距離や方向にある懐中電灯に対応できるロボットにすること。
(2)、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。
(3)、懐中電灯を動かしたとき懐中電灯に向かって進み、見失った時には再び全方向から懐中電灯を探しだす。7秒以上追尾できたら懐中電灯に向かってブロックを投げる。
僕たちは課題(1),(2)を選びました。
三輪ということで、非常に悩みましたが、結果的に先生の紹介をもとに作り上げました。
車体に合わせた結果、非常にシンプルな形に仕上げました。
そのためスムーズな動きが可能となりました。
光センサーは車体の前方に2個つけました。
重量を考えた上で、あまりロボットに負担のかからない形に仕上げました。
ストッパーの位置や大きさに悩み、微調整が大変でした。
投げる様子はこんな感じです。最高点で飛ばせるようにしました。
#define round_time 120 //一周に要する時間 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ−1を光センサーと定義 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ−3を光センサーと定義 ClearTimer(0); int n ; //光の最大値 n=0; while(Timer(0) < round_time) //一周するまでの間 { OnFwd(OUT_A); //右に旋回する if(SENSOR_2 > n) { n=SENSOR_2; //光の最大値を記憶する } } if(SENSOR_2 < n) //光の最大値より暗いとき { OnFwd(OUT_A); //右に旋回する } if(SENSOR_2 >= n-10) //光の最大値とほぼ同等のとき { OnFwd(OUT_C); Wait(30); Off(OUT_C); //投げる }
#define light 60 //光の方向を探すための光の大きさを定義 #define round_time 120 //一周する時間を定義 #define move_time 400 //光停止後の動く時間を定義 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーと定義 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーと定義 ClearTimer(0); //タイマーを初期化 until(Timer(0)>round_time) //一周するまでに光があれば追跡し、なければ次へ { until((SENSOR_1>light)&&(SENSOR_3>light)) { OnFwd(OUT_A); ClearTimer(0); } until((SENSOR_1>light)&&(SENSOR_3>light)) { OnRev(OUT_A); ClearTimer(0); } } ClearTimer(0); //タイマーを初期化 while(Timer(0)<move_time) { OnRev(OUT_A);Off(OUT_A); //直進し、懐中電灯に近づきホイールを投げる OnFwd(OUT_C);Wait(30);Off(OUT_C); }
ライトセンサーを2個つけることで、光の感度をよくしました。
上記のようにストッパーの微調整に力を入れ、うまくホイールが飛ばせるようにしました。
今回は期間が短かったので大変でしたが、先輩のプログラムや先生の紹介のおかげでどうにか作り上げることができました。
ロボコンでもこれまでと同様に頑張りたいです。
ご自由にどうぞ^^