課題は、チームメイトの似顔絵を描くことです。
めいめいが、自分もしくは隣の人などの顔に似た絵を、ロボットを使い描きました。
モーターは3つあり、二輪を2つのモーターで動かし、もう一つはペンを動かします。
ペンを動かす機構は固定されており、モーターを動かすことで上下に動かせます。
ぺんの固定部位はこんな感じです。3つのタイヤを噛ませて、ずれないようにしています。
顔を描くやり方は何通りもあるのでしょうが、ロボットを使って描くので、毎回必ず出てくる誤差も無視できる程度に単純化した似顔絵を目指しました。
顔の輪郭は、およそ丸と四角があります。
プログラムを単純にできること。
(丸はどんな丸もすべて相似だし、多少歪んでも半径が大きければ円に見える。)
ロボットの体調未満の直径の丸は物理的に描けないので、紙に収まるようにするのが難しいこと。
より顔に見えること。
プログラムが複雑になること。
結局自分は丸顔にしました。周りは四角が多かったのですが、いつも歪んだ顔になっていたので、より確実な丸が適当だと思いました。
定義はこんな感じです。
#define Go_Forward(t);OnFwd(OUT_AC); Wait(t); Off(OUT_AC); #define Go_Back(t) OnRev(OUT_AC); Wait(t); Off(OUT_AC); #define Turn_Right(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_AC); #define Turn_Left(t) OnFwd(OUT_C); OnRev(OUT_A); Wait(t); Off(OUT_AC); #define Pen_Up OnRev(OUT_B); Wait(15); Off(OUT_B); #define Pen_Down OnFwd(OUT_B); Wait(20); Off(OUT_B);本文
task main () { Turn_Right(550); //輪郭を描く。 Pen_Up; Go_Back(20); Pen_Down; Go_Back(40); //右目を描く。 Pen_Up; Go_Back(20); Pen_Down; Go_Back(40); //左目を描く。 Pen_Up; Turn_Left(50); Go_Forward(2); Pen_Down; Go_Forward(40); //口を描く。 Pen_Up; Turn_Right(20); Pen_Down; Turn_Right(20); //鼻を描く。 Pen_Up; Turn_Right(120); Go_Forward(130); Turn_Left(120); Pen_Down; Turn_Left(110); //髪を描く。 Off(OUT_AC); }
電池の残りのボルト数により、また描く時使う紙により、毎回似顔絵が変化してしまうので、冷や冷やすることも多かったのですが、ある意味面白かったです。
他の班のロボットを見るのも面白かったです。課題は顔を描くという以外指定がなかったので、みんないろいろなことを思いつきやっていたようです。
同じ目的のためにロボットやプログラムを作ったのに、みんな全然違うものを作っていたのでびっくりしました。