ロボコン!A1の作戦!!

A1は普通にやるのではなく、ほかのチームがやらないような方法を考え、障害物をどかして横から引き抜くことで、缶の動きを簡略化させることにしました。
また、どかした缶はもちろん元に戻す方向で計画しました。

流れのイメージ

1号機= 2号機=

  1.  〆限Δ紡垉 
  2. ◆‐祿科Aをどかす。
  3. ◆ヾ未魄っ張り出す。
  4. ◆ヾ未魏にしたまま転がす。
  5.  ヾ未鮗け取りゴールへ向かう。
  6. ◆‐祿科Bをどかして道を作る。
  7.  .粥璽襪靴燭藐気琉銘屬紡垉 
  8. ◆。暇槎椶隆未魄き出す。
  9. ◆ヾ未鯀り出す。
  10.  ヾ未鮗け取りゴールへ向かう。
  11. ◆‐祿科Bを元の位置に戻す。

これが一連の流れです。

ロボット

完成ロボット

奥が1号機。手前が2号機です。
これは2号機が1号機に缶を受け渡したときの写真です。

プログラム

一号機(仮称)

2006/8/2  製作者//シュート・tomo
#define front(j) OnFwd(OUT_A+OUT_C);Wait(j);Off(OUT_A+OUT_C);	//前進マクロ
#define back(j) OnRev(OUT_A+OUT_C);Wait(j);Off(OUT_A+OUT_C);	//後退マクロ
#define right(j) OnRev(OUT_C);OnFwd(OUT_A);Wait(j);Off(OUT_A+OUT_C);	//右回転マクロ
#define left(j) OnRev(OUT_A);OnFwd(OUT_C);Wait(j);Off(OUT_A+OUT_C);	//左回転マクロ
#define tomaru(j) Off(OUT_A+OUT_C);Wait(j);	//停止マクロ

task main()
{

tomaru(2400);	//二号機が缶を持ってくるまで待機

front(140);tomaru(150);	//缶を受け取る
back(395);tomaru(150);	//後退
front(50);tomaru(150);	//缶の速度を落とすため、前進

right(80);tomaru(150);	//右回転
front(280);tomaru(150);	//前進
back(50);tomaru(50);	//缶の速度を落とすため、後退
left(83);tomaru(150);	//左回転
front(250);	//前進

right(30);left(60);right(30);	//首を振って、木に対して本体を垂直に(しっかり押し込むため)
front(100);tomaru(150);	//缶を押し入れる

back(160);tomaru(150);	//初期位置へ帰還
left(71);tomaru(150);
front(240);tomaru(150);
right(71);tomaru(150);
front(220);tomaru(100);

front(165);tomaru(150);	//缶を受け取る
back(395);tomaru(150);	//後退
front(50);tomaru(150);	//缶の速度を落とすため、後退

right(80);tomaru(150);	//右回転
front(280);tomaru(150);	//前進
back(50);tomaru(50);	//缶の速度を落とすため、後退
left(83);tomaru(150);	//左回転
front(250);	//前進

right(30);left(60);right(30);	//首を振って、木に対して本体を垂直に(しっかり押し込むため)
front(100);tomaru(150);	//缶を押し入れる

back(160);tomaru(150);	//初期位置へ帰還
left(71);tomaru(150);
front(240);tomaru(150);
right(71);tomaru(150);
front(220);tomaru(100);

}

プログラムのポイント

  • これは2号機から送り出された缶を、ゴールまで正確に運ぶマシーンです。流れはいたって単純で、
  1. 2号機が缶をセットするまで待機する
  2. 缶を取り込み、ゴールまで運ぶ
  3. ゴールに缶をシュートする
  4. 通ってきた経路を戻り、セットされている缶の所まで移動する
  5. 以上をもう一度繰り返す

このようになるよう目指しました。

問題点と解決

はじめに考えたことは、移動するのに光センサを使うか、タイマーを使うか、こういうことでした。ほとんどのチームは光センサを使っていたので、僕はあえてタイマーで真っ向勝負することに決めました。それは少しのズレていても最後まで動くように、諦めないマシーンを作りたかったからです。 作成にあたって、問題点と解決方法は次のようなことが挙げられます。

  1. 取り込んだ缶を飛び出さないようにするには?  ⇒缶が入るときはあまり抵抗が無く、出るときは棒が引っかかるようなツメを前方につける
  2. マシーンが正確に90度に曲がるには?  ⇒缶を取り込んでいるときと取り込んでいないときでは、回転速度が変わってしまうので区別して時間を調節した
  3. 缶をしっかりシュートするには?  ⇒ただ押すだけではなく、木片との接触部を面ではなく点にして押す力をあげるように、頭を振ることで最後までしっかり押せる。また、少し長めに押すことで木片と垂直になり次の動作にスムーズに入れるようになった
  4. 2個目の缶のセットがズレてしまったら?  ⇒少し前進させて、ズレを調節させる

缶がしっかり取り込むことが出来れば、ほぼ100%ゴールまで運べるように作りました。

二号機(仮称)

2006/8/2 製作者//僕
#define front(t) OnFwd(OUT_A+OUT_C);Wait(t);         //前進
#define right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);  //右折
#define left(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);   //左折
#define back(t) OnRev(OUT_A+OUT_C);Wait(t);          //後退
#define up(t) OnFwd(OUT_B);Wait(t);                  //アーム上げる
#define down(t) OnRev(OUT_B);Wait(t);                //アーム下げる
#define ACoff Off(OUT_A+OUT_C);                      //車輪停止
#define Boff Off(OUT_B);                             //アーム停止
#define ABCoff Off(OUT_A+OUT_B+OUT_C);               //モーター全停止

task main()
{

      SetSensor(SENSOR_2,SENSOR_TOUCH);              //センサー2をタッチセンサーと定義(前)
      SetSensor(SENSOR_3,SENSOR_TOUCH);              //センサー3をタッチセンサーと定義(後)
      SetPower(OUT_A,7);                             //車輪の
      SetPower(OUT_C,7);                               パワー最大
      SetPower(OUT_B,3);                             //アームのパワーを3に定義
      
      OnFwd(OUT_A+OUT_C);                            //前進
      
      while (true)
      {
         if(SENSOR_2==1)                         //もし(前)センサー触れたら
         {
             ACoff;down(100);right(45);ABCoff;  //停止・缶をつかんで右へずらす・全停止
             front(50)ABCoff;                   //前へ押す
             Wait(100);up(150);Boff;Wait(100);  //アームを上げる
                  
             back(120);left(14);                //後退して進路調節
             OnFwd(OUT_A+OUT_C);                //前進

             while (true)                              //1本目引き出し
                  {               
                     if(SENSOR_2==1)                   //もし(前)がタッチしたら
                     {
                         ACoff;                        //停止
                         down(200);Boff;               //アーム下げ
                         back(210);                    //(後)がタッチするまで後退
                         until (SENSOR_3==1);
                         ACoff;Wait(100);
                         down(25);Boff;                //補正
                         right(10);ACoff;Wait(200);
                         front(15);ACoff;Wait(10);     //壁を避けるために前進
                         up(250);Boff;right(70);       //アーム上げて
                         ABCoff;                      缶を転がす
                         Wait(100);up(20);left(70);    //障害物Bへ
             ACoff;Wait(200);
                         front(300);Boff;              //押しのける
                         back(120);right(20);ACoff;    //2本目へ
                         OnFwd(OUT_A+OUT_C);
                                    
                         while (true)                  //2本目引きだし
                         {                         
                            if(SENSOR_2==1)
                            {
                               ACoff;                  //1本目と同じ
                               down(450);Boff;
                               back(210);
                               until (SENSOR_3==1);
                               ACoff;Wait(100);
                               back(100);ACoff;
                               front(15);ACoff;right(10);
                               ACoff;Wait(200);
                               up(200);Boff;right(50);
                               ABCoff;Wait(100);
                               back(24);ACoff;
                               left(14);ACoff;Wait(200); //障害物Aへ 
                               OnFwd(OUT_A+OUT_C);
                               
                               while(true)             //障害物Aを戻す
                               {
                                  if(SENSOR_2==1)
                                  {
                                      down(50);back(100);  //つかんで引っ張る
                                      ABCoff;Wait(200);
                                      up(100);Boff;
                                  }
                                                                                           }
                          }
                       }
                    }
               }
           }
      }
   }

プログラムのポイント

  • これはセットしてある缶を障害物を移動させ、横から引き出し缶を横に転がして送り出すマシーンです。主な流れは、
  1. 障害物Aを移動
  2. 1本目引き出し・送り出す
  3. 障害物Bを移動
  4. 2本目引き出し・送り出す
  5. 障害物Aを元に戻す

この流れをめざしてして作りました。

問題点と解決

はじめの構想が普通のやり方ではなく、オリジナルな方法でやりたいということから、「障害物をどかして横から引き出せばかなりショートカットできる」ということで邪魔な缶をどかして横から引き出し、缶を受け渡す方法でやりました。 しかし1号機より問題点が多く、直前まで試行錯誤が必要となりました。問題点ごとに

  1. 缶をどう引き出すか? ⇒ アームでつかんで引き出す
  2. 引き出した後はどうするか? ⇒ はさんだ状態から回転することでうまく転がることがわかり、1号機へ転がしてシュートするような感じにした。
  3. 缶を固定するためアームを縦と横2つつけたが、モーターの節約をどうするか? ⇒ 車輪に2つ、アームに2つ使わないと動かないので、アームの2つをひとつの端子でつないで連動するようにした。
  4. 缶を送り出すときに壁との間隔が狭いため、缶が障害物に当たって転がらない ⇒ 極限まで車間を短くした!
  5. 2本目をとりにいくと角材が邪魔してタイヤが乗り上げてしまう ⇒ 横から入って角材を避けようとした。

結局イ浪魴茲任ず失敗に終わってしまったが、ほかは何とか解消した。

工夫した点・苦労した点

ロボット本体

1号機…ロボット本体は単純な構造です。ただ重心が回転軸と一致するようにカスタマイズしました。デザインはクモの顔をイメージしました。

工夫した点は缶が飛び出さないようにしているツメです。たったパーツ6つでしっかり機能するところは、他のチームには無かった所だと思います。苦労した点は残りの電力によってモーターの回転数が変わり、マシーンがまっすぐ進まなかった所です。本番前に電池を変えて時間を調節しました。

2号機…はじめはキャタピラを使っていたが、本体が重くなってしまうと旋回できなくなることに気がつき、急遽タイヤに変更しなければいけなかったのが大変でした。

工夫した点は極力本体の幅を狭めるために、モーターをくっつけるまで狭くし、アームはギアをうまく組み合わせて両側から、はさめるように作った。また、一番苦労したのは、本体の縦幅を小さくするためにタッチセンサーやアームをギリギリまで引っ込めたところです。

プログラミング

走らせたり、止めたり、曲がったりする時間を決めるのが大変でした。
また、何回もロボットを動かして、プログラムを確認している途中で、ロボットがまっすぐに走らなくなってしまい、それを修正するのに苦労しました。

感想

・この授業を通して、普段何気なく使っている電子機器でもそれが出来るまでにはすごい努力があったんだということにきがつきました。
失敗は成功の元という意味が実感として分かったような気がします。
最後に空き缶がゴール出来たときすごい感動しました。もう終わりかぁ              byゆず

・4月から約4ヶ月間、このゼミを受講してみて、普段は経験することのできないことを経験でき、とても良かったと思っています。
私は今までロボットなどの機械に全くと言っていいほど触れたことがありませんでした。しかし、今回のゼミで他の班員に頼ってしまった部分も多くありましたが、みんなで一緒にロボットやプログラムを作成することで、自分なりに少しロボットについて知ることができたと思います。また、ロボコンの準備はみんなの都合が合わず大変でしたが、ロボットをちゃんと完成させることができ、ホントに⇔匹ったです☆
A1のみなさん、お疲れサマでしたぁーッ!!!   by tomo

・ロボコンをやって学んだことは、機械やロボットを重い道理に動かすことの難しさです。動きを予測しながらプログラムしたり、本体を作っても実際に動かしたときに、想像していなかった誤差が生まれることが何度もあり苦労しました。
最後のロボコンでは本番で成功させることができなかったのは悔しかったけれど、その後でしっかりと1本決めてくれたのはうれしかったです。苦労が報われた瞬間でした。 by 僕

・ロボコンは今までの授業で学んだ知識をまとめるのにピッタリだと思いました。正直、今まで授業に着いていくのに一所懸命でした。だからロボコンでは、チームの皆や先生方にアドバイスをもらい頑張りました。結果は、目標としていた缶2コは運べませんでしたが、最後に1コ運べて苦労が実を結んだので満足しています。チームの皆さんホントお疲れ様でした(^-^)そしてありがとうございました☆    byシュート

  • 作戦の流れ、問題点とその解決法がよくまとまっていると思います。他にもう少し時間があれば改善できていた、したかった点などを書くとよいのではないでしょうか。 -- まいける(TA) 2006-08-15 (火) 23:33:48


添付ファイル: filerobocon-2006-field.jpg 253件 [詳細] filedscn2693_Medium.jpg 287件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-08-15 (火) 23:33:48 (4751d)