目次
#contents

*課題の説明 [#pca1ab11]
A地点をスタートしてQ付近の3/4円周上でピンポン玉をつかみ、~
そのピンポン玉をD地点においたゴールへシュートする (一人目)~
Aスタート → P直進 → Q直進 → (ピンポン玉をキャッチ) → Q直進 ~
→ R右折 → P直進 → S左折 → Dへシュート
#ref(2016b/Member/yosuke/Mission2/2016b-mission2.png,70%,コース)

*ロボット本体の説明 [#w7f1259c]
アームは写真のような形状にしました。
黄色いL字型のようなパーツにギアをつけたものを二つ作りギアをかみ合わせ、~
前進するとアームが閉まり後退するとアームが開くという仕組みです。~
なぜこのような形にしたかというと比較的簡単に作ることができると考えたからです。~
実際作る際には簡単に作ることができピンポン玉をつかむのに適していました。~
ボールをキャッチする際にはボールの直前まで行きアームを閉じ2つのアームで~
ボールをはさみゴールまで運ぶという方法です。~
ボールを発射する際にはアームを開き少し機体で押しボールを転がしシュートするという方法です。
#ref(2016b/Member/yosuke/Mission2/kuwagata.jpg,130%,アーム)
#ref(2016b/Member/yosuke/Mission2/robothi.jpg,130%,本体)
#ref(2016b/Member/yosuke/Mission2/ue.jpg,130%,本体)
#ref(2016b/Member/yosuke/Mission2/ura.jpg,130%,本体)
*プログラム [#l258419c]
定義(turnはsennkaiよりも大きく回転しない)

 #define migisennkai OnFwd(OUT_A);OnRev(OUT_C); 
 #define rightturn OnFwd(OUT_A);Off(OUT_C); 
 #define hidarisennkai OnFwd(OUT_C);OnRev(OUT_A); 
 #define leftturn OnFwd(OUT_C);Off(OUT_A); 


しきい値は48で使用した。~
交差点を見つけたら1秒静止して0.2秒戻る
 sub trace(){
  SetSensor(SENSOR_2,SENSOR_LIGHT);
  ClearTimer(0);
  while(FastTimer(0)<=25){
    if(SENSOR_2>52){
      migisennkai;ClearTimer(0);     //白なら右旋回   
     }
    else if(SENSOR_2>50){
      rightturn;ClearTimer(0);      //しきい値よりも白なら右に曲がる
     }
    else if(SENSOR_2>48){
      OnFwd(OUT_AC);ClearTimer(0);     //しきい値付近なら直進
     }
    else if(SENSOR_2>45){
      leftturn;ClearTimer(0);        //しきい値より黒なら左に曲がる 
     }
    else{
      hidarisennkai       //黒なら左旋回
     }
  }
  Off(OUT_AC);Wait(100);OnRev(OUT_AC);Wait(20);
 }

Q点からボールまでの間のプログラム~
約3秒かけてQ点からボール付近まで移動する。
 sub trace1(){
  SetSensor(SENSOR_2,SENSOR_LIGHT);
  ClearTimer(0);
  while(FastTimer(0)<=300){
    if(SENSOR_2>52){
      migisennkai;    //白なら右旋回   
     }
    else if(SENSOR_2>50){
      rightturn;      //しきい値よりも白なら右に曲がる
     }
    else if(SENSOR_2>48){
      OnFwd(OUT_AC);     //しきい値なら直進
     }
    else if(SENSOR_2>45){
      leftturn;        //しきい値より黒なら左に曲がる 
     }
    else{
      hidarisennkai       //黒なら左旋回
     }
  }
 Off(OUT_AC);Wait(100);OnRev(OUT_AC);Wait(20);      
 }

メインのプログラム
 task main()
 {
  trace();    //P点まで進む
  
  OnFwd(OUT_AC);Wait(60);     //交差点で直進
  
  trace();    //Q点まで進む
  
  OnFwd(OUT_AC);Wait(60);    //交差点で直進
  
  trace1();  //交差点からボールまで
  
  OnFwd(OUT_B);Wait(20);Off(OUT_B);    //ボールを取る
  
  trace();    //Q点まで進む
  
  OnFwd(OUT_AC);Wait(60);    //交差点で直進
  
  trace();    //R点まで進む
  
  rightturn;Wait(60);    //T字路右折
  
  trase();     //P点まで進む
  
  OnFwd(OUT_AC);Wait(60);     //交差点で直進
  
  trace();    //S点まで進む
  
  leftturn;Wait(60);    //T字路左折
  
  trace();    //D点まで進む
  
  OnRev(OUT_B);Wait(20);OnFwd(OUT_AC);Wait(50);    //アームを開き押してシュート
  
  Off(OUT_AC);
 }


*まとめ [#p5e02338]
プログラムの完成が間に合わず実際に実機を使って動作するか確認することが~
できなかったので非常に残念でした。~
プログラムをどのように作るか方向性が建てられなかったので~
他の人の作品や以前の人たちの作品を参考にプログラムを作りました。~
実際に実機で動作するかは確認できませんでしたが、~
他の人たちの作品や過去の人たちの作品からどういったプログラムを~
作るとライントレースができるか理屈は理解することができたので~
今度の作品では今回学んだことを活かしてロボットが作れたらいいなと思いました。

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