*目次 [#p29d7ff8]
#contents
*課題 [#k9798d32]
#ref(./2016b-mission3.png,全体図)
最後の課題は、ピッチャーロボットはA地点からQ地点、バッターロボットはC地点からB地点までゴールに接しないように行き、5球投げそれを打つというものだ。
&br;私たちはピッチャーロボを担当し、中でも私は移動のプログラムを担当した。
*ロボットの説明 [#o3709025]
**全体像 [#z82ad345]
これがロボットの概観である。
#ref(./s_14084.jpg,全体像)
&br;タイヤは2つにして、後ろは滑るようになっている。
&br;進行方向に対して右側にボールを打ち出すようにしてある。また、本体自体も右方向へ向いているため、そのまま通信ができるようになっている。
&br;これのおかげで、スタート地点から所定の位置に行くことが簡単になった。
**投球部分 [#ve84eb1b]
ボールを投げる機構はこのようになっている。
#ref(./s_14086.jpg,ピッチング)
&br;
#ref(./s_14090.jpg,50,ピッチング)
黄色のブロック(以下ストッパー)はボールをせき止めて、下の2つの黒いモノはすべり台のような役目をしている。ボールが投げ出される仕組みはこうである。
黄色のブロック(以下ストッパー)はボールをせき止めて、下の2つの黒い曲がったブロックはすべり台のような役目をしている。ボールが投げ出される仕組みはこうである。
&br;&br;�―蕕瓩魯棔璽襪鮴僂鵑西�態で、ストッパーがせき止めている。
&br;�▲癲璽拭爾�回転することによってギアが回り、ストッパーが手前に来て、ボールが下におちる。ただしこのとき(2つめの写真を見ればわかるが)、すべり台が上に来るように回転して、ボールが流れないようになる。
&br;��ストッパーが奥に戻ると、同時にすべり台が下がってきて、打ち出される。
&br;&br;こんな感じである。
&br;すべり台のギアを小さくすることで、ストッパーの移動と比べてより多く回転するようにした。
*プログラムの説明 [#h51302c2]
サブルーチンで使用するものを以下のように定義した。
 #define THROW_SIGNAL 100        //こちらが送る数字
 #define BATTING_SIGNAL 200      //相手から送られてくる数字
                                //ピッチングに用いる
 
 #define CALL_SIGNAL 201         //こちらが送る数字
 #define RESPONS_SIGNAL 101      //相手から送られてくる数字
                                                               //通信のチェックに用いる

これらはすべて、通信用の数字である。詳しくはこのあと説明する。
**AからQ地点まで〜 [#t2eea11b]
まずAからQ地点まで行くプログラムである。
 sub AtoQ()
 {
      SetSensor(SENSOR_2,SENSOR_ROTATION);
      ClearSensor(SENSOR_2);
      SetPower(OUT_C,4);
 
      Wait(100); 
      PlaySound(SOUND_UP);     //スタート音と重ならないように、1秒後鳴る
 
      OnFwd(OUT_B);
      OnRev(OUT_C);
      until(SENSOR_2==4);      //回転センサが4になるまで、左旋回
      Off(OUT_BC);
      ClearSensor(SENSOR_2);
 
      OnRev(OUT_BC);
      until(SENSOR_2==-65);    //回転センサが-65になるまで、直進
      Off(OUT_BC);
      ClearSensor(SENSOR_2);
 }

&br;スタートはA地点であるが、方向はB地点を向いているため、初めに左へ約45°旋回してからQに向けて直進という感じにした。
&br;私たちの班では、最初の移動で光センサは使わずに、回転センサだけでプログラムを組んだ。ここで苦労したのが、毎回所定の位置に行くけれど、少しの誤差がどうしてもなくすことができなかった。光センサを使用しておけばよかったと、今になってすごく感じる。
&br;それでもかなりの確率でベストポジションに行けたので、よかったと思っている。
&br;Cだけパワーを抑えた理由は、それぞれを同じ力にするとBのタイヤの方へ曲がっていってしまうためである。
**通信のチェック [#oe871df0]
 sub tsusin_check()
 {
     ClearMessage();
     while(Message()!=RESPONS_SIGNAL){
         Wait(40); 
         SendMessage(CALL_SIGNAL);        //応答が来るまで、CALL_SIGNALを送り続ける
     }
     PlaySound(SOUND_UP);                 //応答が来たら、音を鳴らす
 } 
これは通信ができるかチェックするプログラムである。
&br;こちらが通信を送り続け、向こうはこれを受け取ったら返信して、こちらがその返信を受け取ったら停止する。
&br;といった感じである。
&br;これが終われば、通信ができる状態になっているので、その後の動作が可能になる。
**ピッチング [#m7a0bab2]
 sub pitching()
 {
     SetPower(OUT_A,0);
     OnFwd(OUT_A);
     Wait(20);
     Off(OUT_A);     //ストッパーが手前に移動し、ボールを通せるようにする
      
     Wait(60);
      
     OnRev(OUT_A);
     Wait(21);
     Off(OUT_A);     //ストッパーを戻し、ボールを転がす
 }

これはピッチング自体のプログラムであり、後のプログラムに組み込む。
&br;ピッチングの方法の詳細は上で説明したため、ここでは省く。
&br;パワーを最大限小さくして、激しい動きによる負荷を抑えた。

 sub tsusin_pitching()
 {
     ClearMessage();
       while(Message()!=BATTING_SIGNAL){
           Wait(30);
           SendMessage(THROW_SIGNAL);        //返答が来るまで、THROW_SIGNALを送り続ける
       }
     PlaySound(SOUND_LOW_BEEP);
     pitching();                              //音を鳴らし、ピッチング
 }

そしてこれが通信部分を組み込んだプログラムである。
&br;原理は通信チェックと同じで、こちらが通信を送り続けて受け取ったことを確認したら、音を鳴らしてピッチングを始める。
**メインプログラム [#u8c41483]
これがメインのプログラムである。
 task main()
 {
     AtoQ();                   //AからQへ移動
     tsusin_check();           //通信のチェック
     repeat(5){
        tsusin_pitching();
     }                         //ピッチングを5回繰り返す
 }
task mainはとてもすっきりしたものになってよかった。複雑なプログラムではないので、修正するときも、とてもやりやすかった。
&br;5回繰り返す部分は、単純にrepeatを用いた。
&br;ちなみにバッターロボのチームのHPは[[こちら:http://yakushi.shinshu-u.ac.jp/robotics/?2016b%2FMember%2Fats%2FMission3]]である。
*結果 [#p5d15196]
私たちのグループは7チーム中4位であった。
&br;一回目はボールが詰まってしまって、思ったような結果が出なかった。二回目はロボットのボールを積む部分を修正して挑んだが、今度はバットを振るタイミングが少し早くてボールをあまり打つことができなかった。けれど、それ以外は個人的にはパーフェクトだった。また、1球だけゴールに入ったので満足だった。
*反省点と感想 [#e52ae42f]
今回は最後の課題ということで、とても難易度が高かった(と思う)。ロボットを1台動かすのと、2台を連携させて動かすのとは全然難易度が違っていて、すごく大変だった。だが、前回よりはプログラムはすっきりしていて、単純なものであったので、その点だけはよかったなと思う。
&br;この授業を通して、私はとても大きな達成感を感じられた。最初は、文系であるためにこういうプログラミングなど、しっかりできるか不安だったが、案外努力すればできるものであった。将来、これを使うことはないだろうけれど、とてもいい経験ができたんだとと思う。
&br;約5か月間、お疲れ様でした。

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