目次
今年の大学生活を表す漢字として、松本の多くの自然の中で伸び伸びと勉強やサークルに取り組めているということで、私は「伸」という漢字を選んだ。
まず、プログラミングを考えることに多少時間がかかったとしても機体をシンプルにしたほうが動きをイメージしやすいと考えた。よって、授業の最初に作成した機体の上にアームパーツを取り付けるというシンプルなつくりにした。
上下に動くアームにペンをゴムで固定してペンの上げ下ろしを行った。下の車の本体と着脱可能。
頻繁に使う時間を定義した。
#define TURN_TIME 41 #define TENKAI_TIME 70 #define MOVE_TIME 20
ペンを上げる動作である。
sub pen_up() { OnFwd(OUT_B); Wait(20); Off(OUT_B); }
ペンを下げる動作である。(アームがペンの重さにより自然と下がってきてしまうため、ペンを上げる動作よりも時間を少し短くしている。)
sub pen_down() { OnRev(OUT_B); Wait(17); Off(OUT_B); }
90度左に機体の向きを変える動作である。
sub turn_left90() { OnRev(OUT_AC); Wait(TENKAI_TIME); OnFwd(OUT_C); OnRev(OUT_A); Wait(TURN_TIME*2); OnFwd(OUT_AC); Wait(TENKAI_TIME); Off(OUT_AC); }
90度右に機体の向きを変える動作である。
sub turn_right90() { OnRev(OUT_AC); Wait(TENKAI_TIME); OnRev(OUT_C); OnFwd(OUT_A); Wait(TURN_TIME*2); OnFwd(OUT_AC); Wait(TENKAI_TIME); Off(OUT_AC); }
45度左に機体の向きを変える動作である。
sub turn_left45() { OnRev(OUT_AC); Wait(TENKAI_TIME); OnFwd(OUT_C); OnRev(OUT_A); Wait(TURN_TIME); OnFwd(OUT_AC); Wait(TENKAI_TIME); Off(OUT_AC); }
前進の動作である。
void move_front(int s) { OnFwd(OUT_AC); Wait(s); Off(OUT_AC); }
後退の動作である。
void move_back(int u) { OnRev(OUT_AC); Wait(u); Off(OUT_AC); }
1つの線を書く動作である。
void write(int t) { pen_down(); OnFwd(OUT_AC); Wait(t); Off(OUT_AC); pen_up(); }
上記のサブルーチンとマクロを用いて「伸」を書く。
task main() { write(60); //人偏の一画目を書く move_back(31); turn_left45(); write(MOVE_TIME*3); //人偏の二画目を書く move_back(MOVE_TIME*3); turn_left90(); move_front(MOVE_TIME); turn_right90(); repeat(4) { write(MOVE_TIME*2); turn_left90(); } //「伸」の正方形のところをまとめて書く move_front(MOVE_TIME); turn_left90(); write(MOVE_TIME*2); //「伸」の本来の五画目 turn_left90(); move_front(MOVE_TIME*2); turn_left90(); move_front(MOVE_TIME); turn_left90(); write(MOVE_TIME*4); //「伸」の七画目 Off(OUT_ABC); }
はじめは、今回作ったようなシンプルな機体の構造なら動きも複雑にならないだろうと考えたが、ペンが機体の後部に取り付けられているため、機体が回転するたびペンの位置がずれてしまうことが分かった。そのため、機体が向きを変えるたびにペンの位置を修正する必要が出てきて、無駄な動きが増えてしまった。また、紙と机の境目のことを考えておらず、機体が回転するときに紙の端を巻き込んでしまい本来考えていた軌道からずれてしまうことも多かった。ほかにも、バッテリーの電圧が減ってくると機体の回転する速度が変化したり、ペンが紙に引っかかってしまうなどの問題も発生した。
実際に本番では紙を巻き込んでしまい失敗した。本番の前に何度か文字を書くことに成功していたが、それでも成功率は低く、一定の成果は出なかった。
このように今回私が制作したロボットには様々な問題がおこったが、それらをどのように解決してくかを考え、改善に繋げていくということを学習できたと思われる。