○A3の紙に相棒の似顔絵を描くロボットを作成せよ!○
シンプルなマシンなのでエアロパーツや諸所の箇所に色付きロゴでアクセントを加えました。
強度を上げるためロゴを互いに噛み合わせるように組んでいます。
ペンの上げ下げは図のモーターに直接取り付けたギアの回転で行います。
◯ロボットにペンを持たせる方法
ロボットにアームを付けて、そのアームにペンを付けようかとも考えましたが、ペン先がずれやすく、プログラムだけでは修正が困難になると思われたのでロボット全体の中心を垂直にペンが通るように固定することにしました。
重心である電源や電池のある部位となるべく近くすることでペン先のずれを起こしにくい工夫ができました。
顔の輪郭から始めるのでまずはペン先を地面につけた状態からスタート。
#define pen_up OnFwd(OUT_B);Wait(7);Off(OUT_B); //ペンの上昇 #define pen_down OnRev(OUT_B);Wait(18);Off(OUT_B); //ペンの下降 #define turn_right pen_up;OnRev(OUT_A+OUT_C);Wait(8);OnFwd(OUT_A);OnRev(OUT_C);Wait(90);OnFwd(OUT_A+OUT_C); Wait(10); //右に90度曲旋回 #define turn_left pen_up;OnRev(OUT_A+OUT_C);Wait(8);OnFwd(OUT_C);OnRev(OUT_A);Wait(100);OnFwd(OUT_A+OUT_C);Wait(10); //左に90度旋回
始めにマクロで基本動作の記述を行っています。
task main() { pen_down; // 輪郭を描きます OnFwd(OUT_A); Wait(805); Off(OUT_A); turn_right; repeat(2) { //目を描きます OnFwd(OUT_A+OUT_C); Wait(18); pen_down; Wait(10); pen_up; } turn_left; //移動を行う OnFwd(OUT_A+OUT_C); Wait(42); turn_left; OnFwd(OUT_A+OUT_C); Wait(25); pen_down; //口を描きます OnFwd(OUT_A+OUT_C); Wait(35); pen_up; OnRev(OUT_A+OUT_C); Wait(17); turn_left; OnFwd(OUT_A+OUT_C); //鼻を描きます Wait(7); pen_down; Wait(7); pen_UP; Wait(40); //絵の外側へ Off(OUT_A+OUT_C); }
・プログラムの最初の段階でペンの上げ下げや方向転換の基本動作をマクロに組み込むことでプログラムの簡素化と作業の簡略化を行いました。
・下図のように直角の方向転換時には重心のズレがでました。
そこで縦方向と横方向のズレに分解することで前後移動で誤差修正を行うプログラムを加えました。さらに方向転換時のマクロに組み込むことでプログラムの簡略化が出来ました。
X:横方向のズレ Y:縦方向のズレ
左が描かれた顔です。描画手順は右側で矢印に沿った順序になっています。
しらけた顔つきになってしまいました。
このようなロボットを作ることやプログラムを組むことは初めてだったので何から何まで手探りでとても大変でした。
うまくいかないことの方が多かったですが顔が描き上げられた瞬間は達成感がありました。
しかし笑い顔にした方が愛嬌がでそうですね。
他の班にはないよい工夫だと思います。ロボットの説明がもう少しあれば良かったです。 FI