2011a

課題4の内容

サッカーロボットを作る。

1〜2台のロボットを使いゴールにシュートするロボット、プログラミングする。

メンバー

  • MIYA
  • TAMA
  • ホン

ルール

基本ルール

  • (競技時間) テニスボールをすべて運び終わった時点、あるいは審判によって続行不能と判断された時点、あるいは競技者によってリタイア宣言がなされた時点、をもって競技の終了とする。
  • (スタート地点) スタート時にロボットは、空中部分も含めスタートの円内になければならない。
  • スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。
  • 開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。
  • 競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
  • 途中でうまく動かなくなった場合、1回限り再スタートすることができる。
  • 競技終了時点で、ロボットが運び終わったテニスボールに触れていてはならない。

基本得点の計算方法

  • ボールをゴール手前の円内からシュートしてゴールした場合、1個5点
  • ボールをゴール手前の円外からシュートしてゴールした場合、1個2点
  • ボールを3個ともゴールに入れればボーナス点として5点
  • 競技終了後、ロボットがボールに触れていた場合には、-1点
  • ランタンを一つ倒したら -1点(ただし、得点した場合)

技術得点の計算方法

  • 以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(8チーム)が20点満点で採点し、その平均点を求める。得点の目安:
  • ボールを拾ってくる動作 (3点)
  • ボールを運ぶ動作 (2点)
  • 空き缶をどける動作 (2点)
  • 2台以上のロボット、あるいは単体のロボットの場合は2台のRCXの連携の良さ、パスなどの正確さ (3点)
  • シュートの正確さ、華麗さ (3点)
  • 自立型のロボットとしての形や動作の美しさ、斬新さ(3点)
  • その他 (4点)

ロボット紹介

  • 今回はボールを押し出すロボットと押し出されたボールをディフェンスをどかしながらゴールまで運ぶロボットの2つに分けて連動させることにしました。

ボールを押し出すロボット

  • 全体図

1-1.jpg

  • 初めから棒を伸ばしておくと円から出てしまうので、このようにボールを押す直前に棒を伸ばす構造にしました

1-2.jpg

  • 何も付けないと円から出てしまうのでその対策にブロックを付けました

1-3.jpg

  • 長い棒のようなものをつけるだけという簡単な仕組みですがこの長い棒をボールの挟まれた木の間に入れボールを押し出します。

ボールをゴールまで運ぶロボット

  • 全体図

2-1.jpg

  • 初めは本体を立てて固定していましたが、簡単に取れてしまうのでこのように固定しました

2-2.jpg

  • 常にボールを締め付けていないとアームが開いてしまうのでこのギアを使いました

2-3.jpg

  • 下の爪でボールが転がっていくのを防ぎ、上のアームでボールを固定します

2-4.jpg

  • ボールを受け取りゴールまで挟んで運び、ゴールの中に入れる。

運び方

今回はボールをシュートするというのを諦めて、確実に点を取るためにボールをゴールまで運ぶという方針に決めました。 ロボット1は木の間からボールを押し出す専門にして、もうひとつのロボットをボールを受け取りゴールまで運んでゴールにボールをいれ、またボールの挟んである位置まで戻ってもう一度ボールを受け取りゴールまで運ぶという動作を繰り返します。

プログラム

  • 押す方
    #define go_straight(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 go_left(t)    OnFwd(OUT_A); OnRev(OUT_C); Wait(t);
    #define stopp(t)   Off(OUT_A+OUT_C); Wait(t);
    #define stick_down(t)    OnRev(OUT_B); Wait(t); Off(OUT_B);
    #define THRESHOLD 45
    task main() {
    SetSensor(SENSOR_1, SENSOR_LIGHT);
    OnFwd(OUT_A+OUT_C);
    Wait(120);
    OnFwd(OUT_C);OnRev(OUT_A);Wait(90);
    start follow_line;//ライントレースを始める
    Wait(620);
    stop follow_line;//ライントレースをやめる
    Wait(50);
    OnFwd(OUT_C);OnRev(OUT_A);Wait(50);
    back(135);
    Wait(50);
    stick_down(50);
    go_straight(107);
    Off(OUT_A+OUT_C);
    Wait(3500);
    go_straight(65);
    Off(OUT_A+OUT_C);
    Wait(3500);
    go_straight(65);
    Off(OUT_A+OUT_C);                       
    }
    task follow_line()//ライントレースのプログラム
    {
    while(true){
    if (SENSOR_1 < THRESHOLD){OnFwd(OUT_A); Off(OUT_C);}
    else{OnFwd(OUT_C); Off(OUT_A);}
    }
    }
  • 運ぶ方
    #define THRESHOLD 45
    
    task main()
    {
    ClearMessage(); 
    SetSensor(SENSOR_1, SENSOR_LIGHT);
    SetSensor(SENSOR_2, SENSOR_LIGHT);
    SetSensor(SENSOR_3, SENSOR_LIGHT);
    repeat ( 3 )
     {
     OnFwd(OUT_A+OUT_C);
     until(SENSOR_2 < THRESHOLD);
     until(SENSOR_2 > THRESHOLD);
     until(SENSOR_2 < THRESHOLD);
     OnFwd(OUT_A);OnRev(OUT_C);Wait(50);
     start follow_line;//ライントレースを始める
     Wait(650);
     stop follow_line;//ライントレースをやめる
     OnFwd(OUT_C);OnRev(OUT_A);Wait(80);
     OnFwd(OUT_C+OUT_A);Wait(100);
     OnFwd(OUT_C);OnRev(OUT_A);Wait(140);
     OnFwd(OUT_C+OUT_A);Wait(55);
     Off(OUT_A+OUT_C);
     OnRev(OUT_B);Wait(30);//アームを開く
     Off(OUT_B);
     Wait(300);
     OnFwd(OUT_B);Wait(30);//アームを閉じる
     OnFwd(OUT_A);OnRev(OUT_C);Wait(50);
     start follow_line;//ライントレースを始める
     Wait(900);
     stop follow_line;//ライントレースをやめる
     OnFwd(OUT_C);OnRev(OUT_A); Wait(40);
     OnFwd(OUT_A+OUT_C);Wait(450);
     start boll_kick;//ゴールを探し、ボールを蹴る
     Wait(1000);
     stop boll_kick; }//秒待ってから止める
    }
    
    task follow_line()//ライントレースのプログラム
    {
    while(true){
     if (SENSOR_2 < THRESHOLD){OnFwd(OUT_A);Off(OUT_C);}
     else{OnFwd(OUT_C);Off(OUT_A);}
     }
    }
    
    task boll_kick()//ゴールを探し、ボールを蹴るプログラム
    {
      OnFwd(OUT_A);OnRev(OUT_C);Wait(40);
      Off(OUT_C+OUT_A);Wait(30);
      OnRev(OUT_B);Wait(30);//アームを開く
      Off(OUT_B);
      OnFwd(OUT_A+OUT_C);Wait(160);
      Off(OUT_C+OUT_A);Wait(20);
      OnFwd(OUT_C);OnRev(OUT_A);Wait(10);
      OnRev(OUT_A+OUT_C); Wait(600);
      OnFwd(OUT_A);OnRev(OUT_C); Wait(50);
    }

感想

今回は自分達はボールをシュートするのではなくゴールに運ぶという方法で点を取ろうとしましたが思ってたいじょうにうまくいず苦労しましたが最後にはボールは一個しか運ぶことはできませんでしたがしっかりとゴールに入れることができてよかったです。 今回のロボコンでは満足のいく結果はでませんでしたがみんなと協力することで普通の授業では学べないいろんなことを学べたと思うのでよかったです。

反省

課題ではボールが三個用意されていましたが自分達は一個しか運ぶことができませんでした。これはロボットを作る段階からの構成にも問題はあったと思うので持っとしっかりとした構成にすればよかったなと思いました。

コメント



添付ファイル: fileprogram2.jpg 118件 [詳細] fileprogram1.jpg 113件 [詳細] file2-4.jpg 202件 [詳細] file2-3.jpg 184件 [詳細] file2-2.jpg 190件 [詳細] file2-1.jpg 190件 [詳細] file1-3.jpg 207件 [詳細] file1-2.jpg 191件 [詳細] file1-1.jpg 209件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-08-28 (日) 13:27:41 (2918d)