#contents *課題1:お絵かきロボット [#c731371b] A3の紙に相棒の似顔絵を書くロボットを作成せよ。 •ひとりにつき一つ以上のプログラムを作成すること。 •ペン以外はキットに含まれる部品を使うこと。 •キットに付属の高価な輪ゴムは切れやすいので切れないように細心の注意を払うこと。 •改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。 *ロボットの仕組み [#db77bc51] #ref(マシン左.jpg) 男に無駄な装飾は不要、ということでシンプルな構造に。 基本設計に少し手を加えたものです。 #ref(マシン右2.jpg) ペンを上げる際に、必要以上に回転しないようにストッパーを装着。 これがないとペンが余計な線を書いてしまいます。 #ref(装飾品.jpg) ペン装着アタッチメント。 ペンを挟んで固定します。 輪ゴムはそのときのために用いるわけですね。 *似顔絵について [#vfdfc1c1] **村人Aの場合 [#g9cc648f] ***完成予想図 [#s5e51a9e] #ref(完成予想図.jpg) 基本プログラム #define EYE 50//目の長さ #define NOSE 50//鼻の長さ #define MOUSE 85//口の長さ void go_straigth(int t)//直進 { OnFwd(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); } void back(int t)//バック { OnRev(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); } sub turn_left()//左に曲がる { OnRev(OUT_A); OnFwd(OUT_C); Wait(97); Off(OUT_A+OUT_C); } sub turn_right()//右に曲がる { OnFwd(OUT_A); OnRev(OUT_C); Wait(100); Off(OUT_A+OUT_C); } sub arm_down()//アームを下ろす { OnFwd(OUT_B); Wait(13); Off(OUT_B); } sub arm_up()//アームを上げる { OnRev(OUT_B); Wait(13); Off(OUT_B); } お絵描きプログラム task main() { go_straigth(EYE);//目を描く arm_up(); Wait(300); go_straigth(EYE); arm_down(); Wait(300); go_straigth(EYE); arm_up(); Wait(100); back(75); turn_left(); go_straigth(110); arm_down(); Wait(300); go_straigth(NOSE);//鼻を描く arm_up(); Wait(300); go_straigth(45); turn_left(); go_straigth(40); arm_down(); Wait(300); go_straigth(MOUSE);//口を描く back(60); arm_up(); Wait(300); back(80); turn_left(); go_straigth(90); repeat(4)//顔の輪郭 { arm_down(); Wait(300); go_straigth(160); back(95); arm_up(); Wait(300); turn_right(); } arm_down(); Wait(300); go_straigth(50); } さぁ、どうかな? ↓に続く ***村人Aの完成図 [#j495bce0] #ref(完成品.jpg) なかなかいい。だが線がゆがんでいる。 ***工夫した点 [#rbcd59bc] プログラミングは初めてなので、できるだけ単純な直線だけで顔を表現した。 走っていいるとどんどん角度がずれていくので、こまめに角度などの微調整をして思い通りの顔が描けるように頑張った。 途中途中アームの上げ下ろしのときなどに、止まって正確な絵が描けるようにした。 **もぇくぇの場合 [#rc7960a4] #define go_straight OnFwd(OUT_A+OUT_C); #define turn_left OnRev(OUT_A);OnFwd(OUT_C); #define turn_right OnRev(OUT_C);OnFwd(OUT_A); #define go_back OnRev(OUT_A+OUT_C); #define turn_left_back Off(OUT_A);OnRev((OUT_C); #define turn_right_back Off(OUT_C);OnRev(OUT_A); #define pen_up OnFwd(OUT_B);Wait(10);Off(OUT_B); #define pen_down OnRev(OUT_B);Wait(10);Off(OUT_B); task main() { go_straight;/*左輪郭*/ Wait(100); pen_up; go_straight; Wait(15); turn_left; Wait(70); go_back; Wait(50); pen_down; go_straight;/*左アゴ*/ Wait(60); pen_up; go_straight; Wait(27); turn_left; Wait(50); go_back; Wait(40); pen_down; go_straight;/*右アゴ*/ Wait(60); pen_up; go_straight; Wait(20); turn_left; Wait(70); go_back; Wait(40); pen_down; go_straight;/*右輪郭*/ Wait(90); pen_up; go_straight; Wait(20); turn_left; Wait(90); go_back; Wait(70); pen_down; go_straight;/*前髪*/ Wait(185); pen_up; go_straight; Wait(80); turn_right; Wait(150); go_straight; Wait(0); pen_down; go_straight;/*頭*/ Wait(60); pen_up; go_straight; Wait(40); turn_right; Wait(60); go_back; Wait(20); pen_down; go_straight;/*頭頂部*/ Wait(160); pen_up; go_straight; Wait(50); turn_right; Wait(100); go_back; Wait(15); pen_down; go_straight;/*後頭部*/ Wait(140); pen_up; go_straight; Wait(55); turn_right; Wait(100); go_back; Wait(10); pen_down; go_straight;/*後ろ髪*/ Wait(40); pen_up; go_straight; Wait(25); pen_down; go_straight;/*口*/ Wait(30); pen_up; go_straight; Wait(50); turn_right; Wait(100); go_straight; Wait(20); pen_down; go_straight;/*右目*/ Wait(35); pen_up; go_straight; Wait(30); turn_right; Wait(100); go_straight; Wait(80); turn_right; Wait(100); go_back; Wait(40); pen_down; go_straight;/*左目*/ Wait(40); pen_up; Off(OUT_A+OUT_C); } ***もぇくぇの完成図 [#n88ab3ac] #ref(2010a/A3/課題1右/うわらば.jpg,100%,蛍光ペンで書いたので見づらい…) *苦労したこと [#j1c255bd] **村人A [#faa9f3b4] マシンがまっすぐ進まないので、少しずつ直線などがずれていくので、思い通りの絵がなかなかうまくかけなかった。それにかなり頭を悩まされた。 プログラムは難しい。 **もぇくぇ [#wf2d97a9] ペンを上げ下げして新しい直線を描くときに位置の微調整が難航したことと、&br; ある程度プログラムを組んでいくと挙動が安定しない、&br; つまりうまく直線がつながらないことがあることに苦労をさせられました。 *反省 [#ra44d2fa] ***村人A [#k4f69e4c] もうちょっとプログラムを簡略化できたのではないかと、思った。 もうちょっと頭を使って、難しい絵が描けたのではないかとおもった。 ***もぇくぇ [#f90781ad] 結構、直線の位置を調整したにもかかわらず完璧にはつながらなかったこと、&br; 簡略化のため鼻や眉毛など一部の顔のパーツを省略したことが少し心残りです。&br; *コメント [#z927614e] 好きなことを書いてください - 全体的にできているようですが、写真とプログラムの一部がうまく貼れていないようです。wikiを参照して、なおしてみてください -- [[FI]] &new{2010-05-21 (金) 07:34:52}; - 内容を充実させることと、wikiの修正をお願いします -- [[TAKA]] &new{2010-05-21 (金) 11:48:59}; - wikiの修正ができています。まだ内容が簡素だと思います。例えば、プログラムに沿って描いていく順番をまとめる、苦労したことへの取り組みなども詳しくまとめると良いと思います -- [[TAKA]] &new{2010-06-01 (火) 12:27:42}; #comment