[[2006a/MemberOnly/進行状況A]]
**もくじ [#u6ea9b80]
#contents

**製作メンバー [#ue686128]
 ドラ・毛利・ポロリ・トラ・ヤマヒロ・サット・モロ・(和知)

**ロボット名 ロボコンキラー1号(試作品) (缶を運び出すマシン) [#f78f500e]

#ref(060801_164430.jpg)
**ロボット名 ロボコンキラー1号(改良版) [#c765a2d7]
#ref(DVC00001.JPG) [#u99fd4b7]
**ロボット名 ロボコンキラー1号(完成版) [#v8533b01]
#ref(060802_111111.jpg)
 
**ロボット名 ロボコンキラー2号(試作品)(缶をゴールに入れるマシン) [#t73bffbb]
#ref(060801%5f152250.jpg) 
**ロボット名 ロボコンキラー2号(改良版) [#rbd581d3]
#ref(DVC00002.JPG)
**ロボット名 ロボコンキラー2号(完成版) [#y053ed85]
#ref(DVC00101.JPG)
**ロボット制作者 ポロリ&トラ&サット&ドラ&ヤマヒロ&モロ&毛利 [#i3217109]


**プログラム(缶を運び出す)制作者ドラ&ヤマヒロ&トラ[#r52818dc]
 #define straight OnFwd(OUT_A+OUT_C);
 #define back OnRev(OUT_A+OUT_C);
 #define turn_r OnFwd(OUT_C);OnRev(OUT_A);
 #define turn_l OnFwd(OUT_A);OnRev(OUT_C);
 #define off Off(OUT_A+OUT_C);
 #define nomikomi OnRev(OUT_B);
 #define hakidashi OnFwd(OUT_B);
 #define straight OnFwd(OUT_A+OUT_C);   //前進する
 #define back OnRev(OUT_A+OUT_C);   //後退する
 #define turn_r OnFwd(OUT_C);OnRev(OUT_A);  //右旋回
 #define turn_l OnFwd(OUT_A);OnRev(OUT_C);  //左旋回
 #define off Off(OUT_A+OUT_C);        //ストップする
 #define nomikomi OnRev(OUT_B);     //缶を飲み込む
 #define hakidashi OnFwd(OUT_B);    //缶を吐き出す
 task main()
 {
 Float(OUT_A+OUT_C);
 straight
 Wait(60);
 off
 Wait(45);
 back
 Wait(40);
 off
 Wait(45);
 SetSensor(SENSOR_2,SENSOR_TOUCH);
 straight
 nomikomi
 until(SENSOR_2==1);
 off
 nomikomi
 Wait(300);
 back nomikomi
 Wait(150);
 Off(OUT_A+OUT_C+OUT_B);
 Wait(50);
 turn_l
 Wait(90);
 off
 Wait(50);
 hakidashi turn_l
 Wait(100);
 Off(OUT_A+OUT_B+OUT_C); 
 ClearTimer(0);
 while(Timer(0)<=500){SendMessage(1);}
 if(Message()==2){
 turn_r
 Wait(100);
 straight
 nomikomi
 until(SENSOR_2==1);
 off
 nomikomi
 Wait(300);
 back nomikomi
 Wait(200);
 Off(OUT_A+OUT_C+OUT_B);
 Wait(50);
 turn_l
 Wait(78);
 off
 Wait(50);
 hakidashi turn_l
 Wait(100);
 Off(OUT_A+OUT_B+OUT_C);
 if(Message()==6){
 turn_r
 Wait(100);
 straight
 nomikomi
 until(SENSOR_2==1);
 off
 nomikomi
 Wait(300);
 back nomikomi
 Wait(200);
 Off(OUT_A+OUT_C+OUT_B);
 Wait(50);
 turn_l
 Wait(78);
 off
 Wait(50);
 hakidashi turn_l
 Wait(100);
 Off(OUT_A+OUT_B+OUT_C);
 while(FastTimer(0)<=500){SendMessage(5);}}}}                                           
 Float(OUT_A+OUT_C);   //前方の缶を体当たりによりどかす
 straight              ↓
 Wait(60);              ↓
 off                                 ↓
 Wait(45);                       ↓           
 back          //後退して体勢を立て直す
 Wait(40);                ↓
 off                                 ↓
 Wait(45);                      ↓
 SetSensor(SENSOR_2,SENSOR_TOUCH); //タッチセンサーをセットする
 straight       //1つ目の缶に当たるまで前進し缶をロボに取り込む
 nomikomi              ↓
 until(SENSOR_2==1);         ↓
 off                                 ↓
 nomikomi                            ↓
 Wait(300);                          ↓
 back nomikomi    //缶を取り込んだまま後退を開始
 Wait(150);                    ↓
 Off(OUT_A+OUT_C+OUT_B);             ↓
 Wait(50);                           ↓
 turn_l              //少しだけ左に回転する
 Wait(90);              ↓          
 off                          ↓
 Wait(50);                           ↓
 hakidashi turn_l    //缶を吐き出しながら左回転によりもう1台のロボに渡す
 Wait(100);             ↓
 Off(OUT_A+OUT_B+OUT_C);       ↓
  if(Message()==2){  //もう1台が缶を受け取ると発信されるメッセージを受信すると行動開始
 turn_r        //1回目に左に振ったぶん元に戻す
 Wait(100);             ↓
 straight             //2個目缶を回収開始
 nomikomi              ↓
 until(SENSOR_2==1);         ↓
 off                 ↓
 nomikomi              ↓
 Wait(300);             ↓
 back nomikomi            ↓
 Wait(200);             ↓
 Off(OUT_A+OUT_C+OUT_B);       ↓
 Wait(50);              ↓
 turn_l      //1回目と同様に缶を受け渡す
 Wait(78);              ↓
 off                      ↓
 Wait(50);              ↓
 hakidashi turn_l              ↓
 Wait(100);             ↓
 Off(OUT_A+OUT_B+OUT_C);       ↓
 if(Message()==6){  //もう1台が2個目の缶を受け取ると発信されるメッセージを受信したら行動開始
 turn_r       //左に動いた分の修正
 Wait(100);             ↓
 straight      //3個目の缶を回収開始
 nomikomi                            ↓
 until(SENSOR_2==1);         ↓
 off                 ↓
 nomikomi                            ↓
 Wait(300);             ↓
 back nomikomi            ↓
 Wait(200);             ↓ 
 Off(OUT_A+OUT_C+OUT_B);       ↓
 Wait(50);              ↓
 turn_l      //1個目と同様に缶を受け渡す
 Wait(78);              ↓
 off                                ↓
 Wait(50);              ↓
 hakidashi turn_l          ↓
 Wait(100);             ↓
 Off(OUT_A+OUT_B+OUT_C);       ↓
 }}}                            //終了
-このプログラムの特徴    
このプログラムはまず最初に前方にある缶が邪魔なので減点覚悟で体当たりによりどかすことです。そして、缶を運び出しもう1台と連携するときに缶を吐き出すタイミングを調整して上手いこと横になったまま缶を転がすことにしたことです。             
**プログラム(缶をゴールに入れる)制作者毛利&モロ [#ned659ea]
 task main()
  {
    SetSensor(SENSOR_1,SENSOR_LIGHT);
    SetSensor(SENSOR_3,SENSOR_LIGHT);
    SetSensor(SENSOR_2,SENSOR_TOUCH);
    SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサーを定義する
    SetSensor(SENSOR_3,SENSOR_LIGHT); 
    SetSensor(SENSOR_2,SENSOR_TOUCH);   //タッチセンサーを定義
 
    ClearMessage();
    until(Message() != 0);
     if ( Message() == 1 )
     OnFwd(OUT_A + OUT_C);
     OnFwd(OUT_A + OUT_C);   //もしメッセージを受け取ったら前進
     
     until(SENSOR_2 >= 1 );
     until(SENSOR_2 >= 1 );   
     Off(OUT_A + OUT_C);
     Wait(100);
     Wait(100);      //センサー2が反応するまで静止
     OnFwd(OUT_B);
     Wait(300);
     Off(OUT_B);
     Wait(100);
     OnRev(OUT_A + OUT_C);
     OnRev(OUT_A + OUT_C);   //3秒後退
     Wait(300);
     Off(OUT_A+OUT_C); 
     Off(OUT_A+OUT_C);  
 
     ClearTimer(0);
     while ( Timer(0) <= 500 ) { SendMessage(2); }
     Wait(500); 
 
     OnFwd(OUT_A);OnRev(OUT_C);
     OnFwd(OUT_A);OnRev(OUT_C);  //タイヤAとタイヤCを使って回転
     Wait(75);
     OnFwd(OUT_A+OUT_C);
     Wait(200);
     OnFwd(OUT_C);OnRev(OUT_A);
     Wait(75);
     Off(OUT_A+OUT_C);
     OnRev(OUT_B);
     Wait(300);
     Off(OUT_B);
     OnFwd(OUT_A+OUT_C); 
     OnFwd(OUT_A+OUT_C);  //3秒前進
 
     Wait(300); 
     
     OnRev(OUT_A+OUT_C);
     OnRev(OUT_A+OUT_C);   
     Wait(200);
     OnFwd(OUT_C);OnRev(OUT_A);
     Wait(100);
     OnFwd(OUT_A+OUT_C);
     OnFwd(OUT_A+OUT_C);   //2秒前進
     Wait(200);
     OnFwd(OUT_A);OnRev(OUT_C); 
 
     OnFwd(OUT_A + OUT_C);
     until(SENSOR_2 >= 1 );
     until(SENSOR_2 >= 1 );  //センサー2が反応するまで静止
     Off(OUT_A + OUT_C);
     Wait(100);
     OnFwd(OUT_B);
     Wait(300);
     Off(OUT_B);
     Wait(100);
     OnRev(OUT_A + OUT_C);
     Wait(300);
     Off(OUT_A+OUT_C); 
 
     ClearTimer(0);
     while ( Timer(0) <= 500 ) { SendMessage(6); }
     Wait(500); 
 
     OnFwd(OUT_A);OnRev(OUT_C);
     OnFwd(OUT_A);OnRev(OUT_C);   //タイヤAとタイヤCを使って回転
     Wait(75);
     OnFwd(OUT_A+OUT_C);
     Wait(200);
     OnFwd(OUT_C);OnRev(OUT_A);
     Wait(75);
     Off(OUT_A+OUT_C);
     Off(OUT_A+OUT_C);    //タイヤをとめて静止
     OnRev(OUT_B);
     Wait(300);
     Off(OUT_B);
     OnFwd(OUT_A+OUT_C);  
     Wait(300); }
**難しかった点 [#oa08f8e0]
 今回はプログラムの制作がとてもむずかしかったです。
 プログラム面について 今回はプログラムの制作がとてもむずかしかったです。
 完全にあっているプログラムを打ち込んでいるはずなのになぜかエラーがでてしまい三時間ぐらいそれでなやまされました。
 結局エラーの原因はわからず終いで仕方なくその部分を変えるをよぎなくされました。
 それ以外にロボットの制作にかなり悩まされました。
 ロボット面について やはり今回もロボットの制作にかなり悩まされました。
 缶をどのようにつかむかという難題にぶちあたり苦労しました。
 それに缶を障害物を越えてゴールに入れるという部分が半端なく難しかったです。
 マシンが普通に缶を押しても、缶の重さに押し負けるか、缶の表面を滑って乗り上げてしまうかの繰り返しでした。
 その他には2つのロボット間の通信が僕らを苦しめました。
 相互にメッセージを送るというプログラム自体は簡単でしたが、実際動かしてみると、全然意思疎通ができていないロボットのようにうごきました。
 そして一番の難点が缶を運ぶ際に使うはずでアームが使えなかった事です。
 僕らの班はモーターが一個潰れていて使い物にならなくなっていたので、それを補う為の代用的な部分を頑張って考えました。
 それにしてもロボコンに間に合うのか本当に心配です!!!

-改善策
--プログラム編
缶を運び出すロボのプログラムでは…ほとんどを時間を使って調整したので1度誤差が出るとすぐにめちゃくちゃになり修正をするところが無かったのでもっとセンサーやいろいろな機能を駆使して誤差が生じても修正のきくプログラムを作ると更によくなると思う。
缶をゴールに入れるロボのプログラムでは…
--ロボット編
まずロボット全体の重さを重くすることによって、障害物にあたっても進む方向が微妙にずれないようにすることがあげられます。そのほかにはタッチセンサーの感度をマックスにして、すこしの衝撃でアームを閉じるようにすることが必要です。というのも、缶がセンサーにあたってから閉じるまでの時間調節がうまくいかなかった斑が多かったからです。
**工夫した点 [#v764df1d]
 *缶を運び出すマシンの工夫した点は障害物を除去するという方法をとったところです。
 先端にあるチューブで缶を少しずつ動かし、巨大なタイヤで木の障害物をものともせず動くことができます。
 またもう一つのマシンと通信もできるようにしたので缶を運んでいるときにもう一つのマシンがぶつかってくることがないようにしました。
 また三輪車にしたのでマシンの軽量化とコンパクト化に成功しました。
 これによりスムーズに動くという利点を獲得しました。
 そして前の部分が異常なまでに重くなったので後ろに様々な部品をつけて重心ちょうど機体の真ん中にくるように設定しました。
#ref(060801_164509.jpg)

 *缶をゴールに入れるマシンの工夫した点は缶を持ったまま横に曲がる時にどうしても缶がマシンからはなれてしまうのを防ぐために、タイヤをつけたことです。
 このタイヤはマシンの上部につけられており、缶を上から押さえつけることでタイヤと缶の間に摩擦を生じさせ滑りにくくしています。
 これにより缶は横に曲がるときにマシンから離れなくなりました。
 その他には光センサーを二個使いマシンが進む経路をしっかり確立させました。
 速度は遅いですがなんとかゴールたどり着くようになりました。
 そして一番工夫したのが缶を上げるところです。言葉では言いにくいのですがテコの 原理のようなものを使って缶を挙げるようにしました。
 あとライントレースするための線が十字にクロスしていたので、どのように光センサーをとりつけたらいいかかなり迷いました。
#ref(060801%5f154752.jpg)

**製作を終えて(あいうえお作文で表してみました。) [#g92efa5e]
 ロ ウ力を使う作業だった。とても疲れました。
 ボ ク達はみんなでなんとか力を合わせて製作を終えることができました。
 コ ンドまたロボティクスをやることがあったら、今までの授業で溜めた知識を使いたいです。
 ン 〜明日のロボコン頑張るぞーー!!!!!!!!
**感想&反省 [#bcd7a95d]
 本当に疲れました〜。
 今までの課題を軽く上回る労働基準法に記載されている基準を軽く上回るくらい働きました。
 まっみんなロボティクスが好きなので苦にはなりませんでした(笑)今回はかなりチームワークが重要になってきました。
 誰がかけても今回の課題は完成しなかったと思います。
 ロボットコンテストでは間を押し出すところまではうまくいったのですが、そのあとの缶をもう一台のロボットに受け渡すところがうまくいきませんでした。
 障害物なしでもその結果は変わらず安定性がたもたれていなかったのが原因です。
 もう少しそのへんを考慮に入れてマシンを改良したらよかったと思います。
 今までロボティクスの授業はとても楽しかったです。つらいことや大変なこともあったけど、全部ひっくるめてよかったと思いました。
 これからこの知識を生かして生活に役立てていきたいと思います。
*コメントお願いします。 [#b1f4fdd0]
-プログラムの解説とコメントがありません。難しかった点について、プログラムに関すること、ロボットに関することをわけて、具体的な改善策をかくとよいでしょう。 -- [[まいける(TA)]] &new{2006-08-15 (火) 23:48:55};
-再評価お願いします -- [[A5班員]] &new{2006-08-18 (金) 00:25:11};
-せっかくの写真があるので、写真と対応させながらロボットの見所(?)を一つずつ説明するとよいでしょう。また、そうすることでプログラムの説明もしやすくなると思います。 -- [[松本(教員)]] &new{2006-08-18 (金) 10:47:54};
-「もっとセンサーやいろいろな機能を駆使して」いろいろな機能を駆使してというところが重要だと思います。「言葉では言いにくいのですがテコの 原理のようなものを使って缶を挙げるようにしました。」図や写真を使って説明してみてください。「どのように光センサーをとりつけたらいいかかなり迷いました。」結局どのように光センサーをつけたのかの解説が欲しいです。他の◎以上の班と違うのは、文章が具体的でなく概要だけしか書かれていないところ。そして、どこが大事で要点なのか、どういう流れでそうなったのかがよくわからない(A1やA2はその点が比較的明確)。といったところでしょうか。 -- [[まいける(TA)]] &new{2006-08-18 (金) 22:49:19};

#comment


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