2006b/A7

メンバー →SEGA(((°°;))) & リンゴスター (。_。*)))

♪目次

マシン紹介

ロボコン。ついにこの日が…。〆の課題だけあって時間も苦労もたくさんだった。

内容は缶、箱、缶、あるいは箱、缶、箱と積まれた塔があり、それをはなれたエリアに分別して運ぶというもの。

分別…?

どのようにどんなロボットで運ぶのか、いろいろ考えた結果、僕らの班は塔を崩さず、上中下にそれぞれ箱や缶を落とす装置を付けて分別することになったわけで、まあたいへんだった。

DSC002812.JPG




全体を写したものです。
大きなアームで塔ごと倒さずに移動します。











DSC002802.JPG
DSC00275.JPG




本体の上部にあるセンサーで
缶と箱の塔に当たると
止まるようになっています
青い輪ゴムはちょっとの接触で
感知できるようにするためのものです。
メカ崎くんが今回もしぶとく搭乗してます!Σ( ̄□ ̄;)





DSC00276.JPG





塔ごとアームでガッチリと掴みます。
ギアを2段階にすることにより、ゆっくりかつ移動の衝撃で勝手に開かないようになってます。










DSC00279.JPG






本体の下部にあるセンサーです。
分別場所の段差に当たるようになっています。









DSC00278.JPG
DSC00277.JPG



左の写真は上段および中段攻撃用です。
モーターの数と部品の節約のために1つにしました。試行錯誤の結果、妙な形になりました。

右の写真は下段攻撃用です。
押し出す形になっており、押し出す距離を稼ぐのに苦労しました。また、抵抗が少なくなるように研究しました。





プログラム紹介

今回はふたつのRCXで通信しながら1つのマシンでチャレンジしたので、プログラムが2つ存在します。まずはセンサーと缶と箱(以後、塔とよぶ)をつかんで落とすプログラムです。(•∀•)/

sub close_arm()
{OnFwd(OUT_A)/;Wait(90);Off(OUT_A);}           //塔をつかむアームを閉じる一連の動きをここで定義
sub open_arm() 
{OnRev(OUT_A);Wait(90);Off(OUT_A);}           //塔をつかむアームを開く動きを定義
sub high_attack()
{OnFwd(OUT_B);Wait(60);Off(OUT_B);OnRev(OUT_B);Wait(60);Off(OUT_B);}     //塔の一番上のモノを落とす動きを定義
sub middle_attack()
{OnRev(OUT_B);Wait(60);Off(OUT_B);OnFwd(OUT_B);Wait(60);Off(OUT_B);}      //塔の真ん中のモノを落とす動きを定義
sub low_attack()
{OnFwd(OUT_C);Wait(150);Off(OUT_C);OnRev(OUT_C);Wait(150);Off(OUT_C);}         //塔の一番下のモノを落とす(正確には押し出す)動きを定義
task main()
{
 SetSensor(SENSOR_1,SENSOR_TOUCH);
 SetSensor(SENSOR_3,SENSOR_TOUCH);
 ClearMessage();
 until(SENSOR_1==1);     //センサー1が塔のに触れたら…
 PlaySound(2);        //それを知らせる音が鳴る
 ClearTimer(0);
 while(FastTimer(0)<50){   //5秒間「メッセージ1」をもう一つのRCX本体に送信
   SendMessage(1);
 }
 until(Message()==10);     //「メッセージ10」を受信するまで待ってる
 PlaySound(4);         //ぴろぴろ鳴る
 close_arm();          //塔をがっちりキャッチ
 
 ClearTimer(0);
 while(FastTimer(0)<50){        //「メッセージ2」を送信
   SendMessage(2);
   PlaySound(5);                //ぴろりんぴろりん鳴る
 }
 ClearMessage();
 until(Message()==11);
 PlaySound(6);
 until(SENSOR_3==1);      //センサー3が分別するとこに当たったら…
  PlaySound(5);
 ClearTimer(0);
 while(FastTimer(0)<50){    //「メッセージ3」を送信
   SendMessage(3);
 }
 ClearMessage();
 until(Message()==12);
 open_arm();          //アームを開く
 high_attack();         //上段攻撃。缶か牛乳パックは落ちるはず
 close_arm();          //アームを閉じる
 ClearTimer(0);
 while(FastTimer(0)<50){    //「メッセージ4」を送信
    SendMessage(4);
    }
 ClearMessage();
 until(Message()==13);
 open_arm();
 middle_attack();               //中段攻撃!
 close_arm();
 ClearTimer(0);
 while(FastTimer(0)<50){    //「メッセージ5」を送信
   SendMessage(5);
   }
 ClearMessage();
 until(Message()==14);
 open_arm();
 low_attack();          //下段攻撃!!
 ClearTimer(0);
 while(FastTimer(0)<50){    //「メッセージ6」を送信
 SendMessage(6);
 }
その後もう一つの塔に行き、上記と同じように動く
 ClearMessage();
 until(SENSOR_1==1);
 PlaySound(2);
 ClearTimer(0);
 while(FastTimer(0)<50){
   SendMessage(21);
 }
 until(Message()==30);
 PlaySound(4);
 close_arm();
 ClearTimer(0);
 while(FastTimer(0)<50){
   SendMessage(22);
   PlaySound(5);
 }
 ClearMessage();
 until(Message()==31);
 PlaySound(6);
 until(SENSOR_3==1);
  PlaySound(5);
 ClearTimer(0);
 while(FastTimer(0)<50){
   SendMessage(23);
 }
 ClearMessage();
 until(Message()==32);
 open_arm();
 high_attack();
 close_arm();
 ClearTimer(0);
 while(FastTimer(0)<50){
    SendMessage(24);
    }
 ClearMessage();
 until(Message()==33);
 open_arm();
 middle_attack();
 close_arm();
 
 ClearTimer(0);
 while(FastTimer(0)<50){
   SendMessage(25);
   }
 ClearMessage();
 until(Message()==34);
 open_arm();
 low_attack(); 
}

今度は移動のためのプログラムです。

sub turn_back() 
{OnRev(OUT_A+OUT_B);Wait(200);OnRev(OUT_A);OnFwd(OUT_B);Wait(240);Off(OUT_A+OUT_B);}     //180°後ろに回転する動きを定義
sub go_straight()
{OnFwd(OUT_A+OUT_B);}        //まっすぐ進むだけのことを定義
sub stop_move() {Off(OUT_A+OUT_B);} //止まることの定義
sub turn_right()            {OnRev(OUT_A+OUT_B);Wait(50);Off(OUT_A+OUT_B);OnFwd(OUT_A);OnRev(OUT_B);Wait(120);Off(OUT_A+OUT_B);  OnFwd(OUT_A+OUT_B);Wait(150);Off(OUT_A+OUT_B);
OnFwd(OUT_B);OnRev(OUT_A);Wait(120);Off(OUT_A+OUT_B);OnFwd(OUT_A+OUT_B);                  Wait(50);Off(OUT_A+OUT_B);}       //右90°向いて進み、また左90°を向く
sub turn_left()      {OnRev(OUT_A+OUT_B);Wait(50);Off(OUT_A+OUT_B);OnFwd(OUT_B);OnRev(OUT_A);Wait(120);Off(OUT_A+OUT_B);
OnFwd(OUT_A+OUT_B);Wait(150);Off(OUT_A+OUT_B);
OnFwd(OUT_A);OnRev(OUT_B);Wait(120);Off(OUT_A+OUT_B);OnFwd(OUT_A+OUT_B);                         Wait(50);Off(OUT_A+OUT_B);}       //turn_rightと逆の動きを定義
task main()
  {
   ClearMessage();
   go_straight();            //まっすぐすすむ
   until(Message()==1);
   stop_move();             //すとっぷ
  ClearTimer(0);
  while(FastTimer(0)<100){       //「メッセージ10」送信
     SendMessage(10);
   }
 PlaySound(1);
 until(Message()==2);
 turn_back();              //後ろ(分別のとこのほう)を向く
   
 ClearTimer(0);
 while(FastTimer(0)<100){               //「メッセージ11」送信
   SendMessage(11);
 }
 ClearMessage();
 go_straight();             //まっすぐすすむ
 until(Message()==3);
 stop_move();               //止まれ
 ClearTimer(0);
 while(FastTimer(0)<100){        //「メッセージ12」送信
   SendMessage(12);
 }                           
 ClearMessage();
 until(Message()==4);
 turn_right();             //右に移動
 
 ClearTimer(0);
 while(FastTimer(0)<100){        //「メッセージ13」送信
   SendMessage(13);
 } 
 ClearMessage();
 until(Message()==5);
 turn_left();              //左に移動
 
 ClearTimer(0);
 while(FastTimer(0)<100){        //「メッセージ14」送信
   SendMessage(14);
 } 
 ClearMessage();
 until(Message()==6);
 turn_right();             //右に移動
 turn_back();              //後ろ(もう一つの塔の方)を向く
 go_straight();             //まっすぐすすむ
 ClearMessage();
 until(Message()==21);
 stop_move();              //ここで再び塔のとこに来た。このあと上記の左右対称の動きをする。
 ClearTimer(0);
  while(FastTimer(0)<100){
     SendMessage(30);
   }
 PlaySound(1);
 until(Message()==22);
 turn_back();
   
   
 ClearTimer(0);
 while(FastTimer(0)<100){
   SendMessage(31);
 }
 ClearMessage();
 go_straight();
 until(Message()==23);
 stop_move();  
 ClearTimer(0);
 while(FastTimer(0)<100){
   SendMessage(32);
 } 
 ClearMessage();
 until(Message()==24);
 turn_left();
 ClearTimer(0);
 while(FastTimer(0)<100){
   SendMessage(33);
 } 
 ClearMessage();
 until(Message()==25);
 turn_right();
 ClearTimer(0);
 while(FastTimer(0)<100){
   SendMessage(34);
 }                                    
}

結果

  • 結果としては、はじめうまく塔をつかむことができず失敗。その後の挑戦してなんとか一番上の箱は落とせた。3位らしかったv(o〒o)v

ロボコンの反省感想

  • 課題が山ほどある。
  • スタート時まっすぐすすんで塔のとこに着いて、タッチセンサーがばっちり反応することが絶対条件であり、これががなり無理があった。ものすごい狙いを定めないといけない。塔をなぎ倒す始末である。その後、自己崩壊…
  • 分別する気が無かったわけではない。本当に。分別のためのタッチセンサーもつけたんだ。でもちょっと実現しなかったっていうか、実現しませんでした。
  • うまくいけば一つ目の塔はちゃんと移動できた。でも二つ目の塔は…。ライントレースなどをすればできただろうが、プログラムが非常に複雑になり分からなかったことと、T字路で行くべき方向に進んでくれないことがあった。秒数だけで移動する方法をとったが、やっぱり正確に移動するのは難しかった。
  • ちょっともろい。っていうかかなり。
  • コードが長く、カッコ悪い。デザイン性に乏しい(特に課題3に比べると)
  • 課題は多々あるが本番でつかんで1つでもうまく運べたことはすごくよかった。

ロボティクス入門を終えての個々の感想

  • SEGA
    • 4人いたメンバー。消えたメンバー。残された2人…。苦難と逆境を乗り越え、こうして今に至り、非常に清々しい気分である。

課題に取り組む中でおこる問題をあらゆる面から問題を捉え、解決する。やってることはLEGOのロボットを作るってことだけど、いろいろ身に付いたこと、勉強になったことがたくさんあった。

ロボティクス入門ゼミとっていろいろよかった。ロボコンも結構楽しかったし。ごくろーさまでした(°∇°)//    

  • リンゴスター

まずはSEGAに感謝です。彼がいなかったらA7は成り立ってなかったでしょう。ありがとうm(__)m

松本先生とTAの今井さんには金4で2人しかいないのに、丁寧に教えていただいたり、ロボコンにむけてアドバイスをくださったり、ありがとうどざいました。

課題などは難しく、大変でしたが、完成したときの達成感は計り知れないものでした(言いすぎ?) ロボコンでもはじめて会った金3の人たちと同じ目標に向かってともに喜びあったり、とても楽しい時間を過ごすことができました。(*´▽`*)

コメントください



添付ファイル: fileDSC002812.JPG 248件 [詳細] fileDSC002802.JPG 260件 [詳細] fileDSC002811.JPG 123件 [詳細] fileDSC002801.JPG 127件 [詳細] fileDSC00279.JPG 260件 [詳細] fileDSC00278.JPG 250件 [詳細] fileDSC00277.JPG 245件 [詳細] fileDSC00276.JPG 250件 [詳細] fileDSC00275.JPG 253件 [詳細] fileDSC00274.JPG 120件 [詳細] fileDSC00280.JPG 134件 [詳細] fileDSC00281.JPG 142件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-02-16 (金) 22:40:46