*課題について [#j1c2605d] 今回の課題は筆記ロボットの作成である。大学生活を表す漢字(詳しくは[[2017a/Mission1]]参照)ということで、いきなりこのような難しい課題に直面したことから「困」という字にした。 **目標 [#qa82aa26] 課題に臨むにあたって「真っ直ぐな線が描きやすい」ロボットにするということを目標とした。 *ロボット [#l4163c7b] **本体 [#ue353eb5] 四輪駆動のロボットにペンを上げ下げするマシンをつけ文字を描くことにした。プログラムは複雑になってしまうが、このようにすることで線を真っ直ぐに描くことができると考えたからだ。ロボは次のようになっており走行部分は左右のタイヤにそれぞれモーターをつけ移動や回転ができるようになっている。&br;&ref(2017a/Member/kyo/Mission1/003_640.png,70%); **ペン部分[#zcaedbf2] &ref(2017a/Member/kyo/Mission1/004_640.png,70%);&br;この形状によりペンを垂直に紙面に当てることができ、機体の性能上回数を重ねるごとに動きが変わってしますという欠点を補うことができた。ペンを固定するブロックと台座となるブロックの接合が一番の難題となったが、湾曲する部品による左右からの固定のおかげで最終的にはぐらつきもなくなくなった。しかし、どうしても大きなものとなり後部の重りが必須となってしまったので軽量化が次回の課題となった。&br;ちなみに完成した漢字が次の写真となる。&br;&ref(2017a/Member/kyo/Mission1/005_640.JPG,70%);&br;寸法がおかしかったので修正が必要だが、字としては誰もが認識できるようなものになったのではないだろうか。 **プログラム [#r5ff887f] 今回プログラムの内部を大まかに三つに分けた。 &br;1つ目は枠組みとなる「口」の部分。&br; ロボットが四角形の枠をなぞるだけのプログラムなら簡単なのだけどペン先の位置修正が加わり割と大変だった。最初repeatを用いることで四辺を簡単に描けるようにしたが正確に曲がってくれなかったため一部(最後の一辺)をマクロから取り出し半ば強引に修正した。 #define UP_PEN OnFwd(OUT_B); Wait(30); Off(OUT_B);//ペンを持ち上げるプログラム #define SET_PEN OnRev(OUT_B); Wait(15); Off(OUT_B);//ペンを紙面にセットするためのプログラム #define right_angle_1 OnFwd(OUT_A); Wait(240); Off(OUT_A); OnRev(OUT_AC); Wait(155); Off(OUT_AC);//直角に曲がるためのプログラム #define right_angle_2 OnFwd(OUT_A); Wait(230); Off(OUT_A); OnRev(OUT_AC); Wait(155); Off(OUT_AC);//角度を調整するためのプログラム sub parts_1() { SET_PEN;//四角形の部分 OnFwd(OUT_AC); Wait(125); Off(OUT_AC); UP_PEN; OnFwd(OUT_AC); Wait(25); Off(OUT_AC); right_angle_1; } task main() { repeat(2){ parts_1(); } SET_PEN; OnFwd(OUT_AC); Wait(110); Off(OUT_AC); UP_PEN; OnFwd(OUT_AC); Wait(40); Off(OUT_AC); right_angle_2; SET_PEN; OnFwd(OUT_AC); Wait(130); Off(OUT_AC); UP_PEN; OnFwd(OUT_AC); Wait(10); Off(OUT_AC); &br;2つ目は「十」の部分。 &br;形を作るのに困ったところはなかったが1つ目や3つ目のパーツとの位置関係が重要となるので位置の調整に多くの時間をかけた。 OnRev(OUT_AC);//十字の部分 Wait(10); Off(OUT_AC); OnFwd(OUT_A); Wait(250); Off(OUT_A); OnRev(OUT_AC); Wait(150); Off(OUT_AC); SET_PEN; OnFwd(OUT_AC); Wait(90); Off(OUT_AC); UP_PEN; OnRev(OUT_AC); Wait(20); Off(OUT_AC); OnFwd(OUT_A); Wait(220); Off(OUT_A); OnRev(OUT_AC); Wait(160); Off(OUT_AC); SET_PEN; OnFwd(OUT_AC); Wait(110); Off(OUT_AC); UP_PEN; &br;3つ目は払いの部分だ。 &br;初めは曲線にしようかと思い試行錯誤するがロボット的に理想の物は描けないと断念。やむを得ず直線となってしまった。綺麗な曲線を描くにはギアのかみ合わせなど部品についてもっと研究する必要があるのではないだろうか。 OnFwd(OUT_AC);//払い Wait(40); Off(OUT_AC); OnRev(OUT_C); Wait(100); Off(OUT_C); OnRev(OUT_AC); Wait(70); Off(OUT_AC); SET_PEN; OnFwd(OUT_AC); Wait(70); Off(OUT_AC); UP_PEN; OnRev(OUT_AC); Wait(20); Off(OUT_AC); OnFwd(OUT_C); Wait(140); Off(OUT_C); OnRev(OUT_AC); Wait(145); Off(OUT_AC); SET_PEN; OnFwd(OUT_AC); Wait(70); Off(OUT_AC); UP_PEN; } *まとめ [#j7715f0e] **感想 [#g68a2af6] 今回文字を描くロボットを製作するにあたって、一番大変だったのはやはりプログラムだった。ロボットが文字の線上を走行するプログラムとペンが綺麗に文字を描くプログラムでは量に二倍以上の差が出たので作業時間や動作テストの回数がロボットを動かすだけのときより格段に多かった。しかし自分のプログラムが正確になっていくことを実感できて本当に楽しかった。&br;造り上げた作品については目標となっていた真っ直ぐな文字を書くということは達成できたと思う。しかしロボット自体にプログラミングを楽にするというような工夫が足りない気もしたので少し残念。 **今後に向けて [#a3dd3544] 改良の余地は非常に多くあり、ここで分解してしまうのは残念であるが自分たちの経験や他の人の作品などからパーツの組み方やプログラムの工夫など多くのことを学ぶことができた。特に滑らかな曲線を描くことのできるロボットは非常に参考となった。これらを踏まえて次の課題では自分が納得できるような作品を創りだせるようになりたい。