メンバー

  • yno8...チームのリーダー的な存在。何をするべきかを判断してどんどん良い方向へ導いてくれた。プログラミング、ロボに関しても最も熱心に取り組んでくれた。
  • kawa43...yno8と一緒に主にプログラミングに取り組んでくれた。この二人がいなければプログラミングはうまくいかなかったと思う。
  • chise...プログラミング担当でいろいろな案を出してくれていた。三人の力でプログラミングはとても完成度の高いものになったと思う。
  • d.ichi...ロボット担当。限られたパーツで素早くとてもいいものを作り上げてくれた。球の発射方法も彼が考えてくれた。
  • penenoryta...ロボット担当。主にロボの改善を行った。いかにボールをまっすぐ飛ばすか、各パーツの固定法などを考えた。

ロボットの紹介

IMG_1127q.jpg

◎前回からの改良点&工夫したところ

  • 今回は前回よりも重心をさらに下げ、タイヤを増やし、かつタイヤの間隔も大きくすることで安定性を向上させた。
  • アームはセンサーに当たらないようにあいだをあけ、さらにちょうどそのあいだに球がはさまり安定して球を打ち出せるようなアームに仕上げた。
  • ギアをいくつも組み合わせることで本体の中心で球をキャッチし打ち出せるようにもしてある。
  • アームがL字型になっていることにより球を打ち出すときに少し浮かせることができ結果、紙の凹凸に左右されることなく球をパスすることができる。

コースの攻略

robocon2013a.png

コースはスタートをしたらまず1つめのロボットが球を取りに行き2つめのロボにパス、さらに2つめのロボは1にパス、そしてもう一度2にパスをしてシュートを決めるというものです。 今回は球のパスがあるので電池の残量などにより進む位置が変わってしまうと正確なパスができなくなってしまうのでモーターを回す角度を決めるプログラミングをすることで、できる限り正確に決まった位置にパスをできるようにしました。またBluetoothをうまく使うことで、お互いが決めておいた位置についたらパスをするようにし、パスの成功率を向上させました。 またお互いのロボットを全く同じ形にさせることで、お互いのパスの方法などを同じにして安定性を向上させました。

プログラムの内容

#define zone1 37
#define zone2 45
#define zone3 60
#define zone4 65
#define SPEED 45
#define LOWSPEED SPEED*0.625
#define mae OnFwd(OUT_BC,SPEED*0.8);
#define STEP 1
#define nMAX 100
#define SIGNAL1 11
#define SIGNAL2 12
#define CONN 1
int p=0;
int n=0;
int m=0;
int msg=0;
   sub migigawa(int x) //交差点がx回あるまでトレース
       {
         while(m < x) {
           while(p < nMAX && m<x) {
               if (SENSOR_4 < zone1) {
               OnFwd(OUT_B,SPEED);OnRev(OUT_C,LOWSPEED);
               p++;
         } else {
             if (SENSOR_4 < zone2) {
               OnFwd(OUT_B,SPEED);Off(OUT_C);
           } else if (SENSOR_4 < zone3) {
               mae;
           } else if (SENSOR_4 < zone4) {
               OnFwd(OUT_C,SPEED);Off(OUT_B);
           } else {
               OnFwd(OUT_C,SPEED);OnRev(OUT_B,LOWSPEED);
              }
               p=0;
              }
               Wait(STEP);
              }
               OnFwd(OUT_C,SPEED);OnRev(OUT_B,LOWSPEED);
               Wait(nMAX*STEP);
               OnFwd(OUT_BC,SPEED);Wait(300);
               p=0;
               m++;
              }
               m=0;
}
   sub hidarigawa(int x) //交差点がx回あるまでトレース
     {
       while(m < x) {
           while(p < nMAX && m<x) {
               if (SENSOR_4 < zone1) {
               OnFwd(OUT_C,SPEED);Off(OUT_B);
               p++;
         } else {
             if (SENSOR_4 < zone2) {
               OnFwd(OUT_C,SPEED);OnRev(OUT_B,LOWSPEED);
           } else if (SENSOR_4 < zone3) {
               mae;
           } else if (SENSOR_4 < zone4) {
               OnFwd(OUT_B,SPEED);Off(OUT_C);
           } else {
               OnFwd(OUT_B,SPEED);OnRev(OUT_C,LOWSPEED);
              }
               p=0;
              }
               Wait(STEP);
              }
               OnFwd(OUT_B,SPEED);OnRev(OUT_C,LOWSPEED);
               Wait(nMAX*STEP);
               OnFwd(OUT_BC,SPEED);Wait(300);
               p=0;
               m++;
              }
               m=0;
}
task main ()
{
   SetSensorLight(S4); //球をキャッチしてパスするまで
   Wait(2000); 
   migigawa(2); 
   Off(OUT_BC);Wait(1000); 
   RotateMotor(OUT_C,-SPEED,200);RotateMotor(OUT_B,SPEED,120);Off(OUT_BC);
   mae;OnRev(OUT_A,20);Wait(1500);Off(OUT_A);
   mae;until(SENSOR_4 < 50);Off(OUT_BC);
   OnRev(OUT_BC,SPEED);Wait(500);OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50);
   OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);Wait(500); 
   OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);until(SENSOR_4 < 50); 
   hidarigawa(1);
   Off(OUT_BC);Wait(1000);RotateMotor(OUT_BC,-SPEED,430);Wait(1000);
   RotateMotor(OUT_B,-SPEED,300);RotateMotor(OUT_C,SPEED,100);Off(OUT_BC);
   Wait(1000);SendRemoteNumber(CONN,MAILBOX1,SIGNAL1);
   OnFwd(OUT_BC,SPEED);RotateMotor(OUT_A,100,400);Off(OUT_ABC);
   RotateMotor(OUT_BC,-SPEED,200); //球をもらうまで
   OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50);RotateMotor(OUT_BC,SPEED,50);
   OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);until(SENSOR_4 < 50);
   Off(OUT_BC);Wait(5000);
   hidarigawa(1);
   RotateMotor(OUT_BC,SPEED,100);Off(OUT_BC);
   RotateMotor(OUT_BC,-SPEED,10);RotateMotor(OUT_C,SPEED,550);Off(OUT_BC);
   SendRemoteNumber(CONN,MAILBOX2,SIGNAL2);
   Wait(500);
   OnRev(OUT_A,20);Wait(1500);Off(OUT_A);
   OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50);Off(OUT_BC);RotateMotor(OUT_BC,SPEED,80); //もう一度相手にパスするまで
   OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);until(SENSOR_4 < 50);
   Off(OUT_BC);Wait(7000);
   hidarigawa(1);
   RotateMotor(OUT_BC,SPEED,50);Off(OUT_BC);
   RotateMotor(OUT_B,-SPEED,400);Off(OUT_B);RotateMotor(OUT_C,-SPEED,20);
   SendRemoteNumber(CONN,MAILBOX3,SIGNAL1);
   OnFwd(OUT_BC,SPEED);RotateMotor(OUT_A,100,400);Off(OUT_ABC);
   RotateMotor(OUT_BC,-SPEED,50);Off(OUT_BC); 
}

まとめ

今回は以前よりもかなり難しく、複雑なプログラミングとロボの構成が必要でしたが、チームのみんなの協力によってなんとか完成することができてよかったです。 以前の反省点であるロボの安定性と電池の残量の問題も解決できました。 とても大変でしたが楽しく充実した時間がみんなとおくることができたと思います。 ただ最後の発表にはみんなが集まることができなかったので少し残念でした。


添付ファイル: filerobocon2013a.png 151件 [詳細] fileIMG_1127q.jpg 133件 [詳細] fileIMG_1127.JPG 69件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-08-14 (水) 17:33:51