[[2015a/Member]]

〜課題2の目次〜
#contents

*課題2の内容 [#zf0a17c6]
各チームで指定されたコースを作り、「ミッション」を遂行するためのロボットを作成する。

詳しくはhttp://yakushi.shinshu-u.ac.jp/robotics/?2015a%2FMission2を参照のこと。
*製作したロボットの概要 [#s2500f45]
**ロボットの概観 [#sf976709]
#ref(2015071621100500.jpg)
**ロボットについて [#nf0a1ee5]
***使用したモータ [#m9b4ce9c]
-車輪(モータB,C)
-ボールを捕まえるためのアーム(モータA)
***工夫した点 [#nede290b]
#ref(2015071621513900.jpg)
最初は光センサーを車輪より後ろに取り付けていたがうまくライン上を走らせることができなかったので一番前に取り付けた。
#ref(2015072011231200.jpg)
そのため、光センサーの後ろにはタッチセンサーが付いており、光センサーにボールがぶつかることでタッチセンサーが反応し、アームが下がりボールを捕まえる。ボールを捕まえた後はアームはそのまま下がった状態でゴールするようになっている。
***問題点 [#b38f2bf7]
-ボールがある程度固定されていないとタッチセンサーが機能しない
-電池を交換することで閾値やスピードが大幅に変化した
*プログラムの説明 [#x75661a7]
**C地点からA地点へ [#n0dd8607]
 #define IKICHI_BLACK 45
 #define SPEED_HIGH 35
 #define SPEED_LOW 30
 #define turn_left OnFwd(OUT_B,SPEED_HIGH);Off(OUT_C);
 #define turn_left1 OnRev(OUT_C,SPEED_LOW);OnFwd(OUT_B,SPEED_LOW);
 #define turn_right Off(OUT_B);OnFwd(OUT_C,SPEED_HIGH);
 #define turn_right1 OnRev(OUT_B,SPEED_LOW);OnFwd(OUT_C,SPEED_LOW);
 #define STEP 1
 #define nMax 30
 #define short_break Off(OUT_BC);Wait(2000);
 #define go_forward OnFwd(OUT_BC,SPEED_HIGH); 

 sub catch_ball() //ボールを捕まえる
 {
   SetSensorTouch(S2);
   if (SENSOR_2 == 1) {
       OnFwd(OUT_A,SPEED_HIGH);
       Wait(200);
       Off(OUT_A);
   }
 }

 task main ()
 {
   SetSensorLight(S1);
   int nOnline=0;
   while (true) {
       while (nOnline < nMax) {
          if (SENSOR_1 < IKICHI_BLACK-15) { //閾値が45-15のとき左旋回、カウンターを増やす
              turn_left1;
              nOnline++;
        } else if (SENSOR_1 < IKICHI_BLACK-7) { //閾値が45-7のとき左折
              turn_left;
        } else if (SENSOR_1 < IKICHI_BLACK+7) { //閾値が45+7のとき前進
              go_forward;
        } else if (SENSOR_1 < IKICHI_BLACK+15) { //閾値が45+15のとき右旋回
              turn_right1;
        } else {                                //その他の場合は右折
              turn_right;
        }  
        nOnline=0;
    }
   Wait(STEP);
   }
   short_break; //2秒間の停止
   turn_right1; //右へ旋回する
   catch_ball();
 }
**プログラムの問題点 [#j5d0d5c8]
whileのループから抜け出すことができていなかったため、思っているようにロボットを動かすことができなかったのだと思われる。カウントもうまく使いこなせていなかった。
whileのループから抜け出すことができていなかったため、思っているようにロボットを動かすことができなかったのだと思われる。カウントもうまく使いこなせていなかった。カウントはwhile文の最後のnOnline=0;を書いているためリセットされてしまっている。

whileやカウントの使い方を練習問題などでマスターできていれば良かったと思う。
*ロボット・プログラムの製作時間 [#m747c2d9]
-ロボットの製作時間・・・・約4時間
-プログラムの製作時間・・・約6時間
-ホームページの製作時間・・約2時間
*反省点 [#i9121fa7]
C地点からA地点へライントレースをするプログラムは製作できたが、交差点での2秒間の停止やボールを捕まえることがうまくいかなかったので残念だった。

もっとプログラムが正確に書ければミッションを成功させることができたと思う。

今回のコースやロボットの製作は楽しんで取り組むことができたので良かった。

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