ロボコンのページ

今回のメンバーと役割

メンバー役割
クーロン茶ロボット制作担当
ru-ロボット制作・プログラム担当
おかじ主にロボット制作担当。その他プログラムも
たいようプログラム制作、HP制作などの補助
滝沢クリステルHP担当
音案ゴールに運ぶロボットのプログラム制作・HP担当

ロボコンのルール

ルールについてはこちらを見てください↓
http://yakushi.shinshu-u.ac.jp/robotics/?2006a%2F%A5%ED%A5%DC%A5%B3%A5%F3#content_1_2

作戦

コース
見ての通りスタート地点にはラインが無い、過去の経験から見てライントレースと言っても正確に直角に曲がったりまっすぐ進めるわけではない。そこで私たちはロボットを1台ではなく2台使うことにして、ラインの無いスタート地点で缶の受け渡しをすることに決めた。
缶をゴールに運ぶロボットはline countを使おうかと考えもしましたが缶を取るロボットよりも精密さは必要としないために使い慣れているプログラムを使いました。
缶を取るロボットも時間の都合などの事情があってライントレースを使わずに缶を運ぶことにしました。結局、当初の作戦は全く意味のないものになりました。
しかしロボットの大きさの関係上、その地点でしか受け渡しができないし、プログラムもそれが一番作りやすいと考えそのままの作戦で本番に臨みました。

ロボットについて

缶をつかみ中央まで運ぶロボット

運搬車 運搬車

缶を枠の真ん中にとらえて運ぶと言う仕組み、しかしこの枠だと少しでもプログラムに誤差があると隣の缶に引っかかってアームが降りきらないと言うことが起きるので本番は違うアームを使用することにした。
運搬車(改)
それでできたのがこれ、これならば多少のズレが生じても缶をつかんでくれる。

缶を受け取りゴールに入れるロボット

受け取り車 受け取り車

前面中央にタッチセンサーがありこれに反応したときにアームが閉じる このロボットが缶を受け取れればほぼ100%ゴールに入れられる。

受け渡しの写真

受け渡し
うまくいけばこうなるはずだった。運搬車が缶を押し出して、ゴールに入れるロボットのセンサーに缶をあててそれで受け渡しをする。タッチセンサーが作動しなかったのはおそらく押し方が弱すぎたためだろう。

プログラム

  • スタートから缶を運ぶロボットのプログラム
  • 緻密なタイム設定で缶を取るプログラム(急遽制作)制作者 tako-ru
     task main()
     {
     OnFwd(OUT_A+OUT_C);   //前進
     Wait(320);          //3,2秒間行動
     OnFwd(OUT_A);OnRev(OUT_C);      //左旋回 
     Wait(175);            //90度左回転
     OnFwd(OUT_A+OUT_C);    //前進
     Wait(320);    //3,2秒行動
     OnFwd(OUT_A);OnRev(OUT_C);    //左旋回
     Wait(168);    //90度左回転
     OnFwd(OUT_A+OUT_C);        //前進
     Wait(190);       //1,9秒行動  缶到着
     Off(OUT_A+OUT_C);   //モーター停止
     Wait(50);   //0,5秒待機
     OnFwd(OUT_B);     //アーム下げる
     Wait(110);      //缶キャッチ
     Off(OUT_B);    //アーム下げたまま待機 
     OnRev(OUT_A+OUT_C);    //後退
     Wait(210);   //2,1秒行動(ここから缶を考慮して時間を行        きと変えている)
     Off(OUT_A+OUT_C);     //モーター停止
     OnFwd(OUT_A);      
     OnRev(OUT_C);      //右旋回
     Wait(165);      //90度右回転
     OnFwd(OUT_A+OUT_C);       //前進
     Wait(345);           //3,45秒行動
     OnFwd(OUT_C);
     OnRev(OUT_A);      //65度左旋回(缶にぶつからずショート カット)
     Wait(165);        //65度左回転
     OnFwd(OUT_A+OUT_C);    //前進
     Wait(200);        //2秒行動
     Off(OUT_A+OUT_C);      //モーター停止
     OnRev(OUT_B);      //アーム上げる
     Wait(200);        //缶を手放す
     Off(OUT_B);       //モーター停止
     OnRev(OUT_A+OUT_C);      //後退
     Wait(50);       //缶の後ろに回る
     OnFwd(OUT_B);        //アーム下げる
     Wait(200);       //缶を押すために下げる
     Off(OUT_B);      //モーター停止
     OnFwd(OUT_A+OUT_C);     //前進
     Wait(300 );    //3秒間缶を押し、2機目に缶を渡す
     Off(OUT_A+OUT_C);       //一時停止(缶を完全に渡すため)
     OnRev(OUT_A+OUT_C);     //後退(2機目にぶつかるから)
     Wait(200);      //2秒後退
     Off(OUT_A+OUT_C);       //モーター停止
     OnRev(OUT_B);       //次のテストに備えアームを上げる
     Wait(200);    //2秒間上げる
     Off(OUT_B);  }       //モーター停止
     ロボコンへ。
           
  • line countを使用したプログラム <制作者>クーロン茶・おかじ
     task main()
     {
     int line_count;
     SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサー1がライトセンサーであると宣言
     SetSensor(SENSOR_2,SENSOR_TOUCH);  //センサー2がタッチセンサーであると宣言
     SetSensor(SENSOR_3,SENSOR_LIGHT);  //センサー3がライトセンサーであると宣言
     line_count=0;  //ラインカウントを0にする
     OnFwd(OUT_A+OUT_C);  //前進
     until((SENSOR_1 < 40) && (SENSOR_3 < 40))  //センサー1とセンサ−3の値が40以下になったら
     Off(OUT_A+OUT_C);  //モーター停止
     Wait(50);  //0、5秒待機
     line_count=line_count+1;  //ラインカウント+1
     OnFwd(OUT_A+OUT_C);  //再び前進
     until((SENSOR_1 < 40) && (SENSOR_3 < 40))  //センサー1とセンサ−3の値が40以下になったら
     line_count=line_count+1;  //ラインカウント+1
     until(line_count==2);  //ラインカウントが2になったら
     OnFwd(OUT_A);  //90度右旋回
     OnRev(OUT_C);
     Wait(160);
     OnFwd(OUT_C);  //再び前進
     until((SENSOR_1 < 40) && (SENSOR_3 < 40))  //センサー1とセンサ−3の値が40以下になったら
     line_count=line_count+1;  //ラインカウント+1
     OnFwd(OUT_A+OUT_C);  //前進
     until((SENSOR_1 < 40) && (SENSOR_3 < 40))  //センサー1とセンサ−3の値が40以下になったら
     line_count=line_count+1;  //ラインカウント+1
     until(line_count==4);  //ラインカウントが4になったら
     OnFwd(OUT_A);  //90度右旋回
     OnRev(OUT_C);
     Wait(160);
     OnFwd(OUT_C);  //再び前進
     until((SENSOR_1 < 40) && (SENSOR_3 < 40))  //センサー1とセンサ−3の値が40以下になったら
     line_count=line_count+1;  //ラインカウント+1
     until(line_count==5);  //ラインカウントが5になったら
     OnFwd(OUT_A+OUT_C);  //前進
     Wait(50);  //0、5秒待機
     Off(OUT_A+OUT_C);  //モーター停止
     Wait(50);  //0、5秒待機
     OnFwd(OUT_B);  //アームをおろす
     Wait(120);
     Off(OUT_B);
     Wait(100);  //1秒待機
     OnRev(OUT_A+OUT_C);  //後退
     until((SENSOR_1 < 40) && (SENSOR_3 < 40))  //センサー1とセンサ−3の値が40以下になったら
     line_count=line_count+1;  //ラインカウント+1
     OnRev(OUT_A+OUT_C);  //前進
     until((SENSOR_1 < 40) && (SENSOR_3 < 40))  //センサー1とセンサ−3の値が40以下になったら
     line_count=line_count+1;  //ラインカウント+1
     until(line_count==7);  //ラインカウントが7になったら
     OnFwd(OUT_A);  //90度右旋回
     OnRev(OUT_C);
     Wait(160);
     OnFwd(OUT_C);  //再び前進
     until((SENSOR_1 < 40) && (SENSOR_3 < 40))  //センサー1とセンサ−3の値が40以下になったら
     line_count=line_count+1;  //ラインカウント+1
     OnFwd(OUT_A+OUT_C);  //前進
     until((SENSOR_1 < 40) && (SENSOR_3 < 40))  //センサー1とセンサ−3の値が40以下になったら
     line_count=line_count+1;  //ラインカウント+1
     until(line_count==9);  //ラインカウントが9になったら
     OnFwd(OUT_C);  //90度左旋回
     OnRev(OUT_A);
     Wait(160);
     OnFwd(OUT_A);  //再び前進
     Wait(300);  //3秒行動
     Off(OUT_A+OUT_C);  //モーター停止
     Wait(100);  //1秒待機
     OnRev(OUT_B);  //アームをあげる
     Wait(150);
     Off(OUT_B);
     Wait(100);  //1秒待機
     OnRev(OUT_A+OUT_C);  //後退
     Wait(100);  //1秒行動
     Off(OUT_A+OUT_C);  //モーター停止
     Wait(50);  //0、5秒待機
     OnFwd(OUT_B);  //アームをおろす
     Wait(120);
     Off(OUT_B);
     Wait(100);  //1秒待機
     OnFwd(OUT_A+OUT_C);  //前進
     Wait(200);  //2秒行動
     Off(OUT_A+OUT_C);  //モーター停止
     Wait(50);  //0、5秒待機
     OnRev(OUT_B);  //アームをあげる
     Wait(150);
     Off(OUT_B);
     }
    <line countを使用したプログラムについて>
     最初はこのプログラムをロボコンで使用するつもりでしたが、光センサーがうまく反応せず、また、故障?してしまったため、このプログラムは実際には使用していません。
  • ゴールに缶を入れるロボットのプログラム(制作者:音案)
    line countを使おうかと考えもしましたが缶を取るロボットよりも精密さは必要としないために使い慣れているプログラムを使いました。ロボット制作担当の皆さんせっかく光センサーをつけてくれたのにそれを使わないでごめんなさい。
     task main()
     {
       SetSensor(SENSOR_2,SENSOR_TOUCH);//センサ−2がタッチセンサーであると宣言
       
       while(true)
       {
           if(SENSOR_2==1)//もしセンサー2が押されたら
           {
               OnFwd(OUT_B);//アームを閉じて
               Wait(200);
               OnRev(OUT_A+OUT_C);//2.5秒後退
               Wait(250);
               OnFwd(OUT_A);//1.3秒左回転
               OnRev(OUT_C);
               Wait(130);
               Off(OUT_A+OUT_C);
               OnRev(OUT_A+OUT_C);//2.8秒後退
               Wait(280);
               Off(OUT_A+OUT_C);
               OnRev(OUT_A);//1.5秒右回転
               OnFwd(OUT_C);
               Wait(150);
               Off(OUT_A+OUT_C);
               OnRev(OUT_B);//アームを開く
               Wait(200);
               OnFwd(OUT_A+OUT_C); //2.5秒前進
               Wait(250);
               Off(OUT_A+OUT_C);
    ここで缶はゴールに入る(予定)。
               OnRev(OUT_A+OUT_C);//1秒後退
               Wait(100);
               Off(OUT_A+OUT_C);
               OnFwd(OUT_B);//アームを閉じる
               Wait(200);
               Off(OUT_B);
               OnFwd(OUT_A);//1.3秒左回転
               OnRev(OUT_C);
               Wait(130);
               Off(OUT_A+OUT_C);
               OnFwd(OUT_A+OUT_C);//2.9秒前進
               Wait(290);
               Off(OUT_A+OUT_C);
               OnRev(OUT_A);//1.2秒右回転
               OnFwd(OUT_C);
               Wait(120);
               Off(OUT_A+OUT_C);
               OnRev(OUT_B);//アームを開く
               Wait(100);  
               Off(OUT_B);
               OnFwd(OUT_A+OUT_C);//2秒前進
               Wait(200);
               Off(OUT_A+OUT_C);
           }
       }
     }
    本当はこのプログラムのあとに光センサーを使って正確にもとの位置に戻そうとするプログラムを作ったのですが、スタート直後に急に前進したりという誤作動を起こすために削除。

ロボット&プログラム制作日記(記録者tako-ru)

運び屋ロボット

  • 工夫点
    • 350gの缶を前に乗せてもバランスを失わないように、缶とロボット本体の重心を考慮し、NQCを後ろの部分に完全固定しました。最初は今までどうり上に乗せるつもりでしたが、アームを装着する関係上で乗せることができなかったので試行錯誤を重ねた結果、いまの形にいたりました。
       
    • かなり重い機体のバランスをとるため、一番面積率の高いキャタピラを使用しました。黄色いホイールや大ホイールなども試しましたが、缶の重さに負けて、缶の上に乗り上げてしまったり、馬力が欠けるため運ぶ時間がかかり過ぎ、3分を大幅にオーバーしたりと問題だらけになり、あまりほかの班は使用してはいませんがキャタピラの使用を決めました。
  • アームの上げ下げを最大限の高さ、低さにもっていくためには、アームだけの重さでは足りませんでした。そこでアーム上部に大ホイールを装着しました。大ホイールの重さにより、最大限の動きをするアームを制作しました。  
  • 缶を初期位置から引き出す際に、従来の丸いギアではトルクが心細く、たまに缶の重さに負け、缶をその場に置いていくという事態が発生しました。そこで一番トルクの高いウォームギアを使用しました。これにより缶を引き出す力が増しただけでなく、アームの上げ下げをスムーズになり効果絶大でした。ウォームギアの写真はアップしといたのでご覧ください。
  • 苦労点
    • 缶の重さに負けない機体を作るのに苦労しました。さらにそこにアームを装着しなければならないので、その装着場所を決定するのにも苦労しました。要した時間・・・72時間(これはマジです。)
  • 缶をとる際のプログラムを制作するのにも苦労しました。最初は時間を計って動かすつもりでしたが、コースを走るたび微妙に誤差が出るので、急遽ライントレースに切り替えました。コースにラインが交差していて、ただのライントレースでは歯が立たないので、変数を組み合わせたプログラムを制作。夜を徹して制作しました。かかった時間・・・2日(2徹)
  • 睡眠時間が・・・・・足りません。自分との戦いに苦労しました。
  • 失敗・反省点
    • 缶はキャッチできたのですが、受け渡しの時にロボがずれたり、缶がアームに引っかかったままになったり、2機目のロボのタッチセンサーが反応しなっかたりで、結局得点ができませんでした。 通信機能を加えて、缶を完全に2機目に渡すまで行動を続けさせるプログラムを使うべきだったと後悔してます。通信機能はCのどこかが使っていたのですが、かなり正確だったのですごいと思いました。私達のロボは直前の練習でうまくいっていただけに0点という結果を残念に思っています。
  • プログラムに関して、最後の缶を渡す直前のストレートの動きで、ライントレースを加え、確実に2機目にまっすぐいく動きを取り入れるべきでした。そうすればずれてうまく渡せないという事態 は防げたはずです。いまとなってはもうどうしようもありませんが本当に残念です。
  • 土台をキャタピラにしたため、本来なら簡単にとるはずだった右端の缶が、すぐ横の「壁」のために小回りがきかず、直前になってとれない事が判明しました。タイヤを考えましたが、力が心細かったのでキャタピラで続行を決めました。早いうちから「壁」の事についてTAさんに確認しておくべきでした。
  • 私たちはできれば缶を2個とりたかったのですが、練習の時に左端の缶をとろうとしましたが缶を倒しまくり、得点よりマイナスになったので中止しました。なんとかしてあの缶をとろうと考えましたが時間が足りませんでした。はやいうちからこういう不足の事態が起こるのことについて何か対策を考えておくべきでした。

ゴールにシュートするロボット

  • 工夫点
    • こっちのロボットも運び屋ロボット同様、缶の重さに負けないため、キャタピラ、ウォームギアを使用。そしてバランスをはかるため、NQCを後部に完全固定しました。
  • こっちのロボは運び屋と違いアームが左右にわかれています。アームの可動時間をプログラムに入れて動かすのですが、左右分かれているので、時間が長すぎるとアームが中に食い込み過ぎてアームが壊れたり、時間が短いと完全に閉じず、缶をつかめませんでした。開く際にも同じような事がおこりました。缶のつかみ具合により、アームの可動時間にむらがあるので、いつも完全に閉じたり開いたりさせるために、アームに白いギアを付けました。白いギアは力をある程度加えると中で空回りするので、時間を長目にしても閉じすぎず開ききらないという状況が改善できました。
  • ゴールの前に棒があり、缶をある程度強く押さなとゴールできませんでした。そこで全体的に機体重量を上げ、缶を機体の上に乗せるような形で缶を入れます。それを可能にしたのが、ウォームギアとキャタピラ、そして中部に重心をおいた機体です。中部ががっちりしているので、缶に押し負けることがありません。
  • 苦労点
    • 缶、棒に負けないだけの力を発揮するボディを制作するのに食い労しました。缶は押せても棒を乗り越えられないという事態が発生し 、何回もロボを作り変えました。作り替えた回数7回。
  • だだ機体を重くしてもライトセンサー、タッチセンサーを付けなければならないので、その場所を考慮しつつ、重量をいかに重くするか、その思考錯誤に苦労しました。変なとこにつけては、うまく反応してくれなかったのでかなりの時間を要しました。
  • 運び屋制作過程でかなりのギアを使用したのでこの機体のギア配分に苦労しました。説明書のキャタピラではギアが足りないのでムダを一切はぶき、動く事だけに専念したキャタピラを制作せざるをえませんでした。アームにもギアを節約しました。ロボ二つなのでギア、パーツ配分をするのに時間がかかり、実際一番苦労しました。
  • 缶をもっているときともっていないときでは回転、直進などの秒数も違ってくるのでその辺の設定にも手こずりました。
  • 失敗・反省点
    • このロボットは缶をキャッチさえすればほぼ100%で成功します。得点できなっかた原因は受け渡しです。1機目にもよりますが、この機体のタッチセンサーに原因があります。アームの下棒の上についているので、ある程度強い力で缶を押さないと反応できません。そのためセンサーの前に小バンパーを付けて感度をよくしようとしましたが、時間が足りず調整ができませんでした。もっと受け渡しのやり方を始めから考慮すべきでした。
  • 本当はゴールを入れたあとにロボットが元の位置に戻るというプログラムを作っていたのですが変な誤作動を起こしてしまい無駄に缶を倒してしまう可能性があったので断念しました。

感想

  • 0点という結果に納得はできませんがみんなと協力してロボコンに出られたことを素晴らしく思っています。最初ロボットなど触った事のない自分が不安でしたが、この講義は初心者でもわかりやすく、自分も少し複雑なプログラムなども作れるようになり、とても満足しています。そしてこのチームメンバーでロボコンに参加できて本当によかったと思っています。チームの皆さんお疲れさまでした。m(__)m

コメントをどうぞ

  • プログラムのコメント文や、苦労・改善点などは詳しくよく書かれています。が、試合の作戦・流れに関してもう少し書いてもらえるとよりわかりやすくなるでしょう。 -- まいける(TA) 2006-08-16 (水) 00:18:45
  • 添付する画像ファイルのファイル名を半角のアルファベットと数字を使ったものに変更してみてください。そうすれば問題なく表示できると思います。 -- 松本(教員)? 2006-08-16 (水) 17:37:09
  • アルファベットに直してみたのですがうまく表示できません -- 音案? 2006-08-20 (日) 00:15:20


添付ファイル: fileSN340018.JPG 127件 [詳細] fileSN340017.JPG 123件 [詳細] fileSN340016.JPG 120件 [詳細] fileSN340015.JPG 129件 [詳細] fileSN340014.JPG 123件 [詳細] fileフロント.jpg 99件 [詳細] file内部.jpg 110件 [詳細] file 後ろ_001.jpg 90件 [詳細] file前2.jpg 99件 [詳細] file前.jpg 107件 [詳細] file後ろ.jpg 106件 [詳細] fileギア.jpg 111件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-08-21 (月) 02:05:03 (4749d)