ロボコンについて

コース

robocon-2006b-1.jpg
  • 約180cm×80cmの長方形のフィールド。
  • 500mlの紙パックと350mlのアルミ缶が右側のサークルに交互に3段積まれている
  • 紙パックとアルミ缶の段は2組ある
  • 左の端は紙パック置き場とアルミ缶置き場に分かれている

ルール

  • 競技時間は2分
  • 時間内にアルミ缶と紙パックを分別して所定の場所に運ぶ
  • アルミ缶または紙パックを所定の場所に1個運ぶごとに時間を30秒延長する
  • 中央のサークル内からスタート
  • スタート時はロボットは2個以内、ただしその後は何個に分裂しても良い
  • 競技が終了するまで人間が触ったり操作してはいけない
  • 途中でうまく動かなくなった場合は、1回限り再スタートすることができる
  • 紙パック、あるいはアルミ缶の一部でも所定の場所に触れていたら得点となる

得点

  • 基本得点
    • 紙パック、あるいはアルミ缶を所定の位置に運んだら+2点
    • 間違った場所に運んでしまったら−1点
  • 技術点

技術点は、自チームを含む全てのチームが次の4点で審査し、10点満点で採点し、その平均点を求める

  • 紙パック、あるいはアルミ缶を集める動作の精度・スピード・確実性…2点
  • 紙パック、あるいはアルミ缶を運搬、分別する動作の精度・スピード・確実性…3点
  • 自立型ロボットとしての形や動作の美しさ、斬新さなどの芸術性…3点
  • その他…2点

ロボット

どのように紙パックと缶を区別させるのか、区別した後どのように所定の位置まで運ぶのか意見がまとまらなくてロボットの製作に取りかかるのが遅れた。結局、紙パックと缶の良い区別の仕方が見つからず、ロボットを二台使い、一台は紙パックと缶を回収し枠付近まで運ぶロボット、もう一台はその紙パックと缶を枠内に押し込むロボットを作り、とにかく枠内に入れることだけを目標に進めていった。

  • 運ぶロボット

070209_1139~01.jpg 070209_1140~01.jpg ←これが枠付近まで運ぶロボット

  • かなり割り切ってやったため、プログラミングが簡単になり、動きもシンプルになったため、ある程度信頼できる動きをさせられるようになった。
  • ローラーを取り付けたことにより壁にぶつかった後、その壁にそって移動できるようになったため、誤差が少なくなり正確な動きが可能になった。またタッチセンサーを使用する必要がなくなった。
  • 顔のような部分ははじめは単なる飾りとして取り付けたが、紫のチューブが三段の紙パックと缶をしなやかに支えるという予想外の効果が得られたため、紙パックと缶を倒すことなく枠まで運ぶことが可能になった。
  • 枠内に押し込むロボット

arm2.jpg arm2_2.jpg ←これが枠内に押し込むロボット

  • 最大の特徴は動力を使用せずにロボットの推進力を利用して動くアームで、紙パック・缶に関わらず、さらにはそれらの向きにも関わらず枠内に入れることができる。
  • このアームは通常走行時は上の左の写真のようにさがっているが、枠付近の紙パック・缶に衝突するとそれらの側面を滑りながらアームが上がり、紙パックなどを回転させながら押し出すので、紙パックなどの種類や向きに関わらず押し込むことが可能。
  • さまざまな状況を試した結果、二つ並んでいる状況でも押し込むことができ、押し込む性能はかなり優秀だと思う。

苦労したこと・工夫したこと

とにかく一番苦労した点はどのように紙パックと缶を区別させるのか、区別した後どのように所定の位置まで運ぶかということで、話し合いの大半を占めた。おもしろいアイデアはいくつもでたが、その後それぞれの短所を解決する方法が見つからず断念。その後何度も話し合い、時間が足りないなどの状況を考慮した結果、最終的には分別はしないが全ての箱と缶を枠内に入れるという意見でまとまり、それに向けて精一杯取り組めたと思う。

プログラム

  • 運ぶロボットのプログラム
    #define open OnFwd(OUT_B);Wait(200);Off(OUT_B);   //当初使うはずだった定義
    #define close OnRev(OUT_B);Wait(200);Off(OUT_B);
    #define left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off (OUT_A+OUT_C);
    #define right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);
    #define go(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
    #define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
    #define float_l OnRev(OUT_A);OnFwd(OUT_C);Wait(10);Float(OUT_A+OUT_C); 
    task main()
    {
    go(170);         //回り込む
    back(22);
    left(87);
    go(650);
    back(20);
    left(87);
    go(200);
    left(100);
    go(1100);    //二ついっぺんに持ち運び
    back(600);
    left(90);
    go(300);
    back(20);
    left(90);
    go(500);
    float_l     //役目終了 後方で待機
    }
  • 押し込むロボットのプログラム
    #define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);   //直進する
    #define back_straight(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);   //後退する
    #define turn_left(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);   //左折する
    #define turn_right(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C);   //右折する
    task main()
    {   
          Wait(1000);     //もう1台のロボットが通過するまで待機
          back_straight(65);     //壁に接触し本機を垂直にする
          Wait(2300);     //もう1台のロボットの仕事が終わり後退するまで待機
          go_straight(80);  //まっすぐ進み缶のスペースに押し込む
          Wait(30);
          turn_left(79);
          Wait(30);
          while(true)
          {
          go_straight(150);Wait(30);  //2回突進し押し込む
          back_straight(70);Wait(30);
          go_straight(150);Wait(30);
          back_straight(70);Wait(30);
          turn_right(80);Wait(30);
          back_straight(100);Wait(30); //回転し元いた壁に戻り軌道修正
          go_straight(60);Wait(30); //最初より少し短めに進みそこで押し込む
          turn_left(80);Wait(30);
          go_straight(150);Wait(30);
          back_straight(70);Wait(30);
          go_straight(150);Wait(30);
          back_straight(70);Wait(30);
          turn_right(80);Wait(30);  //また元いた壁に戻り軌道修正
          back_straight(100);Wait(30);
          go_straight(40);Wait(30); //少し前進し紙パックのスペースへ押し込む
          turn_left(80);Wait(30);
          go_straight(150);Wait(30);
          back_straight(70);Wait(30);
          go_straight(150);Wait(30);
          back_straight(70);Wait(30);
          turn_right(80);Wait(30);
          back_straight(70);Wait(30);
          go_straight(80);Wait(30);
          turn_left(80);Wait(30);
          }             //これの繰り返し    
    }

結果と感想

判別さえできたら相当出来のいいロボットだったのではないだろうか?しかしそれが一番重要なのではないだろうか?努力は精一杯したと思うが意見がまとまらず何度か衝突をし、とりあえず入れるだけいれて得点をかせぐという結果重視か、結果的に一つも入らない可能性があっても判別することを目指したという過程重視か、という二つの方針を話し合い、時間もなくなってきたため最終的に結果重視することに決めた。何度か衝突することもあったが決められた時間内で、自分たちの出来る限りがんばったと思う。

結果は思いがけず1位。練習の時点でも、枠付近まで運搬するロボットの動作もほとんどミスのない安定性と、押し込むロボットのどんな向きでも押し込む能力にはそれなりに自信はあったが、みためと動きがシンプルなため技術点で高く評価されることはあまり期待していなかった。その分この1位という結果には正直驚いたのと同時にとてもうれしかった。最後にこういう結果が残せたのは今までの課題に精一杯取り組んできたおかげだと思う。

コメント

コメントをお願いします。



添付ファイル: filearm2.jpg 221件 [詳細] filearm2_2.jpg 203件 [詳細] file070209_1140~01.jpg 218件 [詳細] file070209_1139~01.jpg 201件 [詳細] filearm.jpg 128件 [詳細] file070209_1117~01.jpg 107件 [詳細] filerobocon-2006b-1.jpg 233件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-02-12 (月) 00:18:36