[[2008a/A3/課題1右]] #hr CENTER:&size(30){似顔絵を描くロボット}; #hr CENTER:&size(20){製作者:KEN&SYOU}; RIGHT:[[ロボティクス入門ゼミ]] RIGHT:[[2008a/A3]] 目次 #contents *課題 [#xacd96cb] A3の紙に相棒の似顔絵を描くロボットの作成。 *ロボットの紹介 [#wbca6746] **ロボットの写真 [#m43ddde2] ***前・後 [#d91fa154] #ref(2008a/A3/課題1右/f.jpg,50%,前:あくまでもこっちが前です!) #ref(2008a/A3/課題1右/r.jpg,50%,後:あくまでもこっちが後です!) 前と後の写真です。あくまでも上の写真が前です!前後反対に見えるかもしれませんが…~ Aを左側のタイヤに、Cを右側のタイヤに、そして、Bをペン上下のために使用しました。~ 後にはSYOU特製のウインチが...実はコード巻くのに重要な役割を果たしています。~ あと、結構ボタンが押しやすいです。 ***横 [#x259105a] #ref(2008a/A3/課題1右/s.jpg,50%,横) 横の写真です。最初は本体と、制御部分が微妙にズレていて、不安定でしたが、黒長いブロックで、だいぶ補強できました。~ また、大きいタイヤを重い方にもってくることでより安定性が増しました。 ***斜前・斜後 [#r7c47a20] #ref(2008a/A3/課題1右/fs.jpg,50%,斜前) #ref(2008a/A3/課題1右/rs.jpg,50%,斜後) 斜前と斜後の写真です。ここからだとペンが真ん中にあることがよくわかると思います。 ***ペン [#u92d74c7] #ref(2008a/A3/課題1右/P2.jpg,50%,ペン) ペンの写真です。ペンは王道マジックペンを使用しております。これが一番描きやすいですね。~ 仕組みは、写真向かって左のタイヤのみモーターで動きます。タイヤなのでホールド性抜群です。 **改造前のロボットの写真 [#kb370482] ***改善前ペン下げ状態 [#u5603137] #ref(2008a/A3/課題1右/O1.jpg,50%,改善前ペン下げ) これが改造前のロボット、ペンを下げた状態です。ロボット後のプーリーにゴムでペンを取り付けていました。~ また、ペンを固定するため描いている時はずっとモーターを入れっぱなしにして、ペンを右のブロックに押し当てるという乱暴な?システムをとっていました。~ ***改善前ペン上げ状態 [#xb7455c3] #ref(2008a/A3/課題1右/O2.jpg,50%,改善前ペン上げ) これが改造前のロボット、ペンを上げた状態です。ペン上げるための回転数が難しく、下手をするとぶっ飛びました。~ シンプルでなかなか良いシステムだったのですが、どうしてもペンを下げる時に擦ってしまい断念しました。 **ロボット作成において苦労した点・工夫した点 [#l6ea1622] ***苦労した点 [#i509bbc0] やはり、ペンを中心に持ってくる様に改造するのに一番苦労しました。~ 最初はモーターにプーリーをつけ、そこにペンをゴムで固定する方式をとっていましたが、~ 不安定であるのと、ペンを下ろす時に少し地面を擦るので、タイヤで上げ下げするシステムに変更しました。~ これにより、ホールド性が向上し、ペンの上下も楽に行えるようになりました。~ また、ペンをロボットの中心に近づけることで、いろいろな円が描けるようになりました。 ***工夫した点 [#u76fb198] なるべくシンプルで綺麗なロボットになるようにしました。特にSYOU特製のウインチは傑作です。~ あと、なるべく細かく補強しました。 *プログラムの紹介 [#re14cb47] **KENのプログラム [#q3f0549f] //似顔絵を描くプログラム #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() //ペンを下げるためのサブルーチン { SetPower(P,3); OnFwd(P); Wait(20); Off(P); } sub pen_up() //ペンを上げるためのサブルーチン { SetPower(P,3); OnRev(P); Wait(20); Off(P); } sub draw_curve() //カーブを描くためのサブルーチン { SetPower(L,7); SetPower(R,0); OnFwd(T); Wait(135); Off(T); } 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(); //ペン上昇 } **SYOUのプログラム [#p3dfe096] task main() { OnFwd(OUT_B);Wait(5);//(set pen) 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); } **プログラム作成において苦労した点・工夫した点 [#d842cb46] ***苦労した点 [#iaa21521] 関数とかの使いどころが分かりませんでした。~ waitの設定が日々変化するのがつらいところでした。~ せっかく書いたプログラムの横のコメントが文字化けしたのが嫌でした。~ ***工夫した点 [#q2ca8aa8] 転倒するのを防ぐためにoffを多用しました。~ ずれるのを防ぐためにできるだけつなげてかけるようにしました。~ *似顔絵 [#hfc13d53] **似顔絵の写真 [#p1d57d8d] ***KENの描いた似顔絵 [#a4e8d5f3] #ref(2008a/A3/課題1右/KEN.jpg,50%,KENの似顔絵) SYOUに似ているとかいうレベルではありません…~ 口の位置まで移動するのが難しかったです。最後は力技で時間を変えて何回も調整しました。~ 髪の毛の上の部分が描けなかったのが心残りではあります… ***SYOUの描いた似顔絵 [#ac7026b5] #ref(2008a/A3/課題1右/SYOU.jpg,50%,SYOUの似顔絵) 特徴がメガネだけだというのはいかがなものかとは思いました。~ 練習ではうまくいったのに本番では鼻とかがずれたのはいい思い出です。 *レポート作成について [#t5a485b3] 最初は右も左もわからず、写真も貼れなかったんですが、なんとか書き上げることができました。こうやって振り返ってみるのもいいものですね。 *感想・反省など [#w0b80d99] **KEN [#k3900a58] 最初はどうなることかとおもいましたが、結構ハイレベルな絵が描けたと思います。プログラムは別として…~ 時間はかなりかけたつもりです。SYOUも何回も一緒に残ってくれてありがとう! **SYOU [#l338dfb1] プログラムを整理しようと思ったけど関数の意味がわからなかったのはいい思い出です。 *未解決の問題 [#l46e8973] その場で回転して、方向を変える時にペンの位置がずれてしまう。~ 関数などを使いこなせなかった。~ 1回転、前進の距離などの誤差をプログラムを実行する前にプログラムの頭で変更できるようにしたかった。~ *コメントをお願いします [#pd04b238] - 画像が表示されていないようですよ! -- [[ヒロヤ]] &new{2008-05-22 (木) 02:25:35}; - 画像UPしました。 -- [[KEN]] &new{2008-05-22 (木) 19:21:43}; - ペンの上げ下げなどは、マクロや関数を使うとプログラムが簡単になります。 -- [[松本]] &new{2008-05-29 (木) 15:51:22}; #comment --------------- 良かった点~ ①ロボットの機構がきちんと説明されています。~ 改善点~ ①ウインチの説明や。~ RIGHT:[[ロボティクス入門ゼミ]] RIGHT:[[2008a/A3]]