2009a課題1、似顔絵ロボット
ペンを持てるロボットを作り、パートナーの似顔絵を作成するプログラミングを完成させよ! By Boss松本
本体は、キットの説明書に書いてある基本的なロボットの本体をつくり、そこから足とペン持ちの部分を組み上げていきました。
初めは左の写真のように組み上げていましたがペンがすぐズレたり、本体がとても壊れやすいものでした。
そこからたくさんの改良を繰り返して右の写真のように生まれ変わりました。
しかし、この形はプログラムを送信する際パーツが結構邪魔になっていました。(;_;)
苦労して作ったペン持ちの部分だったので、プログラムを送信する際の手間は目をつぶることとしました。
すごく‥‥‥前気味です。(重心的な意味で)
これもキットの説明書に書いてある基本ロボットのキャタピラータイプを作成し、本体と合体させました。
見た目は戦車っぽくていかにもロボット!しかし、似顔絵を描くにはあまりよろしくないことが判明。
(小回りがきかない!and紙面がキャタピラの跡だらけ!)
なので四輪駆動に変更!かなりスマートな感じに。
タイヤにすることで紙面上での動きがかなりスムーズになりました。
このパーツが一番苦労した部分の一つです。
本体、足の部分は説明書に従って制作していけば必ずちゃんとしたロボットになりました。
しかし、ペンを持つ部分はヒントとして先輩方の写真があったものの、パーツの組み立ては自分たちのオリジナル。
説明書なしで制作することが苦手な僕にはかなりの課題となりました。
ギアを使ってペンを上下させるというのは初めから考えていましたが、
それをどのように本体につけるか、ペンをどのように固定するか、
特にペンの固定は最後まで苦労させられました。
調整を繰り返し、しっかりと固定することに成功しました。
あと、ゴムを使用しギアがきちんと噛み合うようにすることでペンの上げ下げをスムーズにすることができました。
sub turn_left(){OnRev(OUT_C);Wait(100);Off(OUT_C);} //左回転 sub turn_right(){OnFwd(OUT_C);Wait(100);Off(OUT_C);} //右回転 sub zensin(){OnRev(OUT_A+OUT_C);Wait(50);Off(OUT_A+OUT_C);} //後ろに直進 sub around(){OnFwd(OUT_A);OnRev(OUT_C);Wait(600);Off(OUT_A+OUT_C);} //円を描く sub pen_up(){OnFwd(OUT_B);Wait(30);Off(OUT_B);} //ペンを持ち上げる sub pen_down(){OnRev(OUT_B);Wait(30);Off(OUT_B);} //ペンを下げる
task main()
{pen_down(); around(); //輪郭を描く zensin(); //右目を描く pen_up(); OnRev(OUT_A+OUT_C); Wait(30); Off(OUT_A+OUT_C); pen_down(); zensin(); //左目を描く pen_up(); turn_left(); OnFwd(OUT_A+OUT_C); Wait(100); Off(OUT_A+OUT_C); turn_right(); pen_down(); zensin(); //口を描く }
#define TURN_TIME 112 #define turn_left OnRev(OUT_A);OnFwd(OUT_C);Wait(TURN_TIME);Off(OUT_A+OUT_C); //90°左回転 #define turn_right OnRev(OUT_C);OnFwd(OUT_A);Wait(TURN__TIME);Off(OUT_A+OUT_C); //90°右回転 #define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //前進 #define pen_up OnFwd(OUT_B);Wait(20);Of(OUT_B); //ペンを上げる #define pen_down OnRev(OUT_B);Wait(20);Off(OUT_B); //ペンを下げる #define back(t) OnRev(OUT_A+OUT_C);wait(t);(OUT_A+OUT_C); //後退 #define line OnFwd(OUT_C);OnRev(OUT_A);Wait(30);Off(OUT_A+OUT_C); OnFwd(OUT_A);OnRev(OUT_C);Wait(30);Off(OUT_A+OUT_C); //短いラインを描く
sub glass_write //眼鏡を描く {go_straight(50); line; go_straight(50); line; go_straight(10); line; go_straight(50); line; go_straight(50); }
task main() {glass_write(); //眼鏡を描く pen_up; //ペンを上げる back(25); //後退 turn_left; //90°左回転 pen_down; //ペンを下げる back(20); //鼻を描く pen_up; //ペンを上げる go_straight(40); //前進 pen_down; //ペンを下げる line; //口を描く pen_up; //ペンを上げる go_straight(80); //前進 turn_left //90°左回転 pen_down; ペンを下げる OnFwd(OUT_C); Wait(1000); //輪郭を描く Off(OUT_C); }
蛍光ペンで書いてしまったため、写真では見にくくなってしまいました。横の写真が蛍光ペンで書かれたラインをわかりやすくなぞったものです。
パートナーには失礼だが、無口なところを口を直線で書くことで表現しました。いかがでしょうか?
眼鏡をどのように描くか、それが自分の中の課題でした。
色々考えた結果、今のプログラムができました。
眼鏡を描く部分は自分でも満足しています。
本体を少し回転させることで直線に近い線を描けるlineのプログラムはかなり便利でした。
TURN_TIMEや前進や後退のtは何度も繰り返して、今の数値をいれました。
ただ、少しかすれてしまったのが残念です。
プログラムを作るのは生れてはじめてだったため、授業時間内に完成させることができずとても焦りました。
しかし、パートナーが専らロボットの改造に取り組んでくれたおかげでプログラミングに集中して取り組め、
時間外ではあったものの、何とか似顔絵を描くところまでいくことができました。
(弁明すると僕はホームページをがんばりました。WW)
パートナーには感謝しています。
ペンをどのようにして上下に動かすか、これは本当に悩みました。
ペンを持たせるイメージは頭の中にあったが、なかなかそれを形にすることができず、かなり時間がかかりました。
試行錯誤の結果、なんとか線を描くこととペンを上下させるぐらいのレベルに至りました。
似顔絵は眼鏡を描くのが苦労しましたが、プログラムは結構簡潔にできました。
思っていたよりもロボットがスムーズに動いたため少し感動しました。
ホームページ制作はパートナーが懸命にやってくれていたため、とても助かりました。
パートナーに感謝です。m(_ _)m
このホームページに関するご意見や、感想などお待ちしております(SYO&Y.Y)