ロボコン

所定の位置にあるテニスボールを牛乳パックでできた箱まで運び、その箱にボールを入れるロボットを作る。
入れる箱によって得点が決まっており、その得点を競い合う。
くわしいルールは、2008a/ロボコン参照。

ロボットの紹介

今回はロボット2つ分の材料を使えるので、次の3つの場合のどれかを選ぶことができる。

 .蹈椒奪硲欧鎚の材料で複雑な動きのできるロボットを作る。
◆.蹈椒奪箸鬘欧頂遒蝓∀携によって1つのロボットではできないことをやらせる。
 ロボットを2つ作り、各々独立な動きをさせて1つがダメでももう1つのロボットが成功させるというように保険をかけておく。

話し合った結果、A1チームの本番の弱さから、を選び2人ずつ2チームで2つのロボットを作り本番にのぞむことにした

ロボット1( ボールを横から箱に入れるロボット )

ボールを抱え込み、横から牛乳パックにボールを車体で押し込むようなロボットを作成した。

全体

前が重くなるので、前輪を後輪より大きいものにした。

アーム

これで4つある玉のうちの1つをキャッチする。

キャッチ

実際にキャッチしたところ。玉の入る空間を何度も調節した。

正面

この状態でタッチセンサーが反応するまで玉をゴールに押し込む。

工夫

玉を安定させるためにブロックを使用した。

ロボット2 ( ボールを上から箱に入れるロボット )

ボールを持ち上げ、上から牛乳パックに入れれるようなロボットを作成した。

ロボットを2つに分けたことで、モーターが3つしか使えないという制限ができてしまい、そのような機構をどのように作るのか考えるのにとても苦労した。

ベルトコンベアーで取り込み運ぶ案がいけそうだったが、モーターの数が1つでは実現するのが難しいことがわかり、別の方法を考えた。
結果下のようなロボットに落ち着いた。

ロボットの外観

正面.jpg 背面.jpg 側面.jpg

黄色いアームでボールを取り込み、箱の前までボールを運んだあとアームの回転でボールを投げる。

回転センサー
回転センサー

ロボコンのときにだけ支給された「どれだけ回転したかを測るセンサー」。
タイヤがどれだけ回転したかなどを測れるため、距離などを正確に測れる。
走る距離を時間で設定した場合、その距離は電池の消耗に依存して短くなったり長くなったりするが、走る距離を回転センサーで設定した場合、電池の消耗に依存せずに同じ距離を走ることができる。

光センサー
下部

課題2のようにライントレースさせるため、光センサーを取り付けた。
真ん中より右側に光センサーをつけることにより、ラインより左側でロボットを走行させることができ、コースの壁にぶつからなくてすむようにした。

シャベル部
下部2

スムーズにボールを取り込めるように坂を取り付けた。
ちなみにこれなしでボールを取り込もうとすると、アームが引っかかってしまいボールが取り込めない。

タイヤのギア
タイヤのギア比

でかいタイヤを取り付けているので、その分スピードが出てしまい、ライントレースができなくなり正確さも欠けてしまう。
そのためギア比を図のようにすることで、タイヤのスピードを抑えることができる。
スピードを抑えるとその分パワーがでるため、ボールを運ぶときの負荷に負けずにコースを走行することができる。

アームのモーター部
アームのモーター部

、△里茲Δ忙車が回転し、アームがまわる仕組みになっている。
,任泙錣觜いギザギザを使うことにより回転が遅くなりアームをまわすパワーが生まれる。
また、□,里茲Δ縫アがまわるのを防ぐ役割も果たしていて、モーターの回転だけがアームをまわすことができるようになっているので、ボールを取り込んだ後にボールの重さによりアームが逆回転するのを防ぐことができる。
これにより、安定してボールを運ぶことが可能になる。

プログラム

ロボット1( ボールを横から箱に入れるロボット )

フィールド.png

〇間を設定しボールのあるところまで動く。アームを下げてボールをキャッチ。
内側のラインでライントレースができるように後進し向きを変える。
D樟があるところまでライントレース。
つ樟まで来たら穴の延長線上になるように後進し向きを変える。
ゥ◆璽爐鮠紊欧謄棔璽襪魏,傾む。

#define turn_time1 130
#define turn_time2 65   //初めに2つの曲がる時間を設定
#define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);  //直進
#define turn(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);  //右折
#define LINE 45  //閾値
#define TIMER 60
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_LIGHT);  //光センサー
SetSensor(SENSOR_2, SENSOR_TOUCH);  //タッチセンサー
SetPower(OUT_A,2);
SetPower(OUT_B,2);
SetPower(OUT_C,2);
go_straight(390);
turn(turn_time1);
go_straight(190);
OnFwd(OUT_B);  //アームを下ろす
Wait(50);
Off(OUT_B);
OnRev(OUT_A+OUT_C);
Wait(70);
turn(turn_time1);
ClearTimer(0);
while (Timer(0) <= TIMER){
if((SENSOR_1 <= LINE) && (SENSOR_3  > LINE))  //センサ−1が黒、センサ−3が白
{
Off(OUT_A);
OnFwd(OUT_C);  //左に曲がる
}
else if((SENSOR_1 > LINE) &&(SENSOR_3  <= LINE))  //センサ−1が白、センサ−3が黒
{
Off(OUT_C);
OnFwd(OUT_A);  //右に曲がる
}
else if((SENSOR_1 > LINE) &&(SENSOR_3  > LINE))  //両方白
{
OnFwd(OUT_A+OUT_C);  //直進
}
else if((SENSOR_1 <= LINE) &&(SENSOR_3  <= LINE))  //両方黒
{
OnRev(OUT_A+OUT_C);  //後進
Wait(50);
turn(turn_time2);  //右折
}
}
OnRev(OUT_B);  //アームを上げる
Wait(50);
go_straight((SENSOR_2==1 ));  
 until(SENSOR_2==1);  //タッチセンサーが反応するまで直進
 OnRev(OUT_A+OUT_C);
 Wait(50);
 Off(OUT_A+OUT_B+OUT_C);  //終わり
 }

集まってプログラムを考える時間がなかなかとれなかったので、何個も入れるというプログラムができなかった。1個入れたら終わり。
(作成者:前半キリハラ 後半ツチヤ)

ロボット2 ( ボールを上から箱に入れるロボット )

ロボットが完成したので、今度はどのようにボールを箱に入れるかを話し合った。
始めはコース上の黒いラインをフルに使って箱までたどり、ボールを入れようかという話になったが、距離が長くなるほど誤差が生じるし、もう1つのロボットとの衝突という問題もあるため断念。
できるだけロボットがコースを動く範囲を小さくし、かつ箱まで無駄な動きしないようにして走る距離を短くする方向で考えた。
結果、下のような作戦でいくことにした。

作戦

この作戦だと動く範囲が左半分だけで、右半分で活動するロボットとの衝突を気にする必要もないし、動く距離も短いので誤差があまり生じず、何回ロボットを動かしても同じ結果になりやすいはずである。
しかも今回は回転センサーを使えるので距離が正確に測れ、より正確に箱をボールに運べる。

さらに正確性を求めるために「タッチセンサーを使って箱ぶつかったらボールを投げたらいいのでは?」というような意見も出たが、センサーの取り付け部分がライントレースで光センサーを2つ、回転センサーで1つ使っていて取り付ける部分がなくなってしまったため、あえなく断念。

後はこのように動くプログラムを作成すれば完成。
以下がそのプログラム。

#define LINE 39
#define ST 31
#define  TURNR90 7
#define BACK 4

task main(){
 SetSensor(SENSOR_1, SENSOR_LIGHT);
 SetSensor(SENSOR_2, SENSOR_ROTATION);
 SetSensor(SENSOR_3, SENSOR_LIGHT);
 
 SetPower(OUT_B,7);             //アームを動かすモーターの力を最大にする

   ClearSensor(SENSOR_2);
   OnFwd(OUT_A+OUT_C);
   until( SENSOR_2 >=  ST);               //スタートし、ボールの横まで直進
   
   ClearSensor(SENSOR_2);
   OnFwd(OUT_A);
   OnRev(OUT_C);


   until(SENSOR_2 < -TURNR90);               //ボールの横に来たら右をむく
   
   
               
   
   Off(OUT_A+OUT_C);
   ClearSensor(SENSOR_2);
   
   OnRev(OUT_B); 
   Wait(150);                               //ボールをとる                                                                                          
   
   Off(OUT_B);
   
 
    
   OnRev(OUT_A+OUT_C);
   
   until(SENSOR_2 < -BACK);         //後退する
   
   Off(OUT_A+OUT_C);
   
   ClearSensor(SENSOR_2);
   
   OnRev(OUT_A);
   OnFwd(OUT_C);
   until(SENSOR_2 >  TURNR90+1);      //左を向く
   
   ClearSensor(SENSOR_2);

   
 while( SENSOR_2  < 32){                   //回転センサーが32になるまでライントレース
     
     
       if((SENSOR_1 > LINE) && (SENSOR_3 > LINE)){
       OnFwd(OUT_A+OUT_C);
     
       }
       else if((SENSOR_1 <= LINE) && (SENSOR_3  > LINE)){
       Off(OUT_A);
       OnFwd(OUT_C);
     
       }
       else if((SENSOR_1 > LINE) &&(SENSOR_3  <= LINE)){
       
       Off(OUT_C);
       OnFwd(OUT_A);
       
       
       }
       else if((SENSOR_1 <= LINE) &&(SENSOR_3  <= LINE)){
       
       Off(OUT_A+OUT_C);
       Wait(50);
       OnFwd(OUT_A+OUT_C);
       Wait(100);
       
       
       }
       
          
 
 }
 
 
   OnFwd(OUT_C);                               
   OnRev(OUT_A);
   Wait(10);
   Off(OUT_A+OUT_C);              //箱の前に来たら少し右を向く
   
   OnRev(OUT_B);
   Wait(200);                                   //ボールを投げる
   OnFwd(OUT_B);                           
   Wait(100);                                   //ボールが引っかかった場合のためアームを逆回転させボールを離す
   Off(OUT_B);                                    

}  

(作成者 スギウラ)

ロボコン風景

ロボコン5 ロボコン4 ロボコン1

結果

本番では両方ともボールが入らず失敗・・・
練習でバンバン成功してたのに、この結果。本番に弱いところが見事に出ました(笑)
しかし、予想してなかったまさかの延長戦に突入!その結果は・・・
 
 
 
                    
 
 
                    
 
 
                    
 
 
 
 
 
両方ともボールを1個ずつ入れて6点獲得!!!!!!
そのおかげで見事に優勝!!!!
最後の最後でこの授業をいい思い出でしめくくることができました!!!
 
( くわしい結果は2008a/ロボコン参照 )

感想

・ロボコン当日にロボット2が直進できずに右に曲がるようになってしまった。そのせいで本番にボールが取り込めず1回目失敗してしまったが、延長戦でなんとか入れることができてよかった。
・ボールは入れることができたものの、A2チームのようにボールを何個も入れるようなロボットは考え付かなかったので、見習いたいと思った。
・とてもシンプルなロボットだったが、しっかりボールをゴールに入れることが出来てよかった。
・この授業を通していかに正確なプログラムを作るかということがどれだけ難しいかということを学んだ。なになげく使っている電化製品なんかも試行錯誤の末できたものなんだということがすごく実感できた。
・苦労の分正確に動いたときのうれしさというものはすごく大きく、そこがものつくりの楽しさなんだろうとこの授業を通して思った。

コメントをお願いします



添付ファイル: fileフィールド2.png 346件 [詳細] fileフィールド.png 156件 [詳細] filerobo5.jpg 340件 [詳細] filerobo4.jpg 322件 [詳細] filerobo3.jpg 338件 [詳細] filerobo2.jpg 343件 [詳細] filerobo1.jpg 334件 [詳細] fileロボコン5.jpg 326件 [詳細] fileロボコン4.jpg 329件 [詳細] fileロボコン1.jpg 342件 [詳細] file側面.jpg 321件 [詳細] file正面.jpg 377件 [詳細] fileアームのモーター部.jpg 345件 [詳細] fileタイヤのギア比.jpg 311件 [詳細] file下部2.jpg 318件 [詳細] file下部.jpg 302件 [詳細] file回転センサー.jpg 341件 [詳細] fileロボコン.PNG 320件 [詳細] file背面.jpg 308件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-08-11 (月) 10:30:41