CENTER:&size(35){ロボコン};
CENTER:〜缶を動かすロボットたち〜


目次
#contents
*ロボコン概要 [#p48831b4]
詳細はこちら[[2006a/ロボコン]]
**基本ルール [#b1385929]

-所定の時間内に缶を所定の場所に運ぶ。
-競技時間は3分とする。ただし1個缶を運ぶごとに時間を30秒延長する。(暫定)
-缶を同時にいくつ運んでもよい。
-スタート時のロボットは2体2体または1体とする(スタート後はいくつに分裂してもかまわない)。
-フィールド中央の所定の場所からスタートすること(接地部分が枠内に入っていればよい)。
-開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。
-競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
-途中でうまく動かなくなった場合、1回限り再スタートすることができる。
-すべてのチームの競技が一通り終った後、再チャレンジを認めるか(?)
スタート時に障害物の缶に触れていてはいけない。

*完成までの長い長い道のり [#p1337d68]
**運び方について [#lc5d3760]
最初に、缶の運び方について討論した。やはり個性的なチームなのか、早速ゴールを乗り越える案が出された。~
しかしほかの案がでなかったため&size(10){(というか押し出されて)};これでいこうということになった。~
これが苦悩の始まりであった…

**…どうする? [#x66d5a8c]
乗り越え案は承認されたものの、肝心の「缶の上げ方」については凍結状態であった。空の缶ならいいのだが、ロボコンのページ.を見てわかる通り、中身入りである。
そんな重いものを30センチも(ゴールの高さ)上げることができるのだろうか?最初の週はそんなこんなで終わってしまった。

**試行錯誤の嵐 [#dae5539b]
どうやって缶を向こう側までもっていくか、暫しの間そこに時間をくった。エレベーターみたいに持ち上げるか?缶を押し上げてみるか?他の班はみんなプログラミングに時間を費やしているが、僕らの班はマシーンが命なので、なかなかできなかった。
終いには缶を投げることまで視野に入れて考えていた。誰もが壁を乗り越えるは考えている以上に難しいと再認識した。議論を続けていくうちに、やはりエレベーター方式が一番じゃないかという結論に達した。ただ、エレベーターよりも軽く傾斜を付けたエスカレーター方式みたいになった。

**言うのは易し、作るの難し [#t8b02fa1]
エスカレーターのように缶を運ぶためには今までにない複雑でパワフルなロボットが必要になる。行く手にはパーツの数や組み立てのアイデア、それに缶の取り込み方、様々な問題が立ちふさがっていた。

*プログラム [#a9a34c0d]
**車輪系NQC [#d710825c]
 int MOGU=2;

 task main()
 {
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_2,SENSOR_TOUCH);
 SetSensor(SENSOR_3,SENSOR_LIGHT);
 Wait(100);
 OnFwd(OUT_B);
 ClearMessage();
 until(Message()!=0);
 if(Message()==3)
  {
  Off(OUT_B);
  } 

 while(MOGU==2||1)
 {
 ClearTimer(0);
  if(FastTimer(0)<300);
   {
   if(SENSOR_1&&SENSOR_3>40)
    {
    OnFwd(OUT_A+OUT_C);
    }
   }
  if(FastTimer(0)>300);
   {
   if(SENSOR_1&&SENSOR_3>40)
    {
    OnFwd(OUT_A+OUT_C);
    } 
   if(SENSOR_1&&SENSOR_3<40)
    {
    OnRev(OUT_C);Wait(90);OnFwd(OUT_C);MOGU-1;
    }
   }
  }
 OnFwd(OUT_A+OUT_C);
 Wait(300);
 SendMessage(1);
 Wait(100);
 Off(OUT_A+OUT_C);
 ClearMessage();
 until(Message()!=0);
 if(Message()==2)
  {
  OnRev(OUT_A+OUT_C);
  Wait(100);
  OnFwd(OUT_A);
  Wait(90);
  OnFwd(OUT_C);
  Wait(60);
  OnRev(OUT_A);
  Wait(90);
  OnFwd(OUT_A);
  Wait(100);
  SendMessage(1);
  Wait(50);
  Off(OUT_A+OUT_C);
  }
 }
**支柱系NQC [#m401a831]
 int UP_TIME=0;
 task main()
 {
  SetSensor(SENSOR_2,SENSOR_TOUCH);
  until(SENSOR_2!=0);
  if(SENSOR_2==1)
   {
   SendMessage(3);Wait(50);
   }
 while(1)
 {
 ClearMessage();
 until(Message()!=0);
 if(Message()==1);
  {
  ClearTimer(0);
  OnFwd(OUT_A+OUT_B);
  if(SENSOR_1==100)
   {
   FastTimer(0)=UP_TIME;
   Off(OUT_A);
   OnFwd(OUT_B);Wait(500);
   SendMessage(2);
   OnRev(OUT_A);Wait(UP_TIME);
   Off(OUT_A);
   }
  }
 }
 }

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS