*ロボット本体の説明 [#p47131b1]
出力端子Aで左のタイヤ、Cで右のタイヤを操作する。またBでアームの操作をする。入力端子2には光センサーが取り付けてある。

**アームの説明 [#xc4e9410]
アームはクワガタのような形をしていて、ボールを挟むようにした。またボールを放す時に同時に
シュートもできるようにしてある。
シュートもできるようにしてある。本体の後ろ側にあるモーターが回って、それによって本体下にある棒が押し出されてアームについている歯車が回転し、アームが開閉する。
#ref(./6.jpg,50%)
**タイヤの説明 [#b8ff6ae9]
タイヤはROBOTICS INVENTION SYSTEM 2.0の17頁にあるものを使用した。
またタイヤとコンピュータとの間には少し空間があり、アームを動かすための装置がある。
#ref(./5.jpg,40%)
#ref(./7.jpg,40%)
*プログラムの説明 [#zeff2aa7]
今回図のCからAへ向かうプログラムを作成した。
#ref(./2015a-mission2.png,50%)
そのプログラムは下記のとおりである。
またこのプログラムは黒線の左側をライントレースするプログラムである。
定義の説明はプログラム内に、task mainの説明はプログラムの下に示した。

 #define THRESHOLD 45
 #define set_power_h SetPower(OUT_AC,7);
 #define set_power_l SetPower(OUT_AC,3);
 #define go_forward OnFwd(OUT_AC);
 #define turn_right_w set_power_l;OnFwd(OUT_A);Off(OUT_C); //右旋回
 #define turn_right_s set_power_h;OnFwd(OUT_A);OnRev(OUT_C); //右折
 #define turn_left_w set_power_l;OnFwd(OUT_C);Off(OUT_A); //左旋回
 #define turn_left_s set_power_h;OnFwd(OUT_C);OnRev(OUT_A); //左折
 #define STEP 1
 #define hasamu OnFwd(OUT_B);Wait(15);Off(OUT_B); //ボールを挟む動作
 #define hanasu OnRev(OUT_B);Wait(15);Off(OUT_B); //ボールを放しシュートする動作
 task main()
 {
 SetSensor(SENSOR_2,SENSOR_LIGHT);
 int m = 0;
 int n = 0;
 int time = 6;
 while (m < 5) 
  { if (m == 1)
   { hasamu;m++; 
 }  else if (m == 2)
 {   time -= 1;m++;}
    else { 
      while (n < time) { //指定された回数turn_left_sしたら交差点判断。
       if (SENSOR_2 < THRESHOLD-5) {
        turn_left_s;n++;
 }     else {
        if (SENSOR_2 < THRESHOLD-2) {
         turn_left_w;
 }      else if (SENSOR_2 < THRESHOLD+4) { 
         go_forward;
 }      else if (SENSOR_2 < THRESHOLD+6) {
         turn_right_w;
 }      else {
         turn_right_s;
 }
        n = 0;
 }
 Wait(STEP);
 }
 Off(OUT_AC);Wait(200);
 turn_right_s; Wait(10);
 go_forward;Wait(10);//交差点判断後、方向修正して交差点を渡る。
 n = 0;m ++;
 }}
 Off(OUT_AC);
 hanasu;
 }

**task mainの説明 [#g3e068d4]
変数mは次に何をすればいいのかの判断に使われる。

mは交差点判断したとき、挟む動作をしたときに1ずつプラスされるようになっている。
mによって交差点Qを判断した後に挟む動作をし、その後ライントレースに戻ることができ、最後のシュートするタイミングも間違えることがなくなる。

変数nは交差点判断に使われる。交差点Qまでのカーブは急であるため、交差点と判断することがある。そのため交差点と判断するまでの時間を延ばしてある。しかしそのままだとT字路Pで交差点判断をしなくなるのでその時間を短くしてある。その時間調節は変数timeによって行われ、タイミングは変数mに依存する。

T字路Pで右折するのは、交差点判断した後ライントレースに戻った際、白なら右折し続けろ(else {turn_right_s;},34行目)という指示があるからである。
*反省 [#xe4174cb]
今回はロボット本体は簡単であったが、プログラムの調節が難しかった。このプログラムはコースページにあるものを参考に作ったがこのようなプログラムを1から作るのは非常に困難であると思うので、まだまだプログラムについて学びたいと考えた。

この課題期間に一回授業を欠席してしまったため、事前に伝えてはあったものの班員に迷惑をかけてしまった。今後は欠席しないようにしたい。

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