[[2016a/Member]]
目次 
#contents

*課題 [#l274bcd8]

http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2016a%2FMission2&openfile=2016a-mission2.png

図のA,B地点からスタートしC,D地点にある紙コップを円の中に運び入れることである。


評価するポイントは紙コップを運び入れるまでのは速さ、円の中の紙コップのか数、紙コップを運ぶための機体の工夫などである。

詳細は[[こちら:http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMission3]]。

*ロボットの説明 [#ta36f524]
紙コップを円まで運ぶために紙コップをひっかけるためのアームを機体の前方に取り付けた

円まで紙コップを運んだところでアームを180°回転させ紙コップを被せるように円の中にいれていく
*戦略 [#q28d933b]
ロボット前方のアームで紙コップをひっかけ、その状態で円まではこび、アームを180°回転させることで紙コップを被せて円の中に積んでいく戦略。

*プログラムの説明 [#y7aae23b]
**基本となる定義 [#eb124638]
 #define TURN_TIME 5
 #define BLACK 42
 #define WHITE 50
 #define RIGHT_H OnFwd(OUT_A); OnRev(OUT_C); Wait(TURN_TIME);//右旋回
 #define RIGHT_L OnFwd(OUT_A); Off(OUT_C); Wait(TURN_TIME);//右回転
 #define LEFT_H OnFwd(OUT_C); OnRev(OUT_A); Wait(TURN_TIME);//左旋回
 #define LEFT_L OnFwd(OUT_C); Off(OUT_A); Wait(TURN_TIME);//左回転
 #define GO_FORWARD(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC);
 #define STEP 1
 #define ARM OnFwd(OUT_B);Wait(TURN_TIME);//アーム回転
 
**サブルーチン [#p4661624]
黒い線上をたどるプログラムになっており、交差点で一時停止し、音が鳴る。~
交差点の判断にはタイマーで、黒が0.35秒以上続いたときに判断するようにしてある。~
線上をたどるうえで、線の右側をたどるようになっている。黒の時は右に、白の時は左に回転する。
 sub LINE()
  {
   ClearTimer(0);
   while(FastTimer(0) < 35) {
       if (SENSOR_2 < BLACK) {
         RIGHT_L;
          } else
             if (SENSOR_2 < BLACK+2){
              RIGHT_H;                 
               }
               else if (SENSOR_2 > WHITE-2) {
               LEFT_L;
               ClearTimer(0);
                } else if (SENSOR_2 >= WHITE) {
               LEFT_H;               
               ClearTimer(0);
               } else {
              GO_FORWARD(50);
              ClearTimer(0);
              }
               Wait(STEP);
               }
               Off(OUT_AC);
               ClearTimer(0);
               PlaySound(SOUND_UP);
               Wait(100);
                }  
以下二つのサブルーチンは、交差点で傾いた機体を正しい向きに直すことと、交差点を通過するためのものである。  
  sub CROSS_RIGHT()
  {
     while(FastTimer(0) < 100) {
        RIGHT_L;
    }
     ClearTimer(0);
    }
 

  sub CROSS_LEFT()
  {
     while(FastTimer(0) < 160) {
         LEFT_L;
     }
     ClearTimer(0);
    }
下のサブルーチンは半円のような急な曲がり角を曲がるためのプログラムである。
  sub WHOLE()
  {
     while(FastTimer(0) < 36) {
       if(SENSOR_2 < BLACK+2){
         RIGHT_L;
          } else
              if (SENSOR_2 > WHITE-2){
             LEFT_L;
             ClearTimer(0);
              } else if (SENSOR_2 >= WHITE) {
             LEFT_H;
             ClearTimer(0);
              } else {
             GO_FORWARD(50);
             ClearTimer(0);
              }
             Wait(STEP);
              }
             Off(OUT_AC);
             ClearTimer(0);
              }

**メインプログラム [#ad7f2dbb]
task main()
  {
    SetSensor(SENSOR_2, SENSOR_LIGHT);
    GO_FORWARD(120);
    LINE();
    WHOLE();
    LINE();
    CROSS_LEFT();
    LINE();
    CROSS_LEFT();
    GO_FORWARD(80);
    LEFT_(50);
    GO_FORWARD(90);
    LINE();
    CROSS_RIGHT();
    LINE();
    CROSS_RIGHT();
    LINE(); 
    ARM(45);
 }

*反省 [#q73f6d22]
グループで集まる時間がとれず、納得のいくものにできなかった。プログラムも不完全なものになってしまった。他のグループのプログラムがどのようなものかみたいとおもう。

*まとめ [#m4e4f2aa]
同じ班の中で役割分担がうまくできず、一部の人がほとんどの作業する状態になってしまった。協力してできていれば少しでもいい結果を残せていたと思う。各グループそれぞれのロボットをつくっていて、自分では思いもしなかったロボットの紙コップを持ち上げる方法をしているグループばかりで、とても驚かされるとともに、それを踏まえた上でもう一度つくったらきっとさらにすごいものが生まれるんだろうなとおもった。プログラムだったりロボットをつくる経験を今後生かせるときがくるとおもう。

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