2006a/C2/ロボコン
ロボコン特設ページVol.3
補助マシンとプログラムの説明
製作者:伊藤 伊藤 糸島 佐藤 堀 (五十音順)
ルールとか
カウンタ1474
補助ロボット†
| 補助ロボット |
・実際のコースで缶と缶の隙間の距離を計り、その長さに収まるようにマシンを組み立てた。 左の写真の四角い枠で缶をホールドし、缶をメインマシンが運びやすいように缶をずらす。 ・小刻みに動くようにプログラムを作ったので、非常に正確に缶の位置を合わせることが出来た。(練習では) ・ギヤ比を調整し、缶を運んでも、マシンがふらつかないようにした。 |
マシンの紹介†
補助ロボット |
| ・正確さが重要なので、小さめのタイヤを採用し、マシンのスピードを遅くした ・ギヤ比を調整し、重たい缶を運んでも、マシンがふらつかないようにした。 ・タイヤを6つもつけたので、缶をずらすときもまっすぐ走ってくれました。 ・アームが缶の重さに負けないようにしっかりと装着した ・実際のコースで缶と缶の隙間の距離を計り、その長さに収まるようにマシンを組み立てた。 ・出来は良かったのですが、本番ではあんまり働けませんでした ・ |
2台並んで | 裏 | アーム使ってみました | 上 |
| | | |
このマシンが出来るまで†
- このマシンが完成したのは、本番前日です。
- まずこのマシンを作るうえで最初に行ったことは、本番のフィールドのサイズの確認です。ロボコンのページのフィールドの説明の図にには、隙間の間隔を知る必要があった場所の説明がなかったため、実際に測ってみました。このマシンの缶と缶の隙間を抜けるという性質上、マシンの大きさの制限というものが問題になるからです。
- 測っている間にザッと作ってみたマシンでは、若干サイズが合わず、隙間を通り抜けることが出来なかったため、そのマシンを一度バラして、再びサイズにあったマシンを作り直しました。
- メンバーの一人が部屋に、実物大のロボコンのフィールドを再現してくれたので、それを用いて実践テストを繰り返した。もともとマシンの動きが単純だったので、完成までにそれほど苦労はしなかった。
- 缶をずらし終わりアームを上げるときに、ごくまれに、アームの根元と缶とがぶつかり、缶を打ち出してしまうことがあった。そのため、缶が転がしてしまい、目的の位置に缶をとどめることに失敗することがあった。
- 缶を打ち出す原因となっていたアームの根元に位置する、アーム補強のためのパーツを取り除いた
- すると今度は、缶をずらしているときに、アームに負荷がかかり、見ていて心配になったため、缶を打ち出さないような位置にアームを補強するパーツを取り付け、この問題は解決した。
- 細長く作ってあるので、マシンに対し横から働く力に弱く、アームを上げるときに、マシンが横転しかけることがあった。
- アームを上げる時間を調整し、アームを強く上げ過ぎることもなく、逆に弱すぎて、アームが戻りきらないこともないようにした。
8/16
プログラム紹介†
モーターA マシンの前進後退に関わる
モーターC マシンの前進後退に関わる
モーターB アームの上下に関わる
#define go_straight OnFwd(OUT_A+OUT_C); // マシンを前進させる
#define back OnRev(OUT_A+OUT_C); //マシンを後退させる
#define Stop Off(OUT_A+OUT_C); Wait(5); //マシンを停止させる
#define up Wait(100);OnFwd(OUT_B);Wait(60);Off(OUT_B);//アームを上げる
#define down OnRev(OUT_B);Wait(20);Off(OUT_B); //アームを下げて缶を保持する
sub can_grasp_1() //木の障害物に囲まれた方の缶をつかむ
{
down
go_straight
Wait(10); //前進と後退を繰り返して、確実に缶を保持する
back
Wait(10);
go_straight
Wait(40);
back
Wait(30);
go_straight
Wait(40);
}
sub can_grasp_2() //缶で囲まれた方の缶をつかむ
{
down
back
Wait(10);
go_straight
Wait(10); //同様に缶を確実に保持できるように、前進後退を繰り返す
back
Wait(20);
go_straight
Wait(20);
back
Wait(25);
}
task main()
{
//ClearMessage();
go_straight //まずはマシンが壁にぶつかるまで前進する
Wait(250);
Stop
//until(Message() == 1 );
Wait(4000);
can_grasp_1(); //そして障害物の木で囲まれている方の缶をつかむ
back
Wait(50);
Stop //そしてそのまま慎重に後退し
back
Wait(25);
Stop
back
Wait(20);
Stop
back
Wait(10); //缶を一番運びやすい位置までずらす
Stop
Wait(70); //終わったらアームを上げ、缶を放す
up
Wait(50);
go_straight //缶を放し終わったら、邪魔にならない位置に移動する
Wait(100);
Stop
//until( Message() == 2 );
Wait(4000);
back //次に缶に囲まれている方の缶のところまで移動する
Wait(100);
Stop
back
Wait(70);
Stop
back
Wait(10);
Stop
Wait(5);
//移動し終わったところ で、缶をつかむ
can_grasp_2();
go_straight
Wait(70);
Stop //少しずつ缶をずらしていく
go_straight
Wait(60);
Stop
go_straight
Wait(20);
Stop
Wait(10); //先ほどの位置まで缶をずらす
up //そしてアームを上げる
Stop
go_straight
Wait(100); //邪魔にならない位置まで移動する
Stop
}
プログラムの流れ†
- 缶の隙間を通り待機場所へ移動する
- 40秒間待機する。「この間に輸送ロボットが一番運びやすい缶を運ぶ」
- 40秒後に、障害物の木の棒に囲まれたほうの缶をつかむ
- そして、輸送ロボットが運びやすい位置まで、缶をずらす
- ずらし終わったら、待機場所に戻る
- 40秒待機する。「この間に輸送ロボットが一番(以下省略)」
- 40秒後、今度は、障害物の缶で囲まれているほうの缶の近くまで移動して、缶をつかむ。
- そして、輸送ロボットが運びやすい位置まで、缶をずらす
- ずらし終わったら、待機場所に戻る「この間に(以下省略)」
プログラム解説†
- メインのマシンの作業の進行具合でメッセージ方式か、時限式にするつもりでした。
- 通信方式だと通信に失敗した場合、そこでマシンが動かなくなるが。、時限式だとそのようなことはなくなる
- このマシン・プログラムは本番ではほとんど機能できませんでした。とても残念でした。
- 当初は、缶をつかむサブルーチンは一種でしたが、缶によってつかみ方を換えたほうが、より正確に、缶をつかむことが出来るとわかったため、缶をつかむサブルーチンをもう一つ追加しました。
- マシンの動きが単純なのでそれほど苦労はしなかった。
苦労した点を強いてあげるならば
- アームを上げる時間の調整
- 実践するたびに、電池が消耗し、マシンの進む距離が変わったこと*1
- 缶の隙間の距離を測りにわざわざ大学まで行ったこと
- このマシンは、スピードよりも正確さが重要なので、とにかく遅く、そして小刻みに動くようにプログラムを作った。そのため、非常に正確に缶の位置を合わせることが出来た。(練習では)
このマシンの改善したい点†
- このマシンが、正確に缶をずらせることが出来るのは、電圧が十分に高いときのみです。ですから、タッチセンサー、光センサーを用いて、安定した電圧が得られない状況でも正確に缶をずらせるようにしたい。
- さらに正確にするために、もう少しマシンの移動速度を落としたい。
- このマシンの動きは、前後移動、アームの上げ下げ、のみですから使用するモーターは最低2つでした。今回はモーターを余らせてもしょうがなかったので、モーターを3つ全て使いましたが、モーター2つの場合でもやってみたい
コメント†