[[2017a/Member]]

目次
#contents

*課題3 [#l4b3b541]

空き缶を収集し、ゴールに空き缶をなるべく高く積み上げる

&ref(2017a/Member/tucky/Mission3/2017a-mission3.png,70%);

◦図のピンク色の場所に350mlの空き缶を置く

◦図のライトブルーの円のいずれか一箇所に中身の入った350mlの缶を置く

**基本ルール [#m4be1106]
◦競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。

◦図のA地点または(および)PQRSで囲まれた中央部の円からスタートする。ただし接地している部分はそれぞれの領域内に収まるものとする(線上はOK)。上空部分は領域からはみ出していてもよい。

◦空き缶を集めて図のT地点を含む「ゴール」と書かれた3/4円と2線分で囲まれる領域に空き缶を運ぶ

◦なるべく高く空き缶を積み上げる

◦運び終わった後、あるいは積み上げた後はロボットはゴールの領域から外に出ること。また空き缶と接触していてはいけない。

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

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

◦ロボットスタート後、速やかに1〜3の数字が記されたくじを引き、中身の入った缶を引いたくじの位置に設置する。

◦途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。

**基本得点の計算方法 (片道) [#c3e92ce2]
◦n段目の空き缶の点数を3n点とし、すべての空き缶の点数を合計する。

◦中身の入った缶については、その缶自身を含め、その缶の上下に積まれている缶の点数をすべて倍にする

**技術点の計算方法 [#re4563eb]

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

◦空き缶を取りにいくまでの動作 (3点)

◦空き缶を掴む動作 (3点)

◦空き缶をを運ぶ動作(2点)

◦空き缶を積み上げる動作(5点)

◦2台のRCXまたはNXT、EV3の連携の良さ(3点)

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

◦その他 (2点)

*ロボットの概要 [#zf4a59d7]
**全体 [#h6d084c6]
ロボットは最終的に次のような形になった。これはアーム部分で缶を掴み、シーソーのように動くことで、缶を持ち上げたり、積み重ねたりする設計になっている。このシーソーのような部分を平行四辺形の形で作ることでアーム部分が地面と垂直を保ったまま缶を掴むことが出来る。また、ロボットの先にレールをつけることでアーム部分で缶を掴みやすくするようにした。

&ref(2017a/Member/tucky/Mission3/DSC_0105.jpg,25%);
&ref(2017a/Member/tucky/Mission3/DSC_0108.jpg,25%);

先の方にアーム部分を付けただけだと重みで前に倒れてしまったり、缶を持ち上げても下に落ちてきてしまう。そのため、アーム部分とは反対側に重りとしてモーターやタイヤをくっつけることで釣り合うように調節した。下の写真が重りの部分である。

&ref(2017a/Member/tucky/Mission3/DSC_0109.jpg,30%);

**アーム部分 [#v1095c78]

アーム部分はモーターを回転させることで開閉する仕組みになっている。これを縦に延ばし、ストッパーをつけることによって2段までの缶なら安定して掴むことが出来る。

&ref(2017a/Member/tucky/Mission3/DSC_0110.jpg,30%);

**コックピット [#e900665e]

技術点の中にはロボットの見た目に関する評価も含まれていたので見た目にもこだわっている。付属の人形を使って、コックピットのようなものを作りあげた。

&ref(2017a/Member/tucky/Mission3/DSC_0106.jpg,30%);

*プログラム [#s8d23517]

**プログラムの説明 [#s0818c21]
私たちの班は時間の都合上、缶を2段積むことにした。図のようにライントレースを行い、まず�,隆未鯆呂漾∋�ち上げる。そのままライントレースを続けて、�△隆未両紊豊,隆未鮠茲擦�2つの缶を持ち上げる。そして向きを変えてゴールに缶を持っていき、その場を離れる、というプログラムだ。また、2台のロボットを連携させており、マスターの方でライントレース、スレーブの方でアームの開閉、缶の持ち上げなどを行っている。

&ref(2017a/Member/tucky/Mission3/setumei.png,40%);

**マスターのプログラム [#t53d91cd]
 #define THRESHOLD 50   //しきい値
 #define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);   //直進(出力)
 #define go_forward  OnRL(SPEED, SPEED);   //直進
 #define go_back OnRL(-SPEED,-SPEED);   //後退
 #define turn_left1  OnRL(SPEED, -SPEED);    //左に旋回
 #define turn_left0  OnRL(SPEED, 0);    //左にカーブ
 #define turn_right0 OnRL(0, SPEED);    //右にカーブ
 #define turn_right1 OnRL(-SPEED, SPEED);    //右に旋回
 #define SPEED 45   //出力
 
 task main()
 {
     SetSensorLight(S3);   //光センサー
     SetSensorLowspeed(S1);   //超音波センサー
     until(BluetoothStatus(1)==NO_ERR);   //スレーブ側と接続するまで待つ
     int nKan=0;    //掴んだ缶の個数
     while (nKan < 2) {   //掴んだ缶の個数が1個の時
      while(SensorUS(S1)>15){     //センサーと缶との距離が15センチ以上の時には次の動作を行う
       if (SENSOR_3 < THRESHOLD-10) {
        turn_left1;   //左に旋回
       }
       else {
        if (SENSOR_3 < THRESHOLD-5) {
         turn_left0;   //左にカーブ
        }
        else if (SENSOR_3 < THRESHOLD+5) {
         go_forward;   //直進
        }
        else if (SENSOR_3 < THRESHOLD+10) {
         turn_right0;   //右にカーブ
        }
        else {
         turn_right1;   //右に旋回
        }
       }
       Wait(1);
      }
      until(SensorUS(S1)<=12){    //センサーと缶との間の距離が12�儖焚爾砲覆襪泙�
       go_forward;   //直進
      }
      if (SensorUS(S1)<=12){   //センサーと缶との間の距離が12�儖焚爾砲覆辰燭�
       Off(OUT_BC);
       RemoteStartProgram(1,"sss1.rxe");   //スレーブ側にファイル「sss1.nxc」を命令
       Wait(2000);
       RotateMotorEx(OUT_BC,45,100,0,true,true);   //缶をつかむための位置調整
       Wait(6000);
       nKan++;   //カウンタを増やす
      }
     }
     while(nKan<3){   //掴んだ缶の個数が2個の時
      RotateMotor(OUT_B,-SPEED,200);   //ゴール方向に方向転換
      go_forward;   //直進
      Wait(2500);
      Off(OUT_BC);
      RemoteStartProgram(1,"sss2.rxe");   //スレーブ側にファイル「sss2.nxc」を命令
      Wait(5000);
      go_back;   //後退
      Wait(3000);
      Off(OUT_BC);
      nKan++;   //プログラムを終了させるためにカウンタを増やす
     }
 }

**スレーブのプログラム [#n94b01d0]

ファイル名「sss1.nxc」(缶を掴む&持ち上げる)

 task main()
 {
     RotateMotor(OUT_C,-30,30);   //落差軽減のためにアームを少し下げる
     RotateMotor(OUT_B,30,30);   //アームを開く
     RotateMotor(OUT_C,-30,150);   //アームを下げる
     Wait(2000);
     OnFwd(OUT_B,-30);   //缶を掴む
     Wait(3000);
     Off(OUT_B);
     RotateMotor(OUT_C,50,180);   //アームを上げる
 }

ファイル名「sss2.nxc」(缶を置く)

 task main()
 {
     RotateMotor(OUT_C,-30,180);   //アームを下げる
     RotateMotor(OUT_B,30,90);   //アームを開く
 }

*結果 [#c10736a9]
缶を2段積むことに成功した。それと「元からゴールのラインに乗っている缶に触れた場合にはその缶もゴールに入ったとみなして3点とする」というルールが当日に追加され、私たちの班はたまたまその缶に触れたため、(3+6)+3=12点獲得することが出来た。また、技術点も追加され、全体の中で3位という結果を収めることが出来た。

*感想 [#i9783ca2]
最初は缶を3段積む予定だったが、時間をあまり取ることが出来なかったので缶は2段積むことになってしまった。だが、2段積むことに成功した上に特別ルールによって3点がプラスされ、全体の中で3位といういい結果になったので結果的に非常に良かったと思う。今まで相当な時間を費やしてきたので、苦労してきた甲斐があったと実感した。まだまだ改善点はいっぱいあるので、機会があればこの続きをやりたい。
最初は缶を3段積む予定だったが、時間をあまり取ることが出来なかったので缶は2段積むことになってしまった。だが、2段積むことに成功した上に特別ルールによって3点がプラスされ、全体の中で3位といういい結果になったので結果的に非常に良かったと思う。今まで相当な時間を費やしてきたので、苦労してきた甲斐があったと感じた。まだまだ改善点はいっぱいあるので、機会があればこの続きをやりたい。

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