[[2016b/Member]]
#Contents
*課題 [#y01c07bb]

#ref(マップ.png)

ピッチャーロボットとバッターロボットで野球盤ゲームをする

*ロボット [#ic84c96f]
#ref(前から.png)
バッターロボットを相方くんと担当した
#ref(真上コード.png)
立幅は20cmぎりぎり、横幅は15cmない程度。ボールをしっかりつかむ形のアームが大きく横についているので、本体やモーター、タイヤの部分はコンパクトにした。

アームに球が入ってしまえばある程度ゴールに入れるコントロールは効くが、ゆっくり転がる球が床面のわずかな凹凸の影響を受けて直線的には投げられず、安定しなかった。なのでほかの多くの班の様に左右のフリッパーでとりあえずボールに当てて打つ構造のほうが、得点を多く得られたかもしれない。

#ref(開.png)
#ref(閉/pmg)

アームの構造。モーターAで上半分を開閉させる。下半分はぶら下がっているので閉じている時、半分開けている時は背面が床面に垂直を維持する。大きく開けたときにボールを射出することができる。

*担当プログラム [#tbdddc19]

ロボットがCからスタートしてBで向きを変える所までのプログラムを作った。
下のGIFにおおよその動きとその説明をまとめた。

#ref(3TRUE.gif)

**PR間につくまで [#efb10847]


 #define go_straight(t)  RotateMotor(OUT_BC,50,t);
 #define go_nonstop      OnFwd(OUT_BC,50);
 #define SASETSU         OnRev(OUT_BC,50); Wait(400); Off(OUT_BC); OnFwd(OUT_C,50); Wait(1500); Off(OUT_C);

決まった距離だけ直進するときはgo_straight(t)、光センサーでラインを認識するまで直進するときはgo_nonstopを使い分けるようにした。
また、SASETSUは課題2で使用したものを流用した。

 sub BEGIN()
 {
     Wait(1500);
     turn(120);
     go_straight(1300);
     PlaySound(SOUND_CLICK);
     go_nonstop;
     until(SENSOR_3<=40);
     Off(OUT_BC);
     PlaySound(SOUND_CLICK);
     Wait(1000);
     SASETSU;
 }


**五秒間ライントレース [#tcfe86a6]

課題2で書いたライントレースを少し変えて、五秒の間だけ実行し、交差点認識はしないプログラムを作った。

時間以外の制御方法がわからなかったので何回か試走させて五秒に決めた。

 #define turn_right      OnFwd(OUT_B,40);
 #define turn_right_slow OnFwd(OUT_B,40); OnRev(OUT_C,30);
 #define turn_left       OnFwd(OUT_C,40);
 #define turn_left_slow  OnFwd(OUT_C,40); OnRev(OUT_B,30);
 #define go_line         OnFwd(OUT_BC,40);
 #define FOLLOW_TIME 5000

 sub FOLLOW_LINE()
 {
     long t0=CurrentTick();
 
     while(CurrentTick()-t0<FOLLOW_TIME){
       if(SENSOR_3<=38){
         turn_right;
       }else if(SENSOR_3<=45){
         turn_right_slow;
       }else if(SENSOR_3<=50){
         go_line;
       }else if(SENSOR_3<=59){
         turn_left_slow;
       }else{
         turn_left;
       }
     }
     Off(OUT_BC);
 }


課題2で書いたライントレースを少し変えて、五秒の間だけ実行し、交差点認識はしないプログラムを作った。

また、時間以外の制御方法がわからなかったので何回か試走させて五秒に決めた。


**安定して定位置につく [#n9c9b6f8]

初めはBの枠で交差点認識した時に停止させてから向きを調整する考えでいたが、

・交差点認識の誤差が大きい

・交差点認識した後の機体がマップの外に向き、そこから軌道修正が安定しない

・発表まで時間がない

等の理由で、交差点認識ではなくBの枠を内側から判断して機体の位置を決めるプログラムを作った(詳しくは上のGIFを参照)。

 sub READY()
 {
     go_straight(500);
     OnRev(OUT_BC,50);
     until(SENSOR_3<=40);
     Off(OUT_BC);
     PlaySound(SOUND_CLICK);
     Wait(1000);
     turn(20);
     go_straight(400);
     turn(-70);
     PlaySound(SOUND_UP);
 }

*実演の反省 [#gef37162]
*学んだこと [#r8a2947a]
*感想 [#aa2d84d8]


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS