目次
私は自分の名前の文字のうちの1つである「吾」をロボットに書かせることにした。 正しい書き順には則らずに、まず横線を上から順番に5本引いていき、その後、縦線を右側の方から途中、ペンの上げ下げの動作を挟みながら、2本引いていくという書き順にした。
このロボットは2輪駆動の3輪自動車と似たような形状をした移動装置の上にモーターを1つ固定し、そのモーターの回転によってペンが紙から離れたり、接触したりするものである。
上からみた図
線を引きながら前進する
#define go_forward_write(t) OnFwd(OUT_B);Wait(10);Off(OUT_B);Off(OUT_AC);Wait(100);OnFwd(OUT_AC);Wait(t);Off(OUT_AC);Wait(100);OnRev(OUT_B);Wait(10);Off(OUT_B);
線を引かずに前進する
#define go_forward(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);Wait(100);
右向きに半回転
#define turn_right OnFwd(OUT_A);Wait(40);Off(OUT_A);Wait(100);OnFwd(OUT_A);OnRev(OUT_C);Wait(25);Off(OUT_AC);Wait(100);
左向きに半回転
#define turn_left OnFwd(OUT_C);Wait(100);Off(OUT_C);Wait(100);Wait(100);
左を向く
#define turn_left_back OnFwd(OUT_C);OnRev(OUT_A);Wait(20);Off(OUT_AC);Wait(100);
task main() { int move_time_large = 30; int move_time_small = 13; int move_time_medium = 17;
横線上から1番目
go_forward_write(move_time_large); //1 turn_right; go_forward(move_time_small); move_time_small *= 2;
横線上から2番目
go_forward_write(move_time_small); //2 turn_left;
横線上から3番目
go_forward_write(move_time_large); //3 turn_right; move_time_small /= 2; go_forward(move_time_small);
横線上から4番目
go_forward_write(move_time_small); //4 go_forward(move_time_small); turn_left; go_forward(move_time_small);
横線上から5番目
go_forward_write(move_time_small); //5 turn_left_back;
縦線右下
go_forward_write(move_time_medium); //6 go_forward(move_time_medium);
縦線右上
go_forward_write(move_time_medium); //7 go_forward(move_time_medium); turn_left; move_time_medium *= 2;
縦線左上
go_forward_write(move_time_medium); //8 move_time_medium /= 2; go_forward(move_time_medium);
縦線左下
go_forward_write(move_time_medium); //9 Off(OUT_AC); }
ロボット本体を組み立てる際に、ロボットアームを作成し、それを取り付けてもみた。しかし、ロボットを走行させるのにモーターを2つ使用し、ロボットの移動の軌跡を文字のように見せる方法を採用した私たちのグループでは、わざわざロボットアームを取り付ける必要がないと判断した。この判断の結果、線の太さが毎回微妙に異なる程度の問題しか発生せず、文字として認識することにそれほど大きな影響を与えるものではなかったため、あながち間違いではなかったといえる。ただ、ロボットの走行に関して左右のモーターのパワーに違いがあったため、ロボットがまっすぐに直進することがとても困難であることがプログラミングの最中に判明した。しかし、私たちのグループでは他のアイディアは生まれなかったため、結局、この方法で何とか文字を書かせることにした。 それに対し、他のグループでは、モーターを1つだけロボットの移動に使用し、残りの2つをロボットアームのペンの上げ下げとアーム自体をロボットの上でスライドさせ、移動させるという方法をとっていた。ロボットアーム自体をスライドさせるという発想は、私たちのグループでは全く思いつかなかったものだった。このことから、自分たちの考えに縛られすぎないように、他のグループの方々とも意見を交換すべきだったと反省している。
今回の課題を取り組んでいる中で、私はロボット本体がプログラムよりもよっぽど重要であることを思い知らされた。私たちのグループではロボットがまっすぐに直進しないというロボット本体の欠点をプログラムで補おうと努力したのだが、その思惑はうまくいったとは言いにくい結果となってしまったように思う。しかし、それはいかに優れたプログラムをつくることができたとしてもロボット本体が欠点の多いものであっては、ほとんどその真価を発揮することができないということを私に気付かせてくれたともいえる。今回の課題で得た教訓をもとに、次の課題ではロボット本体の組み立てに力を注いでいこうと思う。