[[2008a/A3/課題1右]]
[[2008a/A3/ロボコン]]

#hr
CENTER:&size(30){似顔絵を描くロボット};
CENTER:&size(30){ロボコン};
#hr

CENTER:&size(20){製作者:KEN&SYOU};
CENTER:&size(20){製作者:A3};

RIGHT:[[ロボティクス入門ゼミ]]
RIGHT:[[2008a/A3]]

目次
#contents

*課題 [#ae11a315]
A3の紙に相棒の似顔絵を描くロボットの作成。

*ルール [#p4e19b4b]
*戦略 [#d609acb1]
*ロボットの紹介 [#t784e5bf]
**ロボットの写真 [#if5a028a]
***前・後 [#u95e1d90]
#ref(2008a/A3/課題1右/f.jpg,50%,前:あくまでもこっちが前です!)
#ref(2008a/A3/課題1右/r.jpg,50%,後:あくまでもこっちが後です!)
前と後の写真です。あくまでも上の写真が前です!前後反対に見えるかもしれませんが…~
Aを左側のタイヤに、Cを右側のタイヤに、そして、Bをペン上下のために使用しました。~
後にはSYOU特製のウインチが...実はコード巻くのに重要な役割を果たしています。~
あと、結構ボタンが押しやすいです。
**ロボットの写真 [#z1b5dc2b]
**ロボット作成において苦労した点・工夫した点 [#b861fcbc]
アームがボールの重さに耐えられず、持ち上げられなかったので、アームと駆動軸をつなぐ所を補強した。
*プログラムの紹介 [#ec12ada9]
/*
大まかな流れ
1、スタート地点から玉がおいてあるところまで移動
2、押すロボに手伝ってもらって玉を背負ったかごの中、頭の上、手かごの中に
3、ひとつ目のゴールに移動
4、背負ったかごから玉をゴールに入れる
5、ふたつ目のゴールに移動
6、頭の上、手かごの中の玉を背負ったかごの中に入れる
7、背負ったかごから玉をゴールに入れる
8、終わり
*/ [#fe15b81e]
*/ [#ja6683e9]

***横 [#ea77363f]
#ref(2008a/A3/課題1右/s.jpg,50%,横)
横の写真です。最初は本体と、制御部分が微妙にズレていて、不安定でしたが、黒長いブロックで、だいぶ補強できました。~
また、大きいタイヤを重い方にもってくることでより安定性が増しました。

***斜前・斜後 [#t7302208]
#ref(2008a/A3/課題1右/fs.jpg,50%,斜前)
#ref(2008a/A3/課題1右/rs.jpg,50%,斜後)
斜前と斜後の写真です。ここからだとペンが真ん中にあることがよくわかると思います。
task main ()
{
 SetSensor(SENSOR_1,SENSOR_LIGHT);  //  SENSOR_1 は光センサ
 SetSensor(SENSOR_2,SENSOR_ROTATION);  //  SENSOR_2 は回転センサ
 task main ()
 {
 SetSensor(SENSOR_1,SENSOR_LIGHT);  //  SENSOR_1 は光センサ
 SetSensor(SENSOR_2,SENSOR_ROTATION);  //  SENSOR_2 は回転センサ
/*工程1、スタート地点から玉がおいてあるところまで移動*/
 OnRev(OUT_A+OUT_C);//モーターAとCを正回転
 Wait();//玉がおいてあるところまで前進!!!!!!!!!!!!
 OnFwd(OUT_C);モーターCを正回転 
 OnRev(OUT_A);モーターAを逆回転
 Wait();玉が置いてある方向を向く!!!!!!!!!!!!!!!

***ペン [#eae405ef]
#ref(2008a/A3/課題1右/P2.jpg,50%,ペン)
ペンの写真です。ペンは王道マジックペンを使用しております。これが一番描きやすいですね。~
仕組みは、写真向かって左のタイヤのみモーターで動きます。タイヤなのでホールド性抜群です。
 OnRev(OUT_A+OUT_C);//モーターAとCを正回転
 Wait();//玉がおいてあるところまで前進!!!!!!!!!!!!
 OnFwd(OUT_C);モーターCを正回転 
 OnRev(OUT_A);モーターAを逆回転
 Wait();玉が置いてある方向を向く!!!!!!!!!!!!!!!
 
/*工程2、押すロボに手伝ってもらって玉を背負ったかごの中、頭の上、手かごの中に*/

**改造前のロボットの写真 [#l409d552]
***改善前ペン下げ状態 [#p1d69154]
#ref(2008a/A3/課題1右/O1.jpg,50%,改善前ペン下げ)
これが改造前のロボット、ペンを下げた状態です。ロボット後のプーリーにゴムでペンを取り付けていました。~
また、ペンを固定するため描いている時はずっとモーターを入れっぱなしにして、ペンを右のブロックに押し当てるという乱暴な?システムをとっていました。~
 Wait();押すロボが手かごに玉を入れてくれるのを待つ!!!!!!!!!!!!
 OnRev(OUT_2);//手を上げて背負ったかごに玉を入れる
  while (true){
   ClearSensor(SENSOR_1);  // 回転センサをリセット
   until (SENSOR_1 > 16);  // 回転センサの値が16になるまで待つ!!!!!!!!!!!!
   Float(OUT_2);//手を下げる
   }

***改善前ペン上げ状態 [#i037b1ca]
#ref(2008a/A3/課題1右/O2.jpg,50%,改善前ペン上げ)
これが改造前のロボット、ペンを上げた状態です。ペン上げるための回転数が難しく、下手をするとぶっ飛びました。~
シンプルでなかなか良いシステムだったのですが、どうしてもペンを下げる時に擦ってしまい断念しました。
 Wait();押すロボが手かごに玉を入れてくれるのを待つ!!!!!!!!!!!!
 OnRev(OUT_2);//手を上げて背負ったかごに玉を入れる
  while (true){
   ClearSensor(SENSOR_1);  // 回転センサをリセット
   until (SENSOR_1 > 16);  // 回転センサの値が16になるまで待つ!!!!!!!!!!!!
   Float(OUT_2);//手を下げる
   }

**ロボット作成において苦労した点・工夫した点 [#b861fcbc]
***苦労した点 [#q79ceb82]
やはり、ペンを中心に持ってくる様に改造するのに一番苦労しました。~
最初はモーターにプーリーをつけ、そこにペンをゴムで固定する方式をとっていましたが、~
不安定であるのと、ペンを下ろす時に少し地面を擦るので、タイヤで上げ下げするシステムに変更しました。~
これにより、ホールド性が向上し、ペンの上下も楽に行えるようになりました。~
また、ペンをロボットの中心に近づけることで、いろいろな円が描けるようになりました。
 Wait();押すロボが手かごに玉を入れてくれるのを待つ!!!!!!!!!!!!
 OnRev(OUT_2);//手を上げて頭に玉をのせる
  while (true){
   ClearSensor(SENSOR_1);  // 回転センサをリセット
   until (SENSOR_1 > 16);  // 回転センサの値が16になるまで待つ!!!!!!!!!!!!
   Float(OUT_2);//手を下げる
   }

***工夫した点 [#d358c231]
なるべくシンプルで綺麗なロボットになるようにしました。特にSYOU特製のウインチは傑作です。~
あと、なるべく細かく補強しました。
 Wait();押すロボが手かごに玉を入れてくれるのを待つ!!!!!!!!!!!!
 OnRev(OUT_2);//手を上げて手かごに玉を入れる
  while (true){
   ClearSensor(SENSOR_1);  // 回転センサをリセット
   until (SENSOR_1 > 16);  // 回転センサの値が16になるまで待つ!!!!!!!!!!!!
   Off(OUT_2);//手を止める
   }

*プログラムの紹介 [#ec12ada9]
**KENのプログラム [#r6bdf4d9]
 //似顔絵を描くプログラム
 #define T OUT_A+OUT_C //TはAとBのモーターを同時に:前進,後進用
 #define R OUT_C //RでCのモーターだけを:左に曲がる用
 #define L OUT_A //LでAのモーターだけを:右に曲がる用
 #define P OUT_B //PでBのモーターを:ペンの上下用
 
 sub pen_down() //ペンを下げるためのサブルーチン
 Wait();押すロボが手かごに玉を入れてくれるのを待つ!!!!!!!!!!!!
 OnRev(OUT_2);//手を上げて背負ったかごに玉を入れる
 while (true)
 {
   SetPower(P,3);
   OnFwd(P);
   Wait(20);
   Off(P);
 ClearSensor(SENSOR_1);  // 回転センサをリセット
 until (SENSOR_1 > 16);  // 回転センサの値が16になるまで待つ!!!!!!!!!!!!
 Float(OUT_2);//手を下げる
 }
 sub pen_up() //ペンを上げるためのサブルーチン
 {
   SetPower(P,3);
   OnRev(P);
   Wait(20);
   Off(P);
 Wait();押すロボが手かごに玉を入れてくれるのを待つ!!!!!!!!!!!!
 OnRev(OUT_2);//手を上げて背負ったかごに玉を入れる
 while (true){
 ClearSensor(SENSOR_1);  // 回転センサをリセット
 until (SENSOR_1 > 16);  // 回転センサの値が16になるまで待つ!!!!!!!!!!!!
 Float(OUT_2);//手を下げる
 }
 sub draw_curve() //カーブを描くためのサブルーチン
 {
   SetPower(L,7);
   SetPower(R,0);
   OnFwd(T);
   Wait(135);
   Off(T);
 Wait();押すロボが手かごに玉を入れてくれるのを待つ!!!!!!!!!!!!
 OnRev(OUT_2);//手を上げて頭に玉をのせる
 while (true){
 ClearSensor(SENSOR_1);  // 回転センサをリセット
 until (SENSOR_1 > 16);  // 回転センサの値が16になるまで待つ!!!!!!!!!!!!
 Float(OUT_2);//手を下げる
 }
 
 task main()
 {
                         //輪郭を描く
   pen_down(); //ペン降下
   draw_curve(); //カーブを描く
   OnFwd(L);Wait(270);Off(L); //円を描く
   draw_curve(); //カーブを描く
   pen_up(); //ペン上昇
   
      Wait(200);
                         //髪の毛を描く位置まで移動
   OnFwd(L);OnRev(R);Wait(75);Off(T); //方向転換
   OnRev(T);Wait(90);Off(T); //後進
   
      Wait(200);
                         //髪の毛を描く
   pen_down(); //ペン降下
   OnFwd(T);Wait(150);Off(T); //直進
   OnFwd(L);OnRev(R);Wait(110);Off(T); //方向転換
   OnFwd(T);Wait(120);Off(T); //前進
   pen_up(); //ペン上昇
 
   Wait(200);
                         //右目を描く位置まで移動
   OnFwd(R);OnRev(L);Wait(60);Off(T); //方向転換
   OnRev(T);Wait(30);Off(T); //後退
 
      Wait(200);
                         //右目を描く
   pen_down(); //ペン降下
   OnFwd(L);OnRev(R);Wait(500);Off(T); //小さな円を描く
   pen_up(); //ペン上昇
 
      Wait(200);
                         //左目を描く位置まで移動
   OnRev(T);Wait(85);Off(T); //後退
 
      Wait(200);
                         //右目を描く
   pen_down(); //ペン降下
   OnFwd(L);OnRev(R);Wait(500);Off(T); //小さな円を描く
   pen_up(); //ペン上昇
 
      Wait(200);
                         //鼻を描く位置まで移動
   OnFwd(T);Wait(15);Off(T); //前進
   OnFwd(L);OnRev(R);Wait(125);Off(T); //方向転換
 
      Wait(200);
                         //鼻を描く
   pen_down(); //ペン降下
   OnFwd(L);Wait(10);Off(L); //カーブを描く
   OnFwd(T);Wait(40);Off(T); //前進
   OnFwd(L);OnRev(R);Wait(180);Off(T); //方向転換
   OnRev(T);Wait(50);Off(T); //後退
   pen_up(); //ペン上昇
 
      Wait(200);
                         //口を描く位置まで移動
   OnFwd(L);OnRev(R);Wait(120);Off(T); //方向転換
   OnRev(T);Wait(80); //後退
   OnFwd(L);OnRev(R);Wait(100); //方向転換
   OnRev(T);Wait(60);Off(T); //後退
 
      Wait(200);
                         //口を描く
   pen_down(); //ペン降下
   OnFwd(T);Wait(80);Off(T); //前進
   pen_up(); //ペン上昇
 Wait();押すロボが手かごに玉を入れてくれるのを待つ!!!!!!!!!!!!
 OnRev(OUT_2);//手を上げて手かごに玉を入れる
 while (true){
 ClearSensor(SENSOR_1);  // 回転センサをリセット
 until (SENSOR_1 > 16);  // 回転センサの値が16になるまで待つ!!!!!!!!!!!!
 Off(OUT_2);//手を止める
 }
/*工程3、ひとつ目のゴールに移動*/

**SYOUのプログラム [#bbe3b007]
 OnFwd(OUT_A+OUT_C);//モーターAとCを逆回転
 Wait();//ゴールまで後進!!!!!!!!!!!!
 OnFwd(OUT_C);//モーターCを正回転 
 OnRev(OUT_A);//モーターAを逆回転
 Wait();//玉が置いてある方向にかごを向ける!!!!!!!!!!!!!!!

 task main()
 {
 OnFwd(OUT_B);Wait(5);//(set pen)
 
 OnFwd(OUT_A+OUT_C);//モーターAとCを逆回転
 Wait();//ゴールまで後進!!!!!!!!!!!!
 OnFwd(OUT_C);//モーターCを正回転 
 OnRev(OUT_A);//モーターAを逆回転
 Wait();//玉が置いてある方向にかごを向ける!!!!!!!!!!!!!!!
/*工程4、背負ったかごから玉をゴールに入れる*/

 OnRev(OUT_B);//背負ったかごを開ける
 Wait();//玉をゴールに入れる
 OnFwd(OUT_C);//閉める
 Off(OUT_B);
 OnRev(OUT_B);//背負ったかごを開ける
 Wait();//玉をゴールに入れる
 OnFwd(OUT_C);//閉める
 Off(OUT_B);
  
 OnFwd(OUT_A);Off(OUT_C);Wait(700);//(face outline)
 
 Off(OUT_A);
 
 OnRev(OUT_B);Wait(1);//(rize pen)
 
 Off(OUT_B);
 
 OnRev(OUT_A);OnFwd(OUT_C);Wait(40);//(turn for heir)
 
 OnRev(OUT_A);Off(OUT_C);Wait(30);//(fair for not confuse in face)
 
 Off(OUT_A);
    
 OnFwd(OUT_B);Wait(5);//(set pen)
 
 Off(OUT_B); 
 
 OnFwd(OUT_A);Off(OUT_C);Wait(425);//(fair)
 
 Off(OUT_A);
 
 OnRev(OUT_B);Wait(5);//(rize pen)
 
 Off(OUT_B);
 
 OnRev(OUT_A);OnFwd(OUT_C);Wait(40);//(turn for grass)
 
 OnFwd(OUT_A+OUT_C);Wait(50);//(grass for not confuse in face)
 
 OnFwd(OUT_A);OnRev(OUT_C);Wait(128);//(turn for heir)
 
 Off(OUT_A+OUT_B+OUT_C);Wait(100);
 
 OnFwd(OUT_A+OUT_C);Wait(10);//(grass bar)
 
 Off(OUT_A+OUT_B+OUT_C);Wait(100);
 
 OnFwd(OUT_B);Wait(5);//(set pen)
 
 Off(OUT_A+OUT_B+OUT_C);Wait(100);
 
 Off(OUT_B); 
 
 OnFwd(OUT_A+OUT_C);Wait(7);//(grass bar)
 
 OnRev(OUT_B);Wait(1);//(rize pen)
 
 Off(OUT_B); 
 
 OnFwd(OUT_A+OUT_C);Wait(40);//(grass for not confuse grass renz)
 
 OnFwd(OUT_B);Wait(4);//(set pen)
 
 Off(OUT_B);
 
 OnFwd(OUT_A);OnRev(OUT_C);Wait(330);//(grass renz)
 
 OnRev(OUT_B);Wait(1);//(rize pen)
 
 Off(OUT_B);
 
 OnFwd(OUT_A+OUT_C);Wait(40);//(grass for not confuse grass renz)
 
 OnFwd(OUT_B);Wait(4);//(set pen)
 
 Off(OUT_B);
 
 OnFwd(OUT_A);OnRev(OUT_C);Wait(330);//(grass renz)
 
 OnFwd(OUT_A+OUT_C);Wait(7);//(grass bar)
 
 OnRev(OUT_B);Wait(1);//(rize pen)
 
 Off(OUT_B);
 
 OnRev(OUT_A+OUT_C);Wait(47);//(nosue for not confuse face)
 
 OnRev(OUT_A);OnFwd(OUT_C);Wait(80);//(nosue for not confuse face)
 
 OnFwd(OUT_A+OUT_C);Wait(4);//(nosue for not confuse face)
 
 Off(OUT_A);
 
 OnFwd(OUT_B);Wait(4);//(set pen)
 
 Off(OUT_B);
 
 OnFwd(OUT_A+OUT_C);Wait(10);//(nosue)
 
 Off(OUT_A);
 
 OnRev(OUT_B);Wait(1);//(rize pen)
 
 Off(OUT_B);
 
 OnFwd(OUT_A+OUT_C);Wait(4);//(mouce for not confuse face)
 
 OnFwd(OUT_B);Wait(4);//(set pen)
 
  Off(OUT_B);
 
 OnFwd(OUT_A);OnRev(OUT_C);Wait(70);//(grass renz)
 
 OnRev(OUT_A);OnFwd(OUT_C);Wait(120);//(grass renz)
 
 Off(OUT_A+OUT_B+OUT_C);
 
 }

/*工程5、ふたつ目のゴールに移動*/

**プログラム作成において苦労した点・工夫した点 [#c6b23dad]
***苦労した点 [#nad96556]
関数とかの使いどころが分かりませんでした。~
waitの設定が日々変化するのがつらいところでした。~
せっかく書いたプログラムの横のコメントが文字化けしたのが嫌でした。~
 OnFwd(OUT_A+OUT_C);//モーターAとCを逆回転
 Wait();//ゴールまで後進!!!!!!!!!!!!
 OnFwd(OUT_C);//モーターCを正回転 
 OnRev(OUT_A);//モーターAを逆回転
 Wait();//玉が置いてある方向にかごを向ける!!!!!!!!!!!!!!!
 OnFwd(OUT_A+OUT_C);//モーターAとCを逆回転
 Wait();//ゴールまで後進!!!!!!!!!!!!
 OnFwd(OUT_C);//モーターCを正回転 
 OnRev(OUT_A);//モーターAを逆回転
 Wait();//玉が置いてある方向にかごを向ける!!!!!!!!!!!!!!!

***工夫した点 [#g57701a9]
転倒するのを防ぐためにoffを多用しました。~
ずれるのを防ぐためにできるだけつなげてかけるようにしました。~
/*工程6、頭の上、手かごの中の玉を背負ったかごの中に入れる*/

*似顔絵 [#p976ca15]
 OnRev(OUT_2);//手を上げて背負ったかごに玉を入れる
  while (true){
   ClearSensor(SENSOR_1);  // 回転センサをリセット
   until (SENSOR_1 > 16);  // 回転センサの値が16になるまで待つ!!!!!!!!!!!!
   Float(OUT_2);//手を下げる
   }
 OnRev(OUT_2);//手を上げて背負ったかごに玉を入れる
 while (true){
 ClearSensor(SENSOR_1);  // 回転センサをリセット
 until (SENSOR_1 > 16);  // 回転センサの値が16になるまで待つ!!!!!!!!!!!!
 Float(OUT_2);//手を下げる
 }

**似顔絵の写真 [#u5b1b4e7]
/*工程7、背負ったかごから玉をゴールに入れる*/

***KENの描いた似顔絵 [#a0da2aac]
#ref(2008a/A3/課題1右/KEN.jpg,50%,KENの似顔絵)
SYOUに似ているとかいうレベルではありません…~
口の位置まで移動するのが難しかったです。最後は力技で時間を変えて何回も調整しました。~
髪の毛の上の部分が描けなかったのが心残りではあります…
 OnRev(OUT_B);//背負ったかごを開ける
 Wait();//玉をゴールに入れる
 OnFwd(OUT_C);//閉める
 Off(OUT_B);
 OnRev(OUT_B);//背負ったかごを開ける
 Wait();//玉をゴールに入れる
 OnFwd(OUT_C);//閉める
 Off(OUT_B);

***SYOUの描いた似顔絵 [#ba4bd144]
#ref(2008a/A3/課題1右/SYOU.jpg,50%,SYOUの似顔絵)
特徴がメガネだけだというのはいかがなものかとは思いました。~
練習ではうまくいったのに本番では鼻とかがずれたのはいい思い出です。

*レポート作成について [#yfa7b91b]
最初は右も左もわからず、写真も貼れなかったんですが、なんとか書き上げることができました。こうやって振り返ってみるのもいいものですね。

/*工程8、終わり*/
}
 }
**プログラム作成において苦労した点・工夫した点 [#c6b23dad]
*感想・反省など [#d09d4407]
**KEN [#pb8fa44a]
最初はどうなることかとおもいましたが、結構ハイレベルな絵が描けたと思います。プログラムは別として…~
時間はかなりかけたつもりです。SYOUも何回も一緒に残ってくれてありがとう!
**SYOU [#a3cb75be]
プログラムを整理しようと思ったけど関数の意味がわからなかったのはいい思い出です。

*未解決の問題 [#q95aa5c4]
その場で回転して、方向を変える時にペンの位置がずれてしまう。~
関数などを使いこなせなかった。~
1回転、前進の距離などの誤差をプログラムを実行する前にプログラムの頭で変更できるようにしたかった。~

結局本番では、ボールを持ち上げられず、残念だった。しかしみんなでロボコンという誰もが憧れる夢の舞台に向けて力を合わせて協力できた事は何よりの私達の宝物になる事でしょう。時間をかけ、このロボット達に捧げたこの授業期間は本当に充実した時間となりました。笑いあり、涙ありのこのロボコンに僕たちの青春の一部を捧げられた事はほんとにロボコンの総合3位よりかけがえのないそれ以上の価値となる事でしょう。私達を支えてくださった多くのTAと先生方に心から感謝したいです。そして何より共に青春をこのロボコンに捧げた多くの仲間達に心から『ありがとう』といいたいです。一緒に夢を追いかけられた事を誇りにし今後の人生を胸を張って歩んでいきたいです。『私達の一生の夢の舞台ロボコンよ、僕たち私達に、夢と希望と生きる光と沢山の愛をありがとう!君と共に歩めた事を心から感謝するよ!!ロボコンよ永久に共に!生きるんだロボコン!私達と一緒に!みんな人生を楽しめ!青春を楽しめ!大学を楽しめ!』
*コメントをお願いします [#yf912b33]
- 画像が表示されていないようですよ! -- [[ヒロヤ]] &new{2008-05-22 (木) 02:25:35};
- 画像UPしました。 -- [[KEN]] &new{2008-05-22 (木) 19:21:43};
- ペンの上げ下げなどは、マクロや関数を使うとプログラムが簡単になります。 -- [[松本]] &new{2008-05-29 (木) 15:51:22};

#comment

---------------

戦略、ロボットの写真が未完成で、プログラムがうまく貼れてないようです。   F.I.

①ウインチの説明や。~

RIGHT:[[ロボティクス入門ゼミ]]
RIGHT:[[2008a/A3]]


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