[[2007a/MemberOnly/進行状況A]]
#contents
*!!ロボコン!! 2007.8.4 [#gb100d38]
**メンバー [#a25aba24]
ten , サン , ARX-8 , エルモ

**課題:紙パックを収集して所定の位置にできるだけ高く積み上げる [#n92757fe]
***フィールドの説明 [#i916cc42]
フィールドは約160cm×110cm

運搬する500mlの紙パック(以下単に紙パックと呼ぶ)は約7cm×7cm×10.3cm

紙パックはすべての面に白あるいは緑色の画用紙がはられている

紙パックは(目的地の円周上を除く)各交差点に立てて配置されている

目的地の円を囲む正方形の4隅には緑の紙パックが配置されている

1つの格子はの境界の黒線の芯々で20cm平方の正方形である

黒い線の太さは約25mm

***ルール [#za2d2994]
● 基本ルール

所定の時間内に紙パックを所定の場所に運んで積み上げる。

競技時間は2分30秒(仮)、あるいはリタイアするまでとする。 ただし積み上げた紙パックからロボットが離れよ
うとしている動作中に制限時間が来てしまった時には、その動作が終了するまで、とする。 2分経過した時点で10個以上入っていた場合には30秒延長する(仮)。

どこからスタートしてもよい。

スタート時のロボットは3個を越えないこと (スタート後はいくつに分裂してもかまわない)。

開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。

競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。

途中でうまく動かなくなった場合、1回限り再スタートすることができる。

積んだ紙パックの底面は水平でなければならない

競技終了時点で、積み上げた紙パックにロボットの一部が触れていてはならない。 触れている場合は、その紙

パックおよびその紙パックに触れている紙パック、さらにその紙パックに触れている紙パック、・・・、は加算
しない。

半分以上枠はみ出した紙パックは得点に加算しない。

枠内からはみ出した部分が半分以下の場合には、本来の点数の 1/2 とする。1点未満は切捨て。

● 基本得点の計算方法

紙パックを一個運んで積み上げると、白パックの場合

1層目で横置き:1点、1層目で縦置き:2点

2層目で横置き:2点、2層目で縦置き:4点

3層目で横置き:4点、3層目で縦置き:8点

4層目で横置き:8点、4層目で縦置き:16点

..... 以下同様

緑パックの場合はすべて白パックの2倍

● 技術点の計算方法

以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(9チーム+TAor教員)が20点満点で採点し、その平均点を求める。 

得点の目安:

紙パックを集める動作 (4点)

紙パックを積み上げる動作 (4点)

2台以上のロボット、あるいは単体のロボットの場合は2台のRCXの連携の良さ(4点)

自立型のロボットとしての形や動作の美しさ、斬新さ(4点)

その他 (4点)

**戦略 [#i01137db]
1.箱4つをいっきに縦に積み上げる事で高得点をねらう。そのために、リフト(エレベーター?)のようなもので下から上へと積み上げることにする。

2.特に円の周りの緑の箱を4つ全てを積み上げる事。これに全てをかける!!

☆以上☆
**ロボット紹介 [#f43199f3]
RCXを2つくっつけることによって、1つのロボットにした。
***名:&size(30){倉羅}; (くらら) [#w545a150]
***コンセプト [#nf4b756f]
 このロボットはアームの部分で箱を挟み込み、上に上げるコトを繰り返して、最終的には4段つむことを目標にしたロボットである。そのため、多くの部品が必要となり、2つのRCXを使うことになった。今回はロボットが大きくなるため、写真の様にそれぞれモジュールに分けて製作した。ただ、エレベーターの部分の接続を考えていなかったため、接続に非常に苦労し、なかなか立たなかった。ちなみに名前の由来はここからきている。

バランスを上手くとるために何度もタイヤを変えることを繰り返した。
&ref(./SN330152_0001.jpg,50%,);&ref(./SN330154_0001.jpg,50%,);&ref(./SN330150_0001.jpg,50%,);

上のモジュールを便宜的に左からアーム、車体、かごとする。

***アームの詳細 [#ab49ea2a]
 奥に設置されたタッチセンサーに触れるとアームが閉じて、両脇のタイヤが回転して箱を上に押し上げる仕組みである。ただ、両脇からの圧力がないと押し上げにくいので、押し上げている間はアームを閉じるようにしてある。また、箱を捕まえた後、逃がさないように写真のように仕切りがついている。アームの開閉の構造が一番大変だった。構造は割と単純なのだが、開閉を遅くするためのギア比とギアのかみ合いの調節が難しかった。その上、アームが重過ぎて、土台として支えるのが難しかった。

&ref(./070804_1616~0001.jpg,100%,);&ref(./070804_1605~0002.jpg,100%,);&ref(./070804_1609~0003.jpg,100%,);&ref(./070804_1605~0001.jpg,100%,);&ref(./070804_1606~0001.jpg,100%,);&ref(./070804_1606~0002.jpg,100%,);

***車体の詳細 [#pcbaf5be]
 車体はアームとの接続やアームとかごの重量を考慮して、後ろにモーターを置いて前にスペースを作った。最初は四輪だったが、先生の指導もあって二輪に変更した。前のタイヤを残したのは、より中心に近いほうが回転しやすいからである。そのため、補助輪の代わりとして写真のようなものをつけた

&ref(./SN330148_0001.jpg,50%,);⇒⇒⇒⇒&ref(./070804_1611~0002.jpg,100%,);&ref(./SN330155_0001.jpg,50%,);
 
***かごの詳細 [#na41e0ca]
 この部分はアームで持ち上げた箱をためておく部分である。特徴的な点は箱が下に落ちないようにタイヤが一方にしか回転しないようにした点、あがるときに箱が多少ぶれても大丈夫な様に斜めになっているブロックを使用した点である。また、タイヤの半径が微妙に足りなかったため輪ゴムを使用した。かごも最後に展開するため、アームと同じような構造でギアを組んだ。モーターをつけるスペースがなったが、ギアをかませることで何とか取り付けに成功した。

&ref(./SN330151_0001.jpg,50%);&ref(./070804_1609~0002.jpg,100%,);&ref(./070804_1607~0001.jpg,100%,);&ref(./070804_1611~0001.jpg,100%,);&ref(./070804_1610~0001.jpg,100%,);

***その他 [#m171c336]
 アームと車体の合体

 &ref(./SN330156_0001.jpg,100%,);
 
 光センサー

 &ref(./070804_1614~0001.jpg,100%,);

 アームとかごと車体を支える支柱

&ref(./070804_1612~0001.jpg,100%,);

***最終形態 [#c08123a5]

&ref(./HI380008.jpg,50%,);⇒⇒⇒⇒&ref(./HI380009.jpg,50%,);

**プログラミング [#me99d90d]
その1:repeatを使ったプログラミング
試作:whileを使ったプログラミング(ライントレースのみ)

プログラムは下から上への命令はできないと思ったが、実際に円の回りの四角をトレースできたので掲載した。

 task main()
 {
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_2,SENSOR_LIGHT);
 int count=0;
 while((count==0|| count==2|| count==4|| count==6)){
 if(SENSOR_1>40){
    if(SENSOR_2>40){
        OnFwd(OUT_A+OUT_C);
        }else{
          OnFwd(OUT_A);
          Off(OUT_C);
          }
        }else{
            if(SENSOR_2<40){
             Off(OUT_A+OUT_C);Wait(200);
             OnFwd(OUT_A+OUT_C);
             Wait(70);
             OnFwd(OUT_A);
             Off(OUT_C);Wait(50);
             count++;
         }else{
             Off(OUT_A);
             OnFwd(OUT_C);
             }
          }
 while(count==1|| count==3|| count==5|| count==7){
  if(SENSOR_1>40){
    if(SENSOR_2>40){
        OnFwd(OUT_A+OUT_C);
        }else{
          OnFwd(OUT_A);
          Off(OUT_C);
          }
        }else{
            if(SENSOR_2<40){
            OnFwd(OUT_A);
            OnRev(OUT_C);Wait(70);
             count++;
         }else{
             Off(OUT_A);
             OnFwd(OUT_C);
             }
          }
 }
 } 
 }


その2:関数をつかったプログラミング
RCX1:

 #define SIGNALON 0    
 #define SIGNALOFF 12   
 task main()
 {
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_2,SENSOR_LIGHT);
 SetSensor(SENSOR_3,SENSOR_LIGHT);
 int count=0ClearMessage();                   // Message()の値を0に初期化
  if(Message() == 0){
  if((count==0)||( count==2)|| (count==4)|| (count==6)){
   if(SENSOR_2>40){
     if(SENSOR_1>40){
       if(SENSOR_3>40){
        OnFwd(OUT_A);
        Off(OUT_C);
      }else{
          OnFwd(OUT_A+ OUT_C);
      }
    }else{
       if(SENSOR_3<40){
             Off(OUT_A);
             OnFwd(OUT_C);
       }else{
             Off(OUT_A);
             OnFwd(OUT_C);
       }
     }
  }else{
      Off(OUT_A+OUT_C);Wait(200);
      OnFwd(OUT_A+OUT_C);Wait(50);
      count++;
 }
 if    
 ((count==1)|| (count==3)|| (count==5)||( count==7)){
  if(SENSOR_2>40){
    if(SENSOR_1>40){
      if(SENSOR_3>40){
        OnFwd(OUT_A);
        Off(OUT_C);
        }else{
          OnFwd(OUT_A+ OUT_C);
          }
        }else{
            if(SENSOR_3<40){
             Off(OUT_A);
             OnFwd(OUT_C);
         }else{
             Off(OUT_A);
             OnFwd(OUT_C);
             }
          }
      }else{
      OnFwd(OUT_A);
      OnRev(OUT_C);
      Wait(50);
      count++;
      }
    }
  }
 if(count==8){
  OnFwd(OUT_A);
  OnRev(OUT_C);Wait(25);
  OnFwd(OUT_A+OUT_C);Wait(80);
  Off(OUT_A+OUT_C);
  OnFwd(OUT_B);Wait(300);
  OnRev(OUT_A+OUT_C);Wait(500);
  Off(OUT_A+OUT_C);Wait(18000);
 }
 }
 
 
 if((Message() == 12)){
  Off(OUT_A+OUT_C);}
  }

RCX2:

 #define SIGNALON 0   
 #define SIGNALOFF 12   
 task main ()
 {
    
    SetSensor(SENSOR_2,SENSOR_TOUCH);
   while(true){
        if (SENSOR_2 == 1){     
       // センサー1だけが押されているときは SIGNALOFF(=12) を送信する
            SendMessage(SIGNALOFF);
            OnRev(OUT_B);Wait(400);Off(OUT_B);
            OnFwd(OUT_A+OUT_C);Wait(600);Off(OUT_A+OUT_C);
            OnFwd(OUT_B);Wait(400);Off(OUT_B);
            SendMessage(SIGNALON);
            
                       }
           }        
 } 

一度作ったプログラミングを試してみたけれど、なかなか上手くいかなかった。

**工夫点 [#r7d24f72]
箱を積むところはエレベーター型にして、一度積んだ箱が下に落ちてこないようにギアを取り付けた。

箱を積むエレベーターの部分が重くて前方に傾くので、車体のところとエレベーター部分をブロックで三角形に固定して安定にすることに成功した。
箱を積むエレベーターの部分が重くて前方に傾くので、車体の後方とエレベーター部分をブロックで三角形に固定して安定にすることに成功した。

エレベーター部分を作動させるモータを安定につけるため、エレベーター部分の固定をさらに強化した。

ギアの調節。
タッチセンサーのバンパーがなるべく小さくかつ軽くなるように小さいパーツをとりつけるように意識した。

持ち上げるアームの部分で、箱をつかむ時に変な角度にならないように車輪をたくさん付けた。

扉を動かす所で左右対称に動くようにギアを組んだ。

エレベーター部分で積上げた箱が落ちてこないため、滑り止めとしてタイヤにゴムを巻き付けた。
**苦労した点 [#ubb1b802]
いろいろと作っていく過程でブロックが微妙に足りないということもあった。

箱をつむ部分が重くてバランスがとれず、崩れやすかった。

モーターが上手く回転せずに進まないという状況が……。
エレベーター型のリフトの扉の開閉をするためのモーターをつける位置や固定のぐあいに悩んだ。

ライントレースの際にコースにたくさん交差点があるので、思い通りの交差点で曲がるにはどうすればいいかがプログラミングのときに引っかかった。

箱を積上げるとき、初めはブロックに引っかかって箱が上がらなかったので、ほかのブロックで幅を持たせたりして上手く上げる事に成功はした。

一度積み上げた箱がタッチセンサーに当たってしまうという壁にぶち当たってしまった。
**感想 [#o927f057]
ten:
ten:テスト終了後ということで、ロボの制作開始が遅くなってしまい、結果ロボコン当日までに間に合わないという形になってしまったが、一応ロボットの方は完成できたので一応は良かった。今回は、4人での制作ということで、ロボの制作班とプログラム班とレポート班に分かれてやったが、自分が担当したロボの制作が遅れてしまい、迷惑をかけてしまったので申し訳なく思った。

サン:
サン:プログラミングに苦労した。while,if,repeat,関数を使用し、通信機能を使って組んだが、なかなかうまくいかなかった。円の回りの四角をトレースする際に、関数を使用し交差点で曲がるようにするまでは良かったが、誤って円をトレースしてしまうので光センサの位置を工夫したり、トレースの位置を黒白の位置にかえるなどの作業も大変だった。本番では、ライントレースすらできなく残念だった。ゼミの中で一番疲れた。

ARX-8:
ARX-8:主にロボットを担当したが、製作にこりすぎて時間がかかりすぎ、プログラミング担当のじかんを削ってしまって申し訳なかった。ロボコン当日に寝坊したのは本当申し訳ないm(__)m

エルモ:
エルモ:ライントレースが上手くいかず結果は0点やったけど、テスト終わってみんな朝から集まってロボづくりにはげんでいました。みんなほんま頑張った!!だから結果は残念やったけど、他のチームを見たりしてほんまメッチャ楽しかったです。みんなここまでありがとう☆

**☆コメントをどうぞ☆ [#dbe06197]


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