イシイ
きでら
ばば
詳しくはロボコン参照。
今回1チームで2つのロボットが使用可能ということで、一体化するのか二体で別々の動きをするのかで悩まされました。
二体の方が便利だと思った僕たちは別々でやる方法をとりました。
しかし、色々と問題が発生し結局一体化に・・・。以下に一体化と二体化のメリット、デメリットを挙げてみました。
・メリット
タイヤで2つのモーターを使ったとしたら、残り4つは自由に使える
パスなどの細かい連携がなくて済む
プログラムがスムーズに書ける
・デメリット
小型化が難しい
細かい動きにむいていない
精度に欠ける
・メリット
全ての動きを分担できる
小回りが効く
連携が上手くいけば高得点も!
・デメリット
連携が難しい
ボールの受け渡しにおいて高度な連携技術が必要
使えるモーターやセンサが少ない
といったことなどが主に挙げられます。
僕たちは一体化のメリットというよりも二体化のデメリットが気になり二体化にしました。
テニスボールは1つずつ持ってくると、往復が面倒なので一度で3つ取れる方式にしました。
そのボールを取り込む仕組みを紹介します。
このようにコンベア式アームが上下し、ボールに触れたら自身が動きボールを取り込みます。
ボールを蹴るときは逆に回せばOK!
以上がボールの取り込みと蹴りだしの仕組みである。
他には車体の前方にタッチセンサをつけ、壁に当たったときの対処をしやすくしました。
こうしてできた僕たちのチームのロボットがこちら
こちらのプログラムはメインとなる動きをするプログラムです。主にタイヤを動かしたりタッチセンサを使った動きをします。
#define TURN_TIME 100 //90°回転する #define conveyor_set 11 //通信のためのメッセージ11〜13 #define ball_set 12 #define PK_start 13 #define turn_left OnRev(OUT_A);OnFwd(OUT_C);Wait(TURN_TIME);Off(OUT_A+OUT_C); //左に曲がる #define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(TURN_TIME);Off(OUT_A+OUT_C); //右に曲がる #define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //tだけ前進 #define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //tだけ後退 #define conveyor_up OnFwd(OUT_B);Off(OUT_B); //コンベア式アームを上げる #define conveyor_down OnRev(OUT_B);Off(OUT_B); //コンベア式アームを下げる sub go_collision() //タッチセンサが押されるまで直進 { OnFwd(OUT_A+OUT_C); until(SENSOR_1==1); } task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); //センサ1はタッチセンサ go_straight(400); OnFwd(OUT_A); //6秒間右回転(=缶をどける) Off(OUT_C); Wait(600); Off(OUT_A+OUT_C); go_collision(); //ボールのところまで行く turn_left; go_collision(); turn_right; OnFwd(OUT_A+OUT_C); turn_left; conveyor_down; //コンベア式アームを下げメッセージを送る SendMessage(conveyor_set); ClearMessage(); //メッセージ(11)をリセット until(Message()==ball_set) conveyor_up; //メッセージ(12)を受け取ったらコンベア式アームを上げる go_collision(); //キックする位置まで移動 turn_right; back(500); turn_left; back(800); turn_left; go_straight(400); SendMessage(PK_start); //シュートするようにメッセージ(13)を送る }
こちらのプログラムはベルトコンベア式のアームの操作をします。ボールを捕獲したり蹴ったりします。
#define conveyor_set 11 ////通信のためのメッセージ11〜13 #define ball_set 12 #define PK_start 13 #define conveyor_on OnFwd(OUT_B);Wait(1000);Off(OUT_B); //ボールを取り込む #define kick OnRev(OUT_B);Wait(1000);Off(OUT_B); //ボールを蹴る task main() { ClearMessage(); //メッセージをリセット until(Message()==conveyor_set) conveyor_on; //メッセージ(11)を受信したらボールを取り込む SendMessage(ball_set); //メッセージ(12)を送りBをオフ Off(OUT_B); ClearMessage(); //メッセージをリセット until(Message()==PK_start) kick; //メッセージ(13)を受信したらボールを蹴る Off(OUT_B); }
最終課題としてロボコンに取り組んだのですが、今までにない難しさに加えテスト週間と被り全く準備もできずにロボコン当日を迎えてしまいました。
絶対にできないと思っていましたができていたチームやおしいチームもいて負けてられないと思いました。
最後の最後だというのに反省することだらけです。一番大きな失敗は一体化にするか二体化にするかでいつまでも悩んでいたことです。ただでさえ時間がないというのにどちらの方がこの課題にむいているか早めに判断できなかったのは残念です。まだまだ反省すべき点がそれぞれの箇所において存在するので下に考察としてまとめました。
一体化のロボットなのでスタートの円からは少々はみ出てもしょうがないと思っていました。しかし、予想以上に大きくなりすぎてボールを捕獲する位置までたどり着けませんでした。3つ一気にボールを取ってしまおうという考えがマズかったのかも知れません。
僕たちの作ったロボットは縦長になってしまい、タイヤをつける位置に困りました。前後の位置関係において離しすぎると左右に曲がる際、大きな誤差を生む事になってしまいます。逆に近すぎても前後のバランスが取りずらくなってしまいます。先生からのアドバイスにもあった通り、重い部分に軸となるタイヤを取り付けそこから遠い所にキャスターのような軽いものを取り付けてみたら動きが良くなりました。
テニスボールを受け取る際、どうしても受け皿となるプレートが床すれすれでなくてはなりません。そのプレート上にはテニスボールが乗るので中は空洞にしておかなければなりません。なのでライントレース用の光センサをつけることができませんでした。それをカバーする手段として車体の先頭にタッチセンサをつけることで、壁に当たったときに右折もしくは左折というように命令が出しやすかったです。
Today:1
Yesterday:0
All:&counter([total|today|yesterday]);