2009a

ロボコン

詳しくはこちら

ロボコンの構想とか

概要

  • 母艦を作って、その上に小型機を乗せる。
  • 牛乳パックの乗っている壁の、一か所だけ低くなっている部分(下図で言うと茶色の部分)まで来たら母艦から小型機を射出
  • 小型機は壁の向こう側で頑張る

母艦(親機)

  • 親機の役目は子機を壁の向こう側まで送り込むことのみ
  • 親機にある程度の高さを持たせて、段差の上に橋を掛ける。その上を子機が渡る

小型機(子機)

  • 小型機の役目はパックをゴールの枠の中に入れること
  • 腕でパックを掴み、運搬する

フィールド全体図

フィールド

構想についての話し合いの場(掲示板)

  • ロボコンの構想について話し合いの場作ってみた(`・ω・´)ゞ ピシッ! -- ? 2009-07-17 (金) 21:44:44
  • いつか集まりたいと思うけど、みんないつなら大丈夫? -- KEI? 2009-07-23 (木) 22:15:10
  • ちなみに俺は7月31日と8月3、4日ならOK -- KEI? 2009-07-23 (木) 22:16:40
  • 今のところ7/31〜8/5までは空いてる -- ? 2009-07-24 (金) 15:20:00

    (この後、3,4あたりに集まることが決まる)

  • 母艦がスタート側からパックを子機側に押し出して、子機の上にパックを落とし、運搬するやり方も -- ? 2009-07-24 (金) 17:43:12
  • 日曜はロッカーと教室開いてなかった(´・ω・`) 科学の祭典やってた -- ? 2009-08-02 (日) 09:56:20
  • 月曜日はロボットを大体完成させた。火曜日は主にプログラム -- ? 2009-08-04 (火) 11:11:29
  • 親機のプログラム完成 -- ? 2009-08-04 (火) 17:19:34


全体図

親機

  • とにかく子機を壁の向こう側にやることだけを考えた。そのために、余分な部品は極力削った
  • なおかつ、親機は子機をしっかりと支えられるようにした。
  • 二枚の板を重ねただけでは縦からの圧力に耐えられないので、その板同士を縦方向に棒で挟む構造を作った。
    親機01
  • 橋を掛けた状態
  • 前輪を取り外すことで、床との摩擦を少なくした


    親機02
  • 橋をしまった状態


    親機03
  • 光センサー
  • タッチセンサーでは動作があまりに不安定なため、光センサーを採用した


    親機04
  • 二機重ねた状態


    親機05


  • 旋回時に、前輪は左右に動かないので、余計な摩擦がかかってしまう。このため前輪は外した
  • 以下の画像は、前輪を取り外す前の画像
    親機改良前01

    親機改良前02

子機

  • 後ろにタイヤを取り付けることでバランスを取り、重心を後方にもってきた
    子機01

    子機02

    子機03

    子機04

    子機05

    子機06

    子機07
  • 改良前ギア部。輪ゴムを使用していた
    子機08

    子機09

    子機10

    子機11

    子機12
  • 最終的にギア部には輪ゴムの代わりに、空回りするギアを採用した
    子機13
  • 親機と同じように、光センサーで線を辿るようにした。
  • タッチセンサーだと、少しの揺れで反応してしまう。それを改善させるための構造を作るのにはそれなりのパーツが必要だが、余りは少なくなる見通しであったため、光センサーを採用した
  • 全体像

プログラム

親機

#define THERESHOLD 40 //闘値
#define KAI_S 100 //回転する秒数

task main () //親機の動作
{
     int kousa=0; //交差点の数を数える変数
     SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1は光学センサー
     SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3は光学センサー
     while(GO<1){
          if (SENSOR_1>THERESHOLD){
               if (SENSOR_3>THERESHOLD){
                    OnFwd(OUT_A+OUT_C);
               } else {
                    Off(OUT_C);
                    OnFwd(OUT_A);
               }
          } else {
               if (SENSOR_3>THERESHOLD){
                    OnFwd(OUT_C);
                    Off(OUT_A);
               } else { //交差点に突入
                    kousa=kousa+1;
                    if (kousa==1){
                         Off(OUT_A+OUT_C);
                         OnFwd(OUT_A+OUT_C); //前進
                         Wait(30);
                         Off(OUT_A+OUT_C);
                    }
                    if (kousa==2){
                         OnFwd(OUT_A+OUT_C); //前進
                         Wait(40);
                         Off(OUT_A+OUT_C);
                         usetsu(); //右折
                    }
                    if (kousa==3){
                         OnRev(OUT_A+OUT_C); //後退
                         Wait(30);
                         Off(OUT_A+OUT_C);
                         usetsu(); //右折
                         OnFwd(OUT_A+OUT_C); //前進
                         Wait(145);
                         Off(OUT_A+OUT_C);
                         sasetsu(); //左折
                         OnFwd(OUT_A+OUT_C); //前進
                         Wait(50);
                         Off(OUT_A+OUT_C);
                         PlaySound(SOUND_UP) ; //ここまで来たら音で知らせる
                         Wait(500);
                         OnRev(OUT_A+OUT_C); //後退し、橋を回収する
                         Wait(500);
                         Off(OUT_A+OUT_C);
                    }
               }
          }
     }
}

sub usetsu() //右折
{
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(95);
     Off(OUT_A+OUT_C);
}

sub sasetsu() //左折
{
     OnRev(OUT_A);
     OnFwd(OUT_C);
     Wait(KAI_S);
     Off(OUT_A+OUT_C);
}

子機

#define A OUT_A 
#define B OUT_B 
#define C OUT_C
task main()
{  
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_3,SENSOR_LIGHT);
     Wait(1200);               //待機時間
     OnFwd(B);Wait(30);OnFwd(A+C);Wait(400);OnRev(B);Off(A+C); Wait(150);   //壁を越える
     OnRev(A+C);Wait(70);Off(A+C);Wait(30);OnFwd(C);OnRev(A);Wait(80);Off(A+C);OnFwd(A+C);Wait(70);Off(A+C);Wait(40);
     OnRev(A);OnFwd(C);Wait(60);;Off(A+C);OnFwd(A+C);Wait(60);Off(A+C);Wait(20);OnFwd(B);Wait(30);OnRev(A+C);Wait(40);Off(A+C);Wait(30);    /パックをつかむ
     start hanten;    //ゴールにいれる。
     
   
 }
          
  
        
    
   task hanten()
      {
       OnRev(A);OnFwd(C);Wait(150);Off(A+C);OnFwd(A+C);Wait(200);Off(A+C+B);
      }    

コメントをどうぞ



添付ファイル: filekoki13.JPG 232件 [詳細] filekoki12.JPG 229件 [詳細] filekoki11.JPG 255件 [詳細] filekoki09.JPG 237件 [詳細] filekoki10.JPG 226件 [詳細] filekoki08.JPG 267件 [詳細] filekoki07.JPG 232件 [詳細] filekoki06.JPG 256件 [詳細] filekoki05.JPG 263件 [詳細] filekoki04.JPG 240件 [詳細] filekoki03.JPG 238件 [詳細] filekoki02.JPG 247件 [詳細] filekoki01.JPG 222件 [詳細] fileoyaki07.jpg 218件 [詳細] fileoyaki06.jpg 246件 [詳細] fileoyaki05.jpg 241件 [詳細] fileoyaki04.jpg 224件 [詳細] fileoyaki03.jpg 309件 [詳細] fileoyaki02.jpg 227件 [詳細] fileoyaki01.jpg 237件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-08-09 (日) 22:23:32 (3667d)