書道ロボット
自分の故郷に関係する地名を書くロボットとプログラムを作成する。
シンプルな作り。マニュアル通りの設計のロボットを元にし、ペンを持つアームを取り付けた。
2本の棒状のパーツの間にペンを挟む。はしごをかけ、棒状パーツ間の幅を固定しペンを支えることでペンを固定している。しかし、ペン自体にゴムなどの滑り止めになるものがついていないとペンが滑り落ちてしまうのが欠点である。アームは、断面が十字の棒パーツをモーター部分の十字状の穴にに差し込むことで取り付けている。そのため、モーターからのアームの取り外しは大変楽である。
元(マニュアル通りの設計)からある2つのモーターの間に新しいモーターを入れる形になったため、機体の幅が各レゴパーツと合いにくくなってしまい、機体に多少の歪みが生じた。左右の非対称性も目立つ。
「水戸」という字を書くようプログラミングした。
ペンを持つアームを上げる動作をup、下げる動作をdownと定義した。
#define down OnFwd(OUT_B,30);Wait(150);Off(OUT_B); #define up OnRev(OUT_B,30);Wait(150);Off(OUT_B);
プログラムは、ペンを上げたまま目的の位置まで移動し、ペンを下げて走行することで線を引き、ペンを上げてまた移動する、ということの繰り返しである。
task main() { OnFwd(OUT_AC,30); Wait(800); //水1画目 up; OnFwd(OUT_AC,30); Wait(1000); OnFwd(OUT_A,30); OnRev(OUT_C,30); Wait(1000); OnRev(OUT_AC,30); Wait(550); Off(OUT_AC); //2画目に移動 down; OnFwd(OUT_AC,30); Wait(130); up; //2画目 OnFwd(OUT_A,30); OnRev(OUT_C,30); Wait(500); OnFwd(OUT_AC,30); Wait(1600); OnFwd(OUT_A,30); OnRev(OUT_C,30); Wait(1100); OnRev(OUT_AC,30); Wait(800); //3画目に移動 down; OnFwd(OUT_AC,30); Wait(300); //3画目 up; OnFwd(OUT_AC,30); Wait(2200); OnFwd(OUT_A,30); OnRev(OUT_C,30); Wait(1000); OnRev(OUT_AC,30); Wait(300); OnFwd(OUT_A,30); OnRev(OUT_C,30); Wait(600); OnFwd(OUT_AC,30); Wait(500); //4画目に移動 down; OnFwd(OUT_AC,30); Wait(500); //4画目 up; OnFwd(OUT_AC,30); Wait(400); OnRev(OUT_C,30); OnFwd(OUT_A,30); Wait(300); OnRev(OUT_AC,30); Wait(1100); //5画目に移動 down; OnFwd(OUT_AC,30); Wait(200); //5画目 up; OnFwd(OUT_AC,30); Wait(600); OnFwd(OUT_C,30); OnRev(OUT_A,30); Wait(950); OnRev(OUT_AC,30); Wait(1000); //6画目に移動 down; OnFwd(OUT_AC,30); Wait(600); //6画目
up; OnFwd(OUT_C,30); OnRev(OUT_A,30); Wait(1200); OnFwd(OUT_AC,30); Wait(500); OnFwd(OUT_A,30); OnRev(OUT_C,30); Wait(900); OnRev(OUT_AC,30); Wait(500); //戸へ移動
down; OnFwd(OUT_AC,30); Wait(600); //戸1画目 up; OnFwd(OUT_AC,30); Wait(800); OnFwd(OUT_A,30); OnRev(OUT_C,30); Wait(1200); OnRev(OUT_AC,30); Wait(150); Off(OUT_AC); //2画目に移動 down; OnFwd(OUT_AC,30); Wait(700); //2画目 up; OnFwd(OUT_AC,30); Wait(100); OnFwd(OUT_C,30); OnRev(OUT_A,30); Wait(1000); OnRev(OUT_AC,30); Wait(1100); //3画目に移動 down; OnFwd(OUT_AC,30); Wait(500); //3画目 up; OnFwd(OUT_AC,30); Wait(1200); OnFwd(OUT_A,30); OnRev(OUT_C,30); Wait(1200); OnRev(OUT_AC,30); Wait(600); //4画目に移動 down; OnFwd(OUT_AC,30); Wait(250); //4画目 up; OnFwd(OUT_AC,30); Wait(700); OnFwd(OUT_A,30); OnRev(OUT_C,30); Wait(850); OnRev(OUT_AC,30); Wait(400); //5画目に移動 down; OnFwd(OUT_AC,30); Wait(400); //5画目 Off(OUT_AC); }
整理ができていない長ったらしいプログラムで終わってしまった。
以下の反省にもあるとおり、まっすぐ走行できないため、用紙に対し、字が斜めになってしまった。
また、「水」の一画目の書き始めは手動でアームを下げてペン先を紙につけるため、一画目の上の部分にぐちゃぐちゃとした線ができてしまう。さらに、手動でペン先を紙につける際、アームを下げる角度が足りないことによって一画目の筆圧が小さくなり字が薄くなってしまったり、逆にアームの下げすぎでペン先が床に引っかかり機体が前に進まなかったりすることがあった。
ロボットの機体の歪み、左右非対称性からか、ロボットがまっすぐ走行しなかった。また、同じプログラムなのに毎回同じ動きをするということができなかった。
タイヤを回し、ロボット本体を走行させることで字を書く設計であったため、
などの問題があった。