パイルドライバー。そうです、建築現場で杭を打ってるアレです。ペンの上げ下げする姿が似ているのです。…実際のところかっこよさそうだったからつけただけですがね。
ペンの上げ下げの機構は比較的早く一時間ほどでできました。できるだけシンプルにする思想は美的にも強度的に間違っていないと思います。一方でプログラム面ではかなり苦労しました。ペンがロボットの回転の中心からずれているので、プログラムを書く前にズレを計測し、紙にロボットの動きと命令すべき動作を何度も書きました。さらに、キャタピラは動きが不正確という性質のため急遽タイヤ型への修正を迫られました。しかしそれでもサブルーチンを使ったおかげでプログラムの修正作業をいくらか楽にすることができました。ただ、今後はコメントも使用し、さらにプログラムを見やすくする必要があると感じました。
名古屋の『古』と、兵庫を『兵』を書きました。直線ばかりで簡単だとかいう指摘はご遠慮ください。直角に何度も直角に曲げたり、きちっと交わらせたりするのがよりシビアなのです。
#define A 150 #define B 170 #define TURN_TIME 97
sub TURN_RIGHT() { OnFwd(OUT_B); Wait(A); OnFwd(OUT_B); OnFwd(OUT_A+OUT_C); Wait(45); Off(OUT_A+OUT_C); }
sub DROW15() { OnRev(OUT_B); Wait(A); OnRev(OUT_B); OnRev(OUT_A+OUT_C); Wait(100); Off(OUT_A+OUT_C); }
sub DROW9() { OnRev(OUT_B); Wait(A); OnRev(OUT_B); OnRev(OUT_A+OUT_C); Wait(60); Off(OUT_A+OUT_C); }
task main() { "一画目" SetPower(OUT_B,1); OnRev(OUT_B); Wait(A); OnRev(OUT_B); OnFwd(OUT_A+OUT_C); Wait(150); Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(A); OnFwd(OUT_B); OnRev(OUT_A); OnFwd(OUT_C); Wait(TURN_TIME); Off(OUT_A+OUT_C); "二画目" OnRev(OUT_B); Wait(A); OnRev(OUT_B); OnRev(OUT_A+OUT_C); Wait(100); Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(A); OnFwd(OUT_B); OnFwd(OUT_A+OUT_C); Wait(90); OnFwd(OUT_B); OnRev(OUT_A); OnFwd(OUT_C); Wait(99); Off(OUT_A+OUT_C); OnFwd(OUT_B); OnFwd(OUT_A+OUT_C); Wait(20); Off(OUT_A+OUT_C); "三画目" DROW15(); TURN_RIGHT(); "四画目" DROW9(); TURN_RIGHT(); "五画目" DROW15(); TURN_RIGHT(); "六画目" DROW9(); Off(OUT_A+OUT_B+OUT_C); }
(画数は実際の画数でなく、ロボットの書く数です。)
task main() {
"一画目~"
OnRev(OUT_A+OUT_C+OUT_B); Wait(90); OnFwd(OUT_C+OUT_B); Wait(130); OnRev(OUT_C); Wait(90); OnFwd(OUT_A); Wait(60); OnFwd(OUT_C); Wait(50);
”二画目~”
OnRev(OUT_A+OUT_C+OUT_B); Wait(75); OnFwd(OUT_A+OUT_C+OUT_B); Wait(162); OnRev(OUT_A); Wait(108); OnRev(OUT_A+OUT_C); Wait(33);
”三画目~”
OnRev(OUT_B); Wait(130); OnFwd(OUT_A+OUT_B+OUT_C); Wait(90); OnRev(OUT_C); Wait(115); OnRev(OUT_A); Wait(90);
”四画目~”
OnRev(OUT_B); Wait(70); OnFwd(OUT_A+OUT_B+OUT_C); Wait(100); OnRev(OUT_A); Wait(115); OnFwd(OUT_A); Wait(90);
”五画目~”
OnRev(OUT_A+OUT_B+OUT_C); Wait(180); OnFwd(OUT_A+OUT_B+OUT_C); Wait(140); OnRev(OUT_C); Wait(150); OnRev(OUT_A); Wait(140);
”六画目~”
OnRev(OUT_B); Wait(35); OnFwd(OUT_A+OUT_B+OUT_C); Wait(200); OnRev(OUT_A); Wait(70); OnRev(OUT_C); Wait(130);
”七画目~”
OnRev(OUT_B); Wait(20); Float(OUT_A+OUT_C); }
" 時間がなくて適当になってすみません。"
机の上と木に張られた紙では走り方が異なるためベストではありませんでしたが、なんとか合格点を出せるレベルにはなったと思います。
最初は絶対できなさそうだと思っていましたが実際やってみると意外にもできるものなのだと感じました。これからはロボットもプログラムもよけいなものを使わずシンプルで美しいものにしようと思いました。
コメントをどうぞ