2006a/ロボコンに乗ってます!
私たちは、ロボットを二台使用する事にして、缶を取ってくるロボット(α)と缶を受け取りゴールするロボット(β)を作る事にしました。
//製作者:itou //製作時間」:5時間 #define turn_right OnFwd(OUT_A);OnRev(OUT_C);//右に回転する為の定義 #define turn_left OnRev(OUT_A);OnFwd(OUT_C);//左に回転する為の定義 #define go OnFwd(OUT_A+OUT_C);//直進する為の定義 #define back OnRev(OUT_A+OUT_C);//後退する為の定義 #define stop_turn Off(OUT_A+OUT_C);//回転を止める為の定義 task main () { SetSensor(SENSOR_1,SENSOR_TOUCH);//センサー1がタッチセンサーだと定義 ClearTimer(0); //タイマーをリセットして時間を計れるようにする go; until (SENSOR_1==1) back; Wait(FastTimer(0)/2); //壁にぶつかるまで直進し、ぶつかるまでにかかった時間の半分交代する turn_right; Wait(120); //右回りに90度回転し、 ClearTimer(0); go; until (SENSOR_1==1) back; Wait(FastTimer(0)/4); //壁にぶつかるまで直進し、ぶつかるまでに時間の四分の一後退する turn_right; Wait(120); go; until(SENSOR_1==1); //右回りに90度回転し、缶にぶつかるまで直進する
back; Wait(50); turn_right; Wait(250); stop_turn; Wait(30); //回転しても缶に接触しない程度に後退して、180度回転する back; Wait(50); OnRev(OUT_B); Wait(17); //後退した分戻り、アームを降ろして缶を取り込む
ClearTimer(0); go; until(SENSOR_1==1); back; Wait(FastTimer(0)/2); //壁にぶつかるまで直進し、ぶつかるまでにかかった時間の半分後退する turn_left; Wait(120); //左回りに90度回転し、 ClearTimer(0); go; until(SENSOR_1==1); back; Wait(FastTimer(0)/4); //壁にぶつかるまで直進し、ぶつかるまでに時間の四分の一後退する turn_right; Wait(120); back; Wait(30); //右回りに90度回転し、受け渡しの出来る距離まで進む
Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(17); back; Wait(30); //アームを上げて缶を押し出す Off(OUT_A+OUT_C); }
//製作者:itou //製作時間:5時間 #define turn_right OnFwd(OUT_A);OnRev(OUT_C); #define turn_left OnRev(OUT_A);OnFwd(OUT_C); #define go OnFwd(OUT_A+OUT_C); #define back OnRev(OUT_A+OUT_C); #define stop_turn Off(OUT_A+OUT_C); //定義・ロボット構成は(α)号と同じです task main () { SetSensor(SENSOR_1,SENSOR_TOUCH);//センサー1はタッチセンサーです until(SENSOR_1==1); back; Wait(50); turn_right; Wait(250); stop_turn; Wait(30); //缶がセンサーに当ったら、回転しても接触しない程度に後退して180度回転する back; Wait(50); OnFwd(OUT_B); Wait(17); 後退した分戻り、アームを降ろして缶を取り込む ClearTimer(0); go; until (SENSOR_1==1); back; Wait(FastTimer(0)/2); //壁にぶつかるまで直進し、ぶつかるまでにかかった時間の半分後退する turn_left; Wait(120); //左回りに90度回転する ClearTimer(0); go; until (SENSOR_1==1); back; Wait(FastTimer(0)/4); //壁にぶつかるまで直進し、ぶつかるまでに時間の四分の一後退する
turn_right; Wait(120); Off(OUT_A+OUT_C); Wait(30); OnRev(OUT_B); Wait(17); //右回りに90度回転し、アームを上げて缶を押し出す準備をする back; Wait(70); Off(OUT_A+OUT_C); //進んで缶を押し込む ClearTimer(0); go; until(SENSOR_1==1); back Wait(FastTimer(0)/2); //壁にぶつかるまで直進し、ぶつかるまでにかかった時間の半分後退する turn_right; Wait(120); //右回りに90度回転する ClearTimer(0); go; until (SENSOR_1==1) back; Wait(FastTimer(0)/4); //壁にぶつかるまで直進し、ぶつかるまでに時間の四分の一後退する turn_right; Wait(120); go; Wait(90); //右回りに90度回転して、缶の受け取り位置まで戻る Off(OUT_A+OUT_C); }
上のプログラムは問題点が多かったため、ボツになりました!!
制作者 takumi
苦労した点は、なんといってもプログラムである。
最初は光りセンサーなしでやろうとしたが、スタート位置や缶の重さなどにより時間調整が上手くいかず断念!
仕方なく光りセンサーを投入したところ意外とジャストミートし、即採用決定!
それから、数々の苦難を乗り越えてついに完成
…と思いきや、開始一時間前にプログラムに異常が発生!?
もうだめかと思っていたが仲間の助言によりギリギリセーフで完成!!
なんとか本番を迎えることができたのである。
工夫した点はまずロボットの軽量化である。
他のチームと比べ我々はシンプルを追求した。
特に、アーム一本で勝負に出たのは正直不安であったが本番では大活躍してくれた。
タッチセンサーの方もアームを邪魔しないよう設置されこちらも申し分なし!
次にプログラムの方は、マクロを最大限に活用した。
例えば、ライントレースのプログラムや回転プログラムなどを設定しかなりの省略化に成功し、
簡単に修正可能になったりミスを早期発見できるようになった。
今回のロボットはシンプルかつ軽量というコンセプトで開発しました。
ロボットはできるだけシンプルにしたかったので下の土台は授業の一番最初で作ったものをそのまま使いました。今回大変だったのは缶をいかにして掴むかということでした。これを考えてつくるのにすごく時間がかかりました。ほかの班はみんな掴む部分に歯車を使っていたが僕らの班は歯車を使うことなくモーターに直結しました。
そのほかにもロボットどうしの缶の受け渡しをどうするかというのも課題でした。これは缶を受け取る側のロボットにタッチセンサーを付け、それにあたればすぐに缶を掴むようにしました。以外にも缶を受け取るより渡すほうの正確さにかかっていることがわかりました。
またゴールの段差をどのようにクリアするかですが、これは適当に何回も実験している間に成功しました。
その結果として缶を入れることに成功!
成功した点は、複雑な装置をつけるのではなく、
今までの授業でやってきたことを参考にして作ったのが成功へとつながったと思われる。