[[2016a/Member]] #contents *はじめに [#m57fac64] 今回の課題は、ロボットを使って自分の似顔絵を描くことです。 条件はA4の紙に収めることだ。 *ロボットの説明 [#b4f93ef5] これがロボットの全体像だ。 #ref(2016a/Member/ta/Mission1/image1.JPG,120%,ロボット本体) ロボットにペンを持たせるために2つのタイヤでペンを挟んだ。 また、ペンを上下させるために一方のタイヤはモーターと結合し、もう一方のタイヤは空回りさせた。 #ref(2016a/Member/ta/Mission1/image1.PNG,120%,ペンの持ち手) ただ、タイヤ2つでペンを挟むだけではペンが安定せずうまく描けなかった。 そこで、タイヤの下にペンのガイドをつけるとペンの安定性が増し、描きやすくなった。 #ref(2016a/Member/ta/Mission1/image2.PNG,120%,ペンのガイド) *プログラムの説明 [#xc99700c] これが似顔絵を描くプログラムだ。 #define Go_f(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC) #define Back(t) OnRev(OUT_AC); Wait(t); Off(OUT_AC) #define Pen_up OnFwd(OUT_B); Wait(15); Off(OUT_B) #define Pen_down OnRev(OUT_B);Wait(15); Off(OUT_B) #define Turn_L OnFwd(OUT_C); OnRev(OUT_A); Wait(82); Off(OUT_AC) #define Turn_R OnFwd(OUT_A); OnRev(OUT_C); Wait(82); Off(OUT_AC) task main() { Go_f(90); Pen_up; Back(65); Turn_L; Go_f(75); Pen_down; Go_f(90); Pen_up; Back(65); Turn_L; Go_f(75); Pen_down; Go_f(90); Pen_up; Back(65); Turn_L; Go_f(75); Pen_down; Go_f(90); Pen_up; Back(65); Turn_L; Go_f(30); //輪郭 Turn_R; Go_f(75); Pen_down; Go_f(20); Pen_up; Back(65); Turn_L; Go_f(75); Pen_down; Go_f(80); Pen_up; Back(65); Turn_L; Go_f(75); Pen_down; Go_f(130); Pen_up; Back(65); Turn_L; Go_f(75); Pen_down; Go_f(80); Pen_up; Back(65); Turn_L; Go_f(75); Pen_down; Go_f(20); Pen_up; Back(65); Turn_L; Go_f(35); //髪の毛 Turn_R; Go_f(80); Pen_down; Go_f(20); Pen_up; //右目 Go_f(30); Pen_down; Go_f(20); Pen_up; //左目 Back(100); Turn_R; Go_f(75); Pen_down; Go_f(20); Pen_up; //鼻 Go_f(10); Back(65); Turn_R; Go_f(80); Pen_down; Back(30); Pen_up; //口 Go_f(100); //完成!!! } *完成した似顔絵 [#f4a61dfe] #ref(2016a/Member/ta/Mission1/image1(1).JPG,40%,似顔絵) *感想 [#g321375b] プログラミングを書いて実際に動かしてみるまで一番難しいのはペンを上下させることだと思っていた。しかし、実際に動かしてみるとターン後のペンの位置のズレを修正することが一番難しかった。ロボットがターンする時、回転軸がペンではないということを考えていなかったのでうまく行かなかった。その問題は、ターン前にバックさせターン後に前進することによって改善できた。 似ているかどうかは別として、顔とわかるものが描けてよかった。