目次 #contents *課題について [#c3a9ed2f] 詳しくは課題([[2017a/Mission1]])を参照。 松本での大学生活を表す一文字ということで、これからの大学生活でいろいろなことを貪欲に求めていきたいと思い、「求」という字を選んだ。 *ロボット本体 [#p69d1362] **車体部分 [#le1335c6] 青丸で示したペン部分が赤矢印のような上下運動の際に、ペンがロボット本体とぶつからないように縦長の構造にした。コントローラー本体が後方のキャスターの上になると動きが悪くなるので、横向きに取り付けできるだけ前方に取り付けた。ペン部分はロボット本体の中心に取り付けてあるモーターで動かす。 &ref(2017a/Member/Kyou/Mission1/全体写真.jpg,75%); &ref(2017a/Member/Kyou/Mission1/全体の感じ.jpg,87%); **ペン部分 [#le269b89] ペンが紙に触れる際に、タイヤとタイヤの中心(下の写真にはタイヤの中心と示す)で紙に触れるように設計した。その理由は左タイヤと右タイヤを同時にそれぞれ反対方向に回転させれば、車体の回転の際、紙から見たペンの位置のずれが軽減されるからである。 #ref(2017a/Member/Kyou/Mission1/ペン部分.jpg,75%) #ref(2017a/Member/Kyou/Mission1/タイヤの回転図.jpg,75%) *文字について [#v8cdc4af] 今回はプログラミングを簡単にするため以下の写真に示す書き順にした。 なお、この字は私が手書きしたものでありロボットが書いた字ではない。 #ref(2017a/Member/Kyou/Mission1/書き順.jpg,50%) *プログラム [#vc242f80] 改良や調整をしやすくするため、1画目から7画目までをサブルーチンでプログラムした。 ペンを上げたり下ろしたりするような単純な作業もサブルーチンでプログラムした。 ただし、前進や回転などはモーターを回す時間が微妙に異なるためサブルーチンでプログラムすることはできなかった。 sub penup () //ペンを上げる { OnRev(OUT_A,20); Wait(400); Off(OUT_A); } sub pendown () //ペンを下ろす { OnFwd(OUT_A,20); Wait(400); Off(OUT_A); } sub ikkakume () //1画目 { OnFwd(OUT_BC,30); Wait(200); Off(OUT_BC); penup(); OnFwd(OUT_B,20); OnRev(OUT_C,20); Wait(3000); Off(OUT_B); Off(OUT_C); pendown(); } sub nikakume () //2画目 { OnFwd(OUT_BC,30); Wait(1000); Off(OUT_BC); penup(); OnFwd(OUT_C,20); OnRev(OUT_B,20); Wait(3250); Off(OUT_C); Off(OUT_B); OnFwd(OUT_BC,30); Wait(200); Off(OUT_BC); OnFwd(OUT_BC,30); Wait(400); Off(OUT_BC); pendown(); } sub sankakume () //3画目 { OnFwd(OUT_BC,30); Wait(200); Off(OUT_BC); penup(); OnFwd(OUT_BC,30); Wait(200); Off(OUT_BC); OnFwd(OUT_C,20); OnRev(OUT_B,20); Wait(3000); Off(OUT_C); Off(OUT_B); pendown(); } sub yonkakume () //4画目 { OnFwd(OUT_BC,30); Wait(1000); Off(OUT_BC); penup(); OnFwd(OUT_C,20); OnRev(OUT_B,20); Wait(3250); Off(OUT_C); Off(OUT_B); OnFwd(OUT_BC,30); Wait(300); Off(OUT_BC); pendown(); } sub gokakume () //5画目 { OnFwd(OUT_BC,30); Wait(200); Off(OUT_BC); penup(); OnFwd(OUT_BC,30); Wait(500); Off(OUT_BC); pendown(); } sub rokkakume () //6画目 { OnFwd(OUT_BC,30); Wait(200); Off(OUT_BC); penup(); OnFwd(OUT_C,20); OnRev(OUT_B,20); Wait(3500); Off(OUT_C); Off(OUT_B); OnFwd(OUT_BC,30); Wait(600); Off(OUT_BC); OnFwd(OUT_C,20); OnRev(OUT_B,20); Wait(2950); Off(OUT_C); Off(OUT_B); OnFwd(OUT_BC,30); Wait(600); Off(OUT_BC); pendown(); } sub nanakakume () //7画目 { OnFwd(OUT_BC,30); Wait(400); Off(OUT_BC); penup(); } task main () { ikkakume(); nikakume(); sankakume(); yonkakume(); gokakume(); rokkakume(); nanakakume(); } *まとめ [#ed2e1475] **結果 [#r11e369e] なんとか読めるレベルまでは達したと思う。 赤丸で示したところは、線がたくさん重なり読みにくくなってしまった。 青丸で示したところは、左を長くしたほうが字がきれいに見えると思い、長くしたが余りにも長すぎてしまった。 #ref(2017a/Member/Kyou/Mission1/結果.jpg,75%) **感想 [#u67075f5] ペンに当たらないようにするために全体的にロボットを高く設計した結果、重心が高くなりすぎてしまい回転が安定しなくなってしまうという症状が出た。数値から計算して理論通りにプログラミングしてもそのときの電池残量などによって誤差が生じてしまい、しっかりとそのときの状況に合わせたプログラミングが必要であると感じた。私は将来ロボットエンジニアになりたいと考えている。今回人生で初めてプログラミングをしたのだが本当にいい経験になったと思う。将来ロボットのプログラミングをどういったものを使ってやるのかは分からないため、技術的に将来役に立つかは分からない。しかし、あきらめずに何度も試行錯誤し、反省点を次に活かすなどといったロボット制作の本質的な部分がぶれることはない。今回学んだことを次につなげていきたい。