[[2019a/Member]]
目次
#contents
*課題3 [#tfcbeaf0]
ピンポン玉または青と赤のボールを運搬して、所定の容器の中に入れる。
**コース説明 [#bacff69c]
#ref(2019a/Member/Matsui/Mission3/mission3.png,コース)
フィールドの説明
-フィールドは課題2で使用した紙を使用する。
-生協のお弁当の四角いプラ容器2つをそれぞれ円内に置き、片方に玉を2個入れる。
-残りの2個の玉は課題2と同じ位置に置く。その際、ゴムタイヤやプレートの上に置いてもよい。
-プラ容器には色をつけたり文字や記号を書いてもよい。
-プラ容器は両面テープ等でフィールドに固定してもよい。
-2枚の紙の境界にはそれぞれ幅1cm、合計2cmの黒線を描いてもよい。
**ルール [#c4c6dfaf]
基本ルール

-競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。
-図のA地点または(および)A'地点からスタートする。ただし接地している部分はそれぞれの領域内に収まるものとする(線上はOK)。上空部分は領域からはみ出していてもよい。
-開始の合図から5秒以内にスタートボタンを押す作業を完了すること。
-競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
-途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。
-競技終了後、ロボットが、ゴールのプラ容器に触れていてはいけない。
-競技終了後、もともと玉が入っていたプラ容器が、ゴールのプラ容器に触れていてはいけない。

基本得点の計算方法

-プラ容器内の玉を1個運べば8点。二つとも運べば20点。
-L地点とL'地点の玉をどちらか1個運べば4点、2個とも運べば12点。
-競技終了後、ゴールのプラ容器が完全に円から出しまった場合、もとの基本点の1/4を減点。
-競技終了後、ゴールのプラ容器の半分以上が円から出ていれば、もとの基本点の3/4を減点。
-競技終了後、ゴールのプラ容器にもとのプラ容器が触れていれば、もとの基本点の1/2を減点。
-競技終了後、ゴールのプラ容器にもとのプラ容器が触れていれば、もとの基本点の1/2を減点。
-競技終了後、ゴールのプラ容器にロボットが触れていれば、もとの基本点の1/4を減点。

技術点の計算方法

-以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(5チーム)が20点満点で採点し、その平均点を求める。 得点の目安:
-玉を探し取りにいくまでの動作 (3点)
-玉を掴む動作 (3点)
-玉をを運ぶ動作 (2点)
-玉を容器の中に入れる動作 (2点)
-2台のRIS、NXT、EV3の連携の良さ(2点)
-自立型のロボットとしての形や動作の美しさ、斬新さ(2点)
-その他 (3点)
*ロボットの説明 [#l4649e0e]
容器の中のボールを入れるロボットと置いてあるボールを入れるロボットに分けて作りました.
**ロボット1 [#mbebb989]
前のアームで容器をつかめるようにした.
#ref(2019a/Member/Matsui/Mission3/IMG5.JPG)
容器を持ち上げたとき.
#ref(2019a/Member/Matsui/Mission3/IMG3.JPG)
容器をさらに上げてゴールへシュートした.
#ref(2019a/Member/Matsui/Mission3/IMG4.JPG)
**ロボット2 [#x13add2b]
アームを下げて輪ゴムでボールをキャッチできるようにした,
#ref(2019a/Member/Matsui/Mission3/IMG6.JPG)
ボールをキャッチしたとき.
#ref(2019a/Member/Matsui/Mission3/IMG2.JPG)
アームを挙げて上の棒で押し出してシュートするようにした.
#ref(2019a/Member/Matsui/Mission3/IMG1.JPG)
*プログラムの説明 [#f441ab34]
**ロボット1 [#uc8aab6f]
***defineについて [#y2d3fd4e]
 #define RUN_TIME 610
 #define power(s) SetPower(OUT_B,s);
 #define STEP 5
 #define turn OnFwd(OUT_A);OnRev(OUT_C);Wait(148);Off(OUT_AC);
 #define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(120);Off(OUT_AC);
***ラインとレースについてのサブルーチン [#ic9b38f8]
 sub tores()
 { SetSensor(SENSOR_2,SENSOR_LIGHT);
     ClearTimer(0);
     while ( FastTimer(0) <= RUN_TIME ) {    
        if ( 48 < SENSOR_2 ){
            OnFwd(OUT_A); Off(OUT_C);    //白なら右へ
        } else if (45 <SENSOR_2 < 49) {
            Off(OUT_A); OnFwd(OUT_C);    //灰色なら左へ
        } else {
            OnRev(OUT_A);OnFwd(OUT_C);    //黒なら左へ旋回
         } 
        
     }
  }

***アームを下すサブルーチン [#ge309ccc]
 sub down()    
 {
         OnFwd(OUT_B);
         power(0);    
         Wait(50);
         Off(OUT_B);
         Wait(100);
 }
***アームを1段階上げるサブルーチン [#tbdaafec]
 sub up1()   
 { 
        OnRev(OUT_B);
        power(0);    
        Wait(30);
        Off(OUT_B);
        Wait(100);
 }
***アームをさらに上げてシュートするサブルーチン [#t7a2849f]
 sub throw()   
 { 
         OnFwd(OUT_B);
         power(0);   
         Wait(80);    //アームをゆっくりさげる
         Off(OUT_B);
         OnRev(OUT_B);
         Wait(50);    //アームを素早くあげる
         Off(OUT_B);
 }
***メインのプログラム [#u193ad74]
 task main()
 {
         
         OnFwd(OUT_AC);    //地点Bまで前進
         Wait(100);
         tores();    //BからCまでのライントレース
         turn;    //ピンポン玉の入った容器のある方に向けて右に90度旋回
         OnRev(OUT_AC);    //少し後退してアームが容器に当たらないようにスペースをとる
         Wait(120);
         Off(OUT_AC);
         down();    //アームをおろす
         OnFwd(OUT_AC);    //前進してアームの間に容器を挟む
         Wait(130);
         Off(OUT_AC);
         up1();    //容器を持ち上げる(アームをあげる)
         OnRev(OUT_AC);    //そのまま後退して位置調整
         Wait(415);
         turn_left;    //左に90度旋回
         OnRev(OUT_AC);    //後退
         Wait(140);
         Off(OUT_AC);
         throw();    //運んでいた容器からピンポン玉を取り出し、別容器に移す
 }
**ロボット2 [#h59b3bd0]
***defineについて [#l1982d7a]
 #define RUN_TIME 700
 #define turn OnFwd(OUT_A);OnRev(OUT_C);
 #define turn2 OnFwd(OUT_C);OnRev(OUT_A);
 #define go OnFwd(OUT_AC);
 #define power(s) SetPower(OUT_B,s); //モータのパワーをsにする
***アームを下げるサブルーチン [#ab8d3402]
 sub down()   
 { 
         OnRev(OUT_B);
         power(2);
         Wait(50);
         Off(OUT_B); 
 } 
***アームを1段階上げるサブルーチン [#d206ebec]
 sub up()   
 {
         OnFwd(OUT_B);   
         power(1);
         Wait(50);
         Off(OUT_B);
 }
***アームをさらに上げてシュートするサブルーチン [#e2135306]
 sub up2()   
 {
         OnFwd(OUT_B);
         power(2);
         Wait(20);
         Off(OUT_B);
 }
***メインのプログラム [#fca271c0]
 task main()
 {
    go;Wait(110);Off(OUT_AC);    //A地点を出発して旋回する位置まで直進
    turn2;Wait(70);Off(OUT_AC);    //左に90度旋回
    go;Wait(210);Off(OUT_AC);    //K′地点まで直進
    turn;Wait(70);Off(OUT_AC);    //右に90度旋回
    go;Wait(30);Off(OUT_AC);    //L′地点まで直進
    down();Wait(30);    //ピンポン玉を掴む(アームをさげる)
    up();Wait(30);    //ピンポン玉を掴んで保持しながらアームをあげる
    turn2;Wait(70);Off(OUT_AC);    //左に90度旋回
    go;Wait(10);Off(OUT_AC);  //前進して容器に近づく
    up2();Wait(30);  //ピンポン玉を押し出して容器にピンポン玉を入れる
    OnRev(OUT_AC);Wait(1000);Off(OUT_AC);    //後退してコースから外れる
 }
*結果 [#yac3dbcf]
ロボット1のほうは電池を変えて角度が変わってできなかった.
ロボット2のほうは輪ゴムのところがボールに当たったがうまく取れなかった.
*まとめ [#zbb398ba]
このゼミでdefineやサブルーチンなどを使ってロボコンに挑戦したが思ったようにうまくいかず残念だった.今度やる機会があったらロボットとプログラムを改良してうまくいくようにしたい.

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS