2008a/A10

目次

ロボコン

課題:ボール運搬ロボット †

テニスボールを所定の位置に運ぶ

フィールドの説明

コース

・フィールドは約160cm×110cm

・1000mlの紙パックは約7.1cm×7.1cm×19.6cm

・ゴールの紙パックには約6cm四方の穴が2箇所開けられている

・ゴールの穴以外の部分は黒で覆われている

・フィールドの長辺の中央部におかれたゴールの紙パックの穴は上を向いている

・フィールドの短辺の中央部におかれたゴールの紙パックの穴は横を向いている

・外側の楕円の長径は128cm、短径は96cm

・内側の8の字の曲線部の曲率半径は24cmで、交差部は直交している

・黒い線の太さは約25mm

ルール †

基本ルール

・ボールを 塔から それぞれ向きの違う棒に挟まれた状態から 運びだし、4箇所あるゴールの箱に入れる。

・競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。

・4隅のコーナー(半径30cmの1/4円)のいずれかからスタートする。

・スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。

・開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。

・競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。

・途中でうまく動かなくなった場合、1回限り再スタートすることができる。

基本得点の計算方法

半分以上箱に入ったボールだけを得点の対象とする。

横から入れるゴールについてはボール1個2点、上から入れるゴールについては1個4点で計算する。ただし同じ箱に3個のボールを入れた場合には、その箱に限り点数を倍にする。

技術点の計算方法

以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(9チーム+TAor教員)が20点満点で採点し、その平均点を求める。

得点の目安:

・ボールを取り出す動作 (3点)

・ボールを運ぶ動作 (3点)

・ボールを紙パックに押し込む動作 (3点)

・2台以上のロボット、あるいは単体のロボットの場合は2台のRCXの連携の良さ(3点)

・自立型のロボットとしての形や動作の美しさ、斬新さ(3点)

・その他 (5点)

結果

ボールを入れることができたのは 10チーム中1チーム しかいなかった

自分たちのグループは入れることができないものの 6位 であった

マシンの紹介

2つのロボの連携を使いボールを入れるようにした

具体的なことは以下で説明する

親機

親機の役割

ボールの確保・ボール運び・ボール収納

親機の写真

全体
全体
全体
全体

子機

子機の役割

ボール押し出し

子機の写真

全体
全体
全体
全体

プログラム

コース

親機のプログラム

#define turn_time1 68                          //90度ターンする時間を定義
#define turn_time2 136                        //180度ターンする時間を定義
#define go_straight(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_A+OUT_C); //直進することを定義
#define turn1(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);     //右へ曲がることを定義
#define turn2(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);     //左へ曲がることを定義
#define ball OnRev(OUT_B);Wait(80);Off(OUT_B);             //ボールをとる動作を定義
#define back(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);   //バックすることを定義

task main()
{
SetPower(OUT_A+OUT_C,7);
go_straight(95);
Wait(50);
turn1(turn_time1);
go_straight(50);

Wait(300);
ball;
back(5);

Wait(100);               //1へ
turn2(turn_time1);
go_straight(95);
turn2(turn_time1);
go_straight(50);

Wait(50);
SetPower(OUT_B,7);
OnRev(OUT_B);
Wait(120);
Off(OUT_B);
Wait(5);
OnRev(OUT_B);
Wait(10);
go_straight(20);
Wait(60);
Off(OUT_B);

Wait(100);
turn2(turn_time1);
go_straight(100);
turn2(turn_time1);
go_straight(50);

Wait(200);
ball;
back(5);

Wait(100);                       //2へ
turn2(turn_time1);
go_straight(100);
turn2(turn_time1);
go_straight(50);

Wait(50);
SetPower(OUT_B,7);
OnRev(OUT_B);
Wait(120);
Off(OUT_B);
Wait(5);
OnRev(OUT_B);
Wait(10);
go_straight(20);
Wait(60);
Off(OUT_B);

Wait(100);                          
turn2(turn_time1);
go_straight(100);
turn2(turn_time1);
go_straight(50);

Wait(200);
ball;
back(5);

Wait(100);              //3へ
turn2(turn_time1);
go_straight(100);
turn1(turn_time1);
go_straight(350);

Wait(50);
SetPower(OUT_B,7);
OnRev(OUT_B);
Wait(120);
Off(OUT_B);
Wait(5);
OnRev(OUT_B);
Wait(10);
go_straight(20);
Wait(60);
Off(OUT_B);

Wait(100);           
turn2(turn_time2);
go_straight(350);
turn2(turn_time1);
go_straight(100);
turn2(turn_time1);

Wait(200);
ball;
back(5);

Wait(100);              //4へ
turn2(turn_time1);
go_straight(100);
turn1(turn_time1);
go_straight(350);

Wait(50);
SetPower(OUT_B,7);
OnRev(OUT_B);
Wait(120);
Off(OUT_B);
Wait(5);
OnRev(OUT_B);
Wait(10);
go_straight(20);
Wait(60);
Off(OUT_B);               
 
Wait(100);
turn2(turn_time2);
go_straight(350);
turn2(turn_time1);
go_straight(100);
turn2(turn_time1);
}

子機のプログラム

コース
task main()
{
SetPower(OUT_A+OUT_C,4);         //ギアを4へ変更

OnFwd(OUT_A+OUT_C);             //前進
Wait(120);                 //前進する時間
Off(OUT_A+OUT_C);              //ストップ
Wait(150);                  //止まる時間
OnRev(OUT_C);OnFwd(OUT_A);         //左へ向きを変える
Wait(43);                  //回る時間
Off(OUT_A+OUT_C);              //ストップ
Wait(100); 
SetPower(OUT_A,5);              //ギアを5へ変更
OnFwd(OUT_A+OUT_C);             //前進
Wait(60);                   //前進する時間
Off(OUT_A+OUT_C);               //ストップ
Wait(300);                  //親機が位置つくまで待機
OnFwd(OUT_A+OUT_C);              //ボールを押し出す
Wait(40);                   //押し出す時間
Off(OUT_A+OUT_C);               //ストップ

Wait(3000);                   //親機がボールを置いて戻ってくるまで待機
OnFwd(OUT_A+OUT_C);              //ボールを押し出す
Wait(30);                    //ボールを押し出す時間
Off(OUT_A+OUT_C);                 //ストップ

Wait(3000);                   //親機がボールを置いて戻ってくるまで待機
OnFwd(OUT_A+OUT_C);              //ボールを押し出す
Wait(30);                    //ボールを押し出す時間
Off(OUT_A+OUT_C);                 //ストップ

Wait(3000);                   //親機がボールを置いて戻ってくるまで待機
OnFwd(OUT_A+OUT_C);              //ボールを押し出す
Wait(30);                    //ボールを押し出す時間
Off(OUT_A+OUT_C);                 //ストップ

}

苦労・工夫したところ

・子機をボールが入っている板の間にいれるのがうまくいかなかった ← 先生の バンパーみたいなのつけてみたら? の一言で解決でき、板の間に入れることがほぼ100%成功した

・ボールを横から押し込むタイプで作ったが、ボールがうまく入らないし跳ね返って外出てしまうということが起きた ← 上からの方が牛乳パックの上を転がって入る確率が上がることに気づき上からにした

感想

・どのようにやっていけばいいのかはっきりさせるのに時間かかってしまったことが一番の失敗だと思いました。ですが、チームプレイの大切さ、時間の使い方、とりあえずやってみる、などこのロボコンではいろんなことを学ばされました。 by 辻

この作品に関してのコメント

何でもよろしいのでよろしくお願いします


訪問者 本日1 昨日0 合計&counter([total|today|yesterday]);


添付ファイル: filec.png 413件 [詳細] fileb.png 464件 [詳細] file1.png 159件 [詳細] file子機前から.jpg 381件 [詳細] file子機の構造.jpg 425件 [詳細] fileリフト2.jpg 416件 [詳細] fileボール.jpg 372件 [詳細] fileリフト.jpg 445件 [詳細] fileリフト構造.jpg 374件 [詳細] file上から.jpg 392件 [詳細] file全体.jpg 374件 [詳細] filea.png 483件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-08-08 (金) 14:21:23